当前位置:   article > 正文

pdfminer解析pdf坐标问题,并以类的方式解决_pdf查看像素坐标

pdf查看像素坐标

为什么要解析pdf坐标。解析之后可以自定义读取pdf信息。

pdfminer解析的坐标和Acrobat解析的pdf坐标看起来很不一样。pdfminer解析的坐标是以左下角为原点,.bbox的数值为像素(可能是70,360,1024),这里为1024。Acrobat解析的坐标是以左上角为原点,显示的数值为mm。如下图所示。(opencv是左上角为原点)

Acrobat的坐标我们更为熟悉,同时也是所见即所得,首先在Acrobat打开光标标尺。

 观察下图,我们可以看到pdf字样的左下角坐标为(9.28,8.96),与转化之后的坐标基本一致。

 以上说明此方案是可行的。下面是完整代码。以类的方式解决问题,创建一个类,把坐标放到类中转换一下,就是我们熟悉的坐标了。特别的像素1024和mm的转换关系请自行查阅。

  1. #coding=utf-8
  2. from pdfminer.pdfparser import PDFParser
  3. from pdfminer.pdfdocument import PDFDocument
  4. from pdfminer.pdfpage import PDFPage
  5. from pdfminer.pdfinterp import PDFResourceManager
  6. from pdfminer.pdfinterp import PDFPageInterpreter
  7. from pdfminer.layout import LAParams
  8. from pdfminer.converter import PDFPageAggregator
  9. from pdfminer.layout import LTRect, LTLine, LTCurve, LTTextBox, LTTextLine
  10. class box:
  11. def __init__(self,oldbox): # 类的属性
  12. self.name = oldbox
  13. def transform(self): #类的行为
  14. global newbox
  15. x0, y0, x1, y1 = self.name
  16. x0 = x0 / 1024 * 36.12
  17. y0 = 29.65 - y0 / 1024 * 36.12
  18. x1 = x1 / 1024 * 36.12
  19. y1 = 29.65 - y1 / 1024 * 36.12
  20. newbox = (x0, y0, x1, y1)
  21. fp = open(r'D:\系统默认\桌面\新建DOCX 文档.pdf', 'rb')
  22. parser = PDFParser(fp)
  23. document = PDFDocument(parser)
  24. pages = PDFPage.create_pages(document) # 断言文档对象可提取
  25. assert document.is_extractable # 设置参数并获得pdf解释器
  26. rsrcmgr = PDFResourceManager()
  27. laparams = LAParams()
  28. device = PDFPageAggregator(rsrcmgr, laparams=laparams)
  29. interpreter = PDFPageInterpreter(rsrcmgr, device)
  30. for eachPage in pages:
  31. interpreter.process_page(eachPage)
  32. layout = device.get_result()
  33. for x in layout: # 引脚对应的输入原点
  34. if isinstance(x, LTTextBox):
  35. a = x.get_text()
  36. if 'Pdf' in a:
  37. box(x.bbox).transform() #类的转换
  38. print(x.bbox)
  39. print(newbox)

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号