[英]Detecting Headers and Borders in PDF Tables using PDF Clown
我正在使用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;
}
}
我正在使用PDF Clown的
TextInfoExtractionSample
...在下面的代码中,对于对象“内容”,我将扫描的内容视为文本,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);
}
这些块使样本递归到复杂的对象(您提到的XObject,ContainerObject )中,这些对象又包含它们自己的简单内容。
任何人都知道什么对象代表PDF表格中的边框
不幸的是,PDF内容中没有像border属性那样的东西。 取而代之的是,边框是独立的对象,通常是矢量图形,是线条还是非常细的矩形。
因此,在扫描页面内容时(递归地,如A所示 ),您将必须查找包含以下内容的Path
实例(名称空间org.pdfclown.documents.contents.objects
)
( 此答案可能会有所帮助)
当您遇到这样的界限时,您将不得不对其进行解释 。 这些线可能是边框,但也可以用作下划线,页面装饰,...
如果PDF刚好被加了标签,那么就可以使事情变得容易一些,因为您无需多解释。 相反,您可以阅读标记信息,该信息可以告诉您单元格的开始和结束位置,因此您无需解释图形线。 不幸的是,加标签的PDF还是少于。
或者如何检测文本是否为表格的标题?
就像上面一样,除非您碰巧检查了带标签的PDF,否则没有任何内容可以立即告诉您某些文本是表格标题。 您必须再次解释。 该文本是否超出您确定要形成表格的行数? 它在顶部吗? 还是在里面的任何地方? 是否以特定字体绘制? 或更大? 不同的颜色? 等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.