提取文本时跳过PDF部分并获取图像坐标

时间:2016-11-22 20:39:24

标签: c# image pdf itext

目前,我可以使用PDF中的位置数据提取所有文本块。问题是PDF包含带有文本注释的图像,我不想将其包含在提取中。

但是,无论出于何种原因,每当我在PDF中搜索图像时,它只会找到其中一个图像,并且通常会抛出异常:不支持颜色空间。就好像它不能将它们识别为图像一样?

我不想提取图像,只是找到它们相对于PDF的开始和结束位置,这样我就可以免除图像顶部的文本。

例如: enter image description here

图表上的数字是不需要的,需要从提取的文本中删除。

我只是不确定如何:

A)找到所有图像并存储开始和结束位置的坐标

B)忽略PDF文档中图像顶部的文本

(我正在使用iTextSharp试图实现这一目标,但到目前为止我没有太多运气)

1 个答案:

答案 0 :(得分:1)

我不确定iTextSharp是如何工作的,但是PostScript语言参考或PDF参考手册可能是开始弄清楚你需要知道什么的好地方。

我刚刚在文本编辑器中打开PDF文件来检查格式,因为我有一段时间没有看到它,然后意识到问题可能是什么。

PDF支持“图像”和“流对象”,它们可以包含图像数据。 Stream对象实际上声明了足够的信息,您可以知道它们的开始和结束位置,并编写一些内容来手动忽略它们。 Stream Object Header看起来像这样:

<</Intent/RelativeColorimetric/Subtype/Image/Length 19678/Filter/DCTDecode/Name/X/Metadata 4314 0 R/BitsPerComponent 8/ColorSpace 5247 0 R/Width 290/Height 372/Type/XObject>>stream

完全有可能您的特定PDF只有一个“图像”,其余部分是“Streams”。

我建议打开它来看看。如果您在正在使用的库中包含一些示例代码也是有益的。

我还发现,在文本编辑器中打开一个PDF,这个字符串/Type /Page似乎可以创建新页面,所以你有可能计算这些页面以确定你当前所在的页面。

我正在审核的文档顶部的标题为%PDF-1.2,最新版本为1.7,因此可能存在一些差异。

您是否有机会分享您正在使用的PDF文件?