1

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

1 回答 1

3

我正在使用 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 内容中没有边框属性。相反,边框是独立的对象,通常是矢量图形,可以是线条,也可以是非常细的矩形。

因此,在扫描页面内容时(递归地,如A所示),您将不得不寻找包含的Path实例(命名空间org.pdfclown.documents.contents.objects

  • moveTo mlineTo lstroke S操作或
  • 矩形 re填充 f操作。

这个答案可能会有所帮助)

当你遇到这样的台词时,你将不得不解释它们。这些线可能是边框,但它们也可以用作下划线、页面装饰......

如果 PDF 恰好被标记,那么事情可能会更容易一些,因为您需要解释的更少。相反,您可以阅读标记信息,这些信息可能会告诉您单元格的开始和结束位置,因此您无需解释图形线。不幸的是,被标记的 PDF 仍然比没有标记的少。

或者如何检测文本是否是表格的标题?

就像上面一样,除非您碰巧检查了带标签的 PDF,否则不会立即告诉您某些文本是表头。你必须再次解释。该文本是否在您决定形成表格的行之外?是在里面吗?还是就在里面的任何地方?它是用特定字体绘制的吗?还是更大?颜色不一样?等等。

于 2015-08-07T15:29:00.833 回答