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

使用PDF小丑检测PDF表格中的标题和边框,pdf,pdfclown,Pdf,Pdfclown,我正在使用PDF小丑的TextInfoExtractionSample将PDF表格提取到Excel中,除了合并的单元格之外,我都能做到。在下面的代码中,对于object“content”,我将扫描的内容视为text、XObject、ContainerObject,而对于border则没有。有人知道PDF表格中哪个对象表示边框,或者如何检测文本是否是表格的标题吗 private void Extract(ContentScanner level, PrimitiveComposer comp

我正在使用PDF小丑的TextInfoExtractionSample将PDF表格提取到Excel中,除了合并的单元格之外,我都能做到。在下面的代码中,对于object“content”,我将扫描的内容视为text、XObject、ContainerObject,而对于border则没有。有人知道PDF表格中哪个对象表示边框,或者如何检测文本是否是表格的标题吗

   private void Extract(ContentScanner level, PrimitiveComposer composer)
   {
      if(level == null)
        return;
      while(level.MoveNext())
      {
        ContentObject content = level.Current;
      }
    }
我正在使用PDF小丑的
TextInfoExtractionSample

在下面的代码中,对于object“content”,我将扫描的内容视为text、XObject、ContainerObject,而对于border则没有

while(level.MoveNext())
{
    ContentObject content = level.Current;
}
A) 访问所有内容 在循环代码中,您从原始示例中删除了非常重要的块

    if(content is XObject)
    {
        // Scan the external level!
        Extract(((XObject)content).GetScanner(level), composer);
    }

这些块使示例递归到复杂对象(您提到的XObject、ContainerObject)中,而这些对象又包含它们自己的简单内容

B) 检查所有内容 有人知道PDF表格中哪个对象表示边框吗

不幸的是,PDF内容中没有类似于边框属性的内容。相反,边框是独立的对象,通常是矢量图形,可以是直线或非常细的矩形

因此,在扫描页面内容时(递归地,如A所示),您必须查找包含以下内容的
Path
实例(namespace
org.pdfclown.documents.contents.objects

  • 移动到m,直线移动到l,行程移动到S操作或
  • 矩形re和填充f操作
(可能有帮助)

当你遇到这种情况时,你将不得不解释它们。这些线条可以是边框,但也可以用作下划线、页面装饰等

如果PDF恰巧被标记,事情可能会简单一些,因为你需要更少的解释。相反,您可以读取标记信息,这些信息可能会告诉您单元格的开始和结束位置,因此您不需要解释图形线。不幸的是,标记的PDF还比不标记的少

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

如上所述,除非您碰巧检查了带标签的PDF,否则不会立即告诉您某些文本是表头。你得再翻译一遍。该文本是否在您决定形成表格的行之外?它在里面的顶部吗?或者就在里面的任何地方?它是用特定的字体绘制的吗?还是更大?不同的颜色?等等

    if(content is ContainerObject)
    {
        // Scan the inner level!
        Extract(level.ChildLevel, composer);
    }