我使用PDF Clown的textinfoextracactionsample将PDF表提取到Excel中,除了合并的单元格外,我能够做到这一点。在下面的代码中,对于对象"content",我看到扫描的内容为text、XObject、ContainerObject,但没有看到边框。谁知道什么对象表示PDF表的边界或如何检测如果文本是表的标题?
private void Extract(ContentScanner level, PrimitiveComposer composer)
{
if(level == null)
return;
while(level.MoveNext())
{
ContentObject content = level.Current;
}
}
A)访问所有内容我正在使用PDF小丑的
TextInfoExtractionSample
…在下面的代码中,对于对象"content",我看到扫描的内容为text、XObject、ContainerObject,但是没有看到边框。
while(level.MoveNext()) { ContentObject content = level.Current; }
在您的循环代码中,您从原始示例中删除了非常重要的块,
if(content is XObject)
{
// Scan the external level!
Extract(((XObject)content).GetScanner(level), composer);
}
和
if(content is ContainerObject)
{
// Scan the inner level!
Extract(level.ChildLevel, composer);
}
这些块使样例递归成为复杂对象(您提到的XObject、ContainerObject),这些对象又包含它们自己的简单内容。
B)检查所有内容
不幸的是,在PDF内容中没有像这样的边界属性。相反,边界是独立的对象,通常是矢量图形,可以是直线或非常细的矩形。 因此,在扫描页面内容时(递归地,如A中所示),您必须查找包含 的有谁知道PDF表格中的边框是什么对象吗
Path
实例(命名空间org.pdfclown.documents.contents.objects
)。- 移至 m , 画线 l ,和中风 S 操作或 矩形
- re 和 f 操作。
(这个答案可能有帮助)
当您遇到这样的行时,您将不得不解释它们。这些行可以用作边框,也可以用作下划线、页面装饰、…如果PDF碰巧被标记了,事情可能会更容易一点,因为你需要解释的更少。相反,您可以阅读标签信息,这些信息可能会告诉您单元格的开始和结束位置,因此您不需要解释图形行。不幸的是,有标签的pdf比没有标签的要少。
和上面一样,除非你碰巧检查一个带标签的PDF,否则没有什么能立即告诉你某些文本是一个表头。你得再解释一遍。您确定要形成表格的行之外的文本是什么?是在里面的顶部吗?还是里面的任何地方?它是用特定的字体绘制的吗?或更大?不同的颜色吗?等。或如何检测如果文本是表的标题?