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

Python PDF挖掘获取每行文本的位置,python,pdf,position,Python,Pdf,Position,我目前正在使用答案中提供的类: 提供的类非常有用,因为我可以获得PDF中每个文本框的位置。每当文本框中有新行时,给定的类也会插入一个“\u1” 我想知道是否也有办法获得文本框中每行文本的位置 找到它:解决方案是即使有文本框也要递归,直到找到文本行。当调用parsepdf方法时,下面的类应该提供pdf上每行文本的x和y坐标 from pdfminer.pdfparser import PDFParser from pdfminer.pdfdocument import PDFDocument f

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

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


我想知道是否也有办法获得文本框中每行文本的位置

找到它:解决方案是即使有文本框也要递归,直到找到文本行。当调用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('\n', '_'))

            # 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
从pdfminer.pdfparser导入pdfparser
从pdfminer.pdfdocument导入pdfdocument
从pdfminer.pdfpage导入pdfpage
从pdfminer.pdfpage导入pdftextraction不允许
从pdfminer.pdfinterp导入PDFResourceManager
从pdfminer.pdfinterp导入pdfpageexplorer
从pdfminer.pdfdevice导入pdfdevice
从pdfminer.layout导入LAParams
从pdfminer.converter导入PDFPageAggregator
导入pdfminer
类pdfPositionHandling:
def解析对象(自我,lt对象):
#在对象列表上循环
对于lt_objs中的obj:
如果isinstance(对象,pdfminer.layout.LTTextLine):
打印“%6d,%6d,%s%”(obj.bbox[0],obj.bbox[1],obj.get_text().replace('\n','\u'))
#如果它是一个文本框,也会递归
如果存在(对象、pdfminer.layout.LTTextBoxHorizontal):
self.parse_obj(obj._objs)
#如果是容器,则递归
elif isinstance(对象、pdfminer.layout.LTFigure):
self.parse_obj(obj._objs)
def parsepdf(self、文件名、起始页、结束页):
#打开一个PDF文件。
fp=打开(文件名为“rb”)
#创建与文件对象关联的PDF解析器对象。
解析器=PDFParser(fp)
#创建存储文档结构的PDF文档对象。
#作为第二个参数初始化的密码
document=PDFDocument(解析器)
#检查文档是否允许文本提取。如果没有,则中止。
如果文件不是可提取的:
不允许提升PDFTextraction
#创建存储共享资源的PDF资源管理器对象。
rsrcmgr=PDFResourceManager()
#创建PDF设备对象。
设备=PDF设备(rsrcmgr)
#开始布局分析
#设置用于分析的参数。
laparams=laparams()
#创建PDF页面聚合器对象。
设备=PDFPageAggregator(rsrcmgr,laparams=laparams)
#创建PDF解释器对象。
解释器=PDFPAGE解释器(rsrcmgr,设备)
i=0
#在文档中的所有页面上循环
对于PDFPage中的页面。创建页面(文档):
如果i>=起始页和i