使用 PDF Clown 检测 PDF 表格中的标题和边框
Posted
技术标签:
【中文标题】使用 PDF Clown 检测 PDF 表格中的标题和边框【英文标题】:Detecting Headers and Borders in PDF Tables using PDF Clown 【发布时间】:2015-07-20 14:39:11 【问题描述】:我正在使用 PDF Clown 的 TextInfoExtractionSample 将 PDF 表格提取到 Excel 中,除了合并的单元格之外,我能够做到这一点。在下面的代码中,对于对象“内容”,我将扫描的内容视为文本、XObject、ContainerObject,但没有边框。任何人都知道什么对象代表 PDF 表格中的边框或如何检测文本是否是表格的标题?
private void Extract(ContentScanner level, PrimitiveComposer composer)
if(level == null)
return;
while(level.MoveNext())
ContentObject content = level.Current;
【问题讨论】:
【参考方案1】:我正在使用 PDF Clown 的
TextInfoExtractionSample
...在下面的代码中,对于对象“内容”,我将扫描的内容视为文本、XObject、ContainerObject,但没有边框。
while(level.MoveNext()) ContentObject content = level.Current;
A) 访问所有内容
在您的循环代码中,您从原始示例中删除了非常重要的块,
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表格中的边框
不幸的是,PDF 内容中没有像 border 属性 这样的东西。相反,边框是独立的对象,通常是矢量图形,可以是线条,也可以是非常细的矩形。
因此,在扫描页面内容时(递归,如 A 所示),您将不得不寻找包含
的Path
实例(命名空间 org.pdfclown.documents.contents.objects
)
moveTo m、lineTo l 和 stroke S 操作或
rectangle re 和 fill f 操作。
(This answer 可能会有所帮助)
当你遇到这样的台词时,你将不得不解释它们。这些线条可能是边框,但它们也可以用作下划线、页面装饰......
如果 PDF 恰好被标记,事情可能会更容易一些,因为您需要解释的更少。相反,您可以阅读标记信息,这些信息可能会告诉您单元格的开始和结束位置,因此您无需解释图形线。不幸的是,被标记的 PDF 比没有标记的要少。
或者如何检测一个文本是否是表格的表头?
就像上面一样,除非您碰巧检查了带标签的 PDF,否则不会立即告诉您某些文本是表格标题。你必须再次解释。该文本是否在您决定形成表格的行之外?是在里面吗?还是就在里面的任何地方?它是用特定字体绘制的吗?还是更大?颜色不一样?等等。
【讨论】:
以上是关于使用 PDF Clown 检测 PDF 表格中的标题和边框的主要内容,如果未能解决你的问题,请参考以下文章