Python PDF挖掘获取文本在每一行上的位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python PDF挖掘获取文本在每一行上的位置相关的知识,希望对你有一定的参考价值。

我目前正在使用答案中提供的课程:

How to extract text and text coordinates from a pdf file?

提供的类非常有帮助,因为我可以获得PDF中每个文本框的位置。每当文本框内有新行时,给定的类也会插入一个“ _”。

我想知道是否还有某种方法可以获取文本框中每一行文本的位置?

答案

找到它:解决方案是即使有TextBox,也要递归,直到找到文本行。当调用parsepdf方法时,下面的类应提供pdf上每一行文本的x和y坐标。

from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
from pdfminer.layout import LAParams
from pdfminer.converter import PDFPageAggregator
import pdfminer

class pdfPositionHandling:

    def parse_obj(self, lt_objs):

        # loop over the object list
        for obj in lt_objs:

            if isinstance(obj, pdfminer.layout.LTTextLine):
                print "%6d, %6d, %s" % (obj.bbox[0], obj.bbox[1], obj.get_text().replace('
', '_'))

            # if it's a textbox, also recurse
            if isinstance(obj, pdfminer.layout.LTTextBoxHorizontal):
                self.parse_obj(obj._objs)

            # if it's a container, recurse
            elif isinstance(obj, pdfminer.layout.LTFigure):
                self.parse_obj(obj._objs)

    def parsepdf(self, filename, startpage, endpage):

        # Open a PDF file.
        fp = open(filename, 'rb')

        # Create a PDF parser object associated with the file object.
        parser = PDFParser(fp)

        # Create a PDF document object that stores the document structure.
        # Password for initialization as 2nd parameter
        document = PDFDocument(parser)

        # Check if the document allows text extraction. If not, abort.
        if not document.is_extractable:
            raise PDFTextExtractionNotAllowed

        # Create a PDF resource manager object that stores shared resources.
        rsrcmgr = PDFResourceManager()

        # Create a PDF device object.
        device = PDFDevice(rsrcmgr)

        # BEGIN LAYOUT ANALYSIS
        # Set parameters for analysis.
        laparams = LAParams()

        # Create a PDF page aggregator object.
        device = PDFPageAggregator(rsrcmgr, laparams=laparams)

            # Create a PDF interpreter object.
        interpreter = PDFPageInterpreter(rsrcmgr, device)


        i = 0
        # loop over all pages in the document
        for page in PDFPage.create_pages(document):
            if i >= startpage and i <= endpage:
                # read the page into a layout object
                interpreter.process_page(page)
                layout = device.get_result()

                # extract text from this object
                self.parse_obj(layout._objs)
            i += 1

以上是关于Python PDF挖掘获取文本在每一行上的位置的主要内容,如果未能解决你的问题,请参考以下文章

iText:重新对齐 PDF 页面上的文本位置

如何获取 PDF 内文本的位置/坐标?

如何在 Ruby 中使用“PDF-Reader”gem 获取文本的位置

使用 Quartz 2D 解析 pdf 时获取文本位置

使用R将PDF文件转换为文本文件进行文本挖掘

在 PDF 文件中查找文本位置