我正在使用PDF Clown的TextInfoExtractionSample将PDF表格提取到Excel中,除了合并单元格之外我能够做到这一点。在下面的代码中,对于object," content"我将扫描的内容视为文本,XObject,ContainerObject,但没有任何边框。任何人都知道哪个对象代表PDF表格中的边框或如何检测文本是否是表格的标题?
private void Extract(ContentScanner level, PrimitiveComposer composer)
{
if(level == null)
return;
while(level.MoveNext())
{
ContentObject content = level.Current;
}
}
答案 0 :(得分:2)
我正在使用PDF Clown'
TextInfoExtractionSample
...在下面的代码中,对于object," content"我将扫描的内容看作文本,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);
}
这些块使示例 recurse 成为复杂的对象(你提到的 XObject,ContainerObject ),而这些对象又包含自己的简单内容。
任何人都知道哪个对象代表PDF表格中的边框
不幸的是,PDF内容中没有像 border属性这样的内容。相反,边框是独立的对象,通常是矢量图形,线条或非常细的矩形。
因此,在扫描页面内容时(递归地,如 A 所示),您将不得不寻找包含
的Path
个实例(名称空间org.pdfclown.documents.contents.objects
)
(This answer可能有帮助)
当您遇到这些行时,您必须解释它们。这些线可能是边框,但它们也可以用作下划线,页面装饰......
如果PDF恰好被标记,那么事情可能会更容易,因为你必须解释得更少。相反,您可以读取标记信息,该信息可以告诉您单元格的开始和结束位置,因此您无需解释图形线条。不幸的是,标记的PDF文件仍然没有。
或者如何检测文本是否是表格的标题?
如上所述,除非你碰巧检查标记的PDF,否则没有什么能立刻告诉你某些文本是表头。你必须再次解释。那个文字在你决定组成一张桌子之外吗?它在里面吗?或者只是在里面?它是用特定字体绘制的吗?还是更大?不同的颜色?等