赞
踩
为什么要解析pdf坐标。解析之后可以自定义读取pdf信息。
pdfminer解析的坐标和Acrobat解析的pdf坐标看起来很不一样。pdfminer解析的坐标是以左下角为原点,.bbox的数值为像素(可能是70,360,1024),这里为1024。Acrobat解析的坐标是以左上角为原点,显示的数值为mm。如下图所示。(opencv是左上角为原点)
Acrobat的坐标我们更为熟悉,同时也是所见即所得,首先在Acrobat打开光标标尺。
观察下图,我们可以看到pdf字样的左下角坐标为(9.28,8.96),与转化之后的坐标基本一致。
以上说明此方案是可行的。下面是完整代码。以类的方式解决问题,创建一个类,把坐标放到类中转换一下,就是我们熟悉的坐标了。特别的像素1024和mm的转换关系请自行查阅。
- #coding=utf-8
- from pdfminer.pdfparser import PDFParser
- from pdfminer.pdfdocument import PDFDocument
- from pdfminer.pdfpage import PDFPage
- from pdfminer.pdfinterp import PDFResourceManager
- from pdfminer.pdfinterp import PDFPageInterpreter
- from pdfminer.layout import LAParams
- from pdfminer.converter import PDFPageAggregator
- from pdfminer.layout import LTRect, LTLine, LTCurve, LTTextBox, LTTextLine
-
- class box:
- def __init__(self,oldbox): # 类的属性
- self.name = oldbox
- def transform(self): #类的行为
- global newbox
- x0, y0, x1, y1 = self.name
- x0 = x0 / 1024 * 36.12
- y0 = 29.65 - y0 / 1024 * 36.12
- x1 = x1 / 1024 * 36.12
- y1 = 29.65 - y1 / 1024 * 36.12
- newbox = (x0, y0, x1, y1)
-
- fp = open(r'D:\系统默认\桌面\新建DOCX 文档.pdf', 'rb')
- parser = PDFParser(fp)
- document = PDFDocument(parser)
- pages = PDFPage.create_pages(document) # 断言文档对象可提取
- assert document.is_extractable # 设置参数并获得pdf解释器
- rsrcmgr = PDFResourceManager()
- laparams = LAParams()
- device = PDFPageAggregator(rsrcmgr, laparams=laparams)
- interpreter = PDFPageInterpreter(rsrcmgr, device)
- for eachPage in pages:
- interpreter.process_page(eachPage)
- layout = device.get_result()
- for x in layout: # 引脚对应的输入原点
- if isinstance(x, LTTextBox):
- a = x.get_text()
- if 'Pdf' in a:
- box(x.bbox).transform() #类的转换
- print(x.bbox)
- print(newbox)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。