pdfminer解析pdf坐标问题,并以类的方式解决

为什么要解析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)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国服小闲鱼请战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值