使用PDF小丑检测PDF表中的标头和边框



我使用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;
      }
    }

我正在使用PDF小丑的TextInfoExtractionSample

在下面的代码中,对于对象"content",我看到扫描的内容为text、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内容中没有像这样的边界属性。相反,边界是独立的对象,通常是矢量图形,可以是直线或非常细的矩形。 因此,在扫描页面内容时(递归地,如A中所示),您必须查找包含 的Path实例(命名空间org.pdfclown.documents.contents.objects)。
  • 移至 m , 画线 l ,和中风 S 操作或
  • 矩形
  • re f 操作。

(这个答案可能有帮助)

当您遇到这样的行时,您将不得不解释它们。这些行可以用作边框,也可以用作下划线、页面装饰、…

如果PDF碰巧被标记了,事情可能会更容易一点,因为你需要解释的更少。相反,您可以阅读标签信息,这些信息可能会告诉您单元格的开始和结束位置,因此您不需要解释图形行。不幸的是,有标签的pdf比没有标签的要少。

或如何检测如果文本是表的标题?

和上面一样,除非你碰巧检查一个带标签的PDF,否则没有什么能立即告诉你某些文本是一个表头。你得再解释一遍。您确定要形成表格的行之外的文本是什么?是在里面的顶部吗?还是里面的任何地方?它是用特定的字体绘制的吗?或更大?不同的颜色吗?等。

最新更新