欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

pdf怎么查看坐标 python_如何从PDF文件中提取文本和文本坐标?

发布时间:2024/4/14 python 62 豆豆
生活随笔 收集整理的这篇文章主要介绍了 pdf怎么查看坐标 python_如何从PDF文件中提取文本和文本坐标? 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

下面是一个复制粘贴就绪的示例,它列出了PDF中每个文本块的左上角,我认为对于任何不包含包含包含文本的“Form XObjects”的PDF,它都应该适用:from pdfminer.layout import LAParams, LTTextBox

from pdfminer.pdfpage import PDFPage

from pdfminer.pdfinterp import PDFResourceManager

from pdfminer.pdfinterp import PDFPageInterpreter

from pdfminer.converter import PDFPageAggregator

fp = open('yourpdf.pdf', 'rb')

rsrcmgr = PDFResourceManager()

laparams = LAParams()

device = PDFPageAggregator(rsrcmgr, laparams=laparams)

interpreter = PDFPageInterpreter(rsrcmgr, device)

pages = PDFPage.get_pages(fp)

for page in pages:

print('Processing next page...')

interpreter.process_page(page)

layout = device.get_result()

for lobj in layout:

if isinstance(lobj, LTTextBox):

x, y, text = lobj.bbox[0], lobj.bbox[3], lobj.get_text()

print('At %r is text: %s' % ((x, y), text))我使用PDFPage.get_pages(),这是创建文档、检查文档并将其传递给PDFPage.create_pages()的简写

我不需要处理LTFigures,因为PDFMiner目前无论如何都无法干净地处理它们内部的文本。

LAParams允许您设置一些参数,这些参数控制PDFMiner如何将PDF中的单个字符神奇地分组到行和文本框中。如果你惊讶于这样的分组是一件需要发生的事情,那么在pdf2txt docs中可以证明这一点:In an actual PDF file, text portions might be split into several chunks in the middle of its running, depending on the authoring software. Therefore, text extraction needs to splice text chunks.

LAParams的参数与大多数PDFMiner一样,没有文档记录,但是您可以看到它们in the source code或者在Python shell中调用help(LAParams)。参数的一些的含义在https://pdfminer-docs.readthedocs.io/pdfminer_index.html#pdf2txt-py给出,因为它们也可以作为参数在命令行传递给pdf2text。

上面的layout对象是一个LTPage,它是一个“布局对象”的iterable。每个布局对象都可以是以下类型之一。。。LTTextBox

LTFigure

LTImage

LTLine

LTRect

。。。或者他们的子类。(特别是,您的文本框可能都是LTTextBoxHorizontals。)

文档中的图片显示了LTPage结构的更多细节:

上面的每种类型都有一个.bbox属性,该属性包含一个(x0,y0,x1,y1)元组,分别包含对象的左、下、右和顶部的坐标。y坐标是从页面的底部开始的距离。如果您更方便使用从上到下的y轴,则可以从页面的.mediabox高度中减去它们:x0, y0, x1, y1 = some_lobj.bbox

y0 = page.mediabox[3] - y1

y1 = page.mediabox[3] - y0

除了bbox,LTTextBoxes还有一个.get_text()方法,如上所示,该方法将文本内容作为字符串返回。请注意,每个LTTextBox都是LTChars(PDF显式绘制的字符,带有bbox)和LTAnnos(PDFMiner根据相隔很远的字符向文本框内容的字符串表示添加的额外空格;这些字符没有bbox)的集合。

这个答案开头的代码示例结合了这两个属性来显示每个文本块的坐标。

最后,值得注意的是,与上面提到的其他堆栈溢出答案不同,我不需要递归到LTFigures中,PDFMiner似乎无法将该文本分组为LTTextBoxes(您可以在https://stackoverflow.com/a/27104504/1709587中的示例PDF上进行尝试),而是生成一个直接包含LTChar对象的LTFigure。原则上,您可以找出如何将它们组合成一个字符串,但PDFMiner(截至20181108版本)不能为您这样做。

不过,希望您需要解析的pdf不使用包含文本的Form XObjects,所以这个警告不适用于您。

总结

以上是生活随笔为你收集整理的pdf怎么查看坐标 python_如何从PDF文件中提取文本和文本坐标?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。