首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PDFBox读取文本和图像位置(x.y坐标)

使用PDFBox读取文本和图像位置(x.y坐标)
EN

Stack Overflow用户
提问于 2011-09-28 17:47:03
回答 1查看 4.8K关注 0票数 7

我正在做一个java程序来读取加密的PDF文件,并逐页提取文件的内容,包括文本,图像和它们在文件中的位置(x,y坐标)。现在,我使用PDFBox实现此目的,并获取文本和图像。但是我不能得到文本位置和图像位置。也有一些问题,读取一些加密的PDF文件。

EN

回答 1

Stack Overflow用户

发布于 2012-10-13 02:25:29

看看org.apache.pdfbox.examples.util.PrintTextLocations吧。我用过很多次,它对分析PDF文档中元素和边界框的布局非常有帮助。它还显示了用白色墨水打印的项目,或者在可打印区域之外的项目(可能是文档水印,或者被作者推到视线之外的“被遗忘的”项目)。

使用示例:

代码语言:javascript
运行
复制
java -cp app/target/pdfbox-app-1.5.0.jar org.apache.pdfbox.examples.util.PrintTextLocations ~/tmp/mydoc.pdf >~/tmp/out-text-locations.txt

你会得到类似这样的东西:

代码语言:javascript
运行
复制
Processing page: 0
String[53.9,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=4.6679993]A
String[58.568,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=2.6640015]f
String[61.232002,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=1.6679993]e
...

您可以很容易地解析并使用它来绘制元素的位置、边界框和每个页面的“流”(通过所有元素的轨迹)等。我相信你已经知道了,你会发现PDF几乎不可能转换成文本。它实际上只是一种图形描述格式(即用于打印机或屏幕),而不是一种标记语言。您可以很容易地制作一个打印"Hello world“的PDF,但它会在字符位置之间随机跳转(并且使用与任何ISO字符编码不同的字形,如果您这样选择的话),这使得PDF很难转换为文本。没有“单词”或“段落”的概念。例如,一个包含两列的文档对于解析成文本来说可能是一场噩梦。

对于您的问题的第二部分,在修复Xref.cc (使XRef::okToPrint()XRef::okToChange()XRef::okToCopy()XRef::okToAddNotes()都返回gTrue)之后,我使用xpdf3.02版得到了很好的结果。这是为了处理锁定的文档,而不是加密的文档(有其他实用程序可以做到这一点)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7581281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档