栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python使用pdfminer库解析pdf得到的一大堆CID和数字如何处理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python使用pdfminer库解析pdf得到的一大堆CID和数字如何处理

这个是我识别pdf的代码

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 LTTextBox, LAParams
from pdfminer.converter import PDFPageAggregator
from loguru import logger
import re

pdf_path = r'C:Users17875Desktop100159_12E1X80009000024_A_01_05.pdf'
# 打开pdf文件
fp = open(pdf_path, 'rb')

# 从文件句柄创建一个pdf解析对象
parser = PDFParser(fp)
# 创建pdf文档对象,存储文档结构
document = PDFDocument(parser)

# 创建一个pdf资源管理对象,存储共享资源
rsrcmgr = PDFResourceManager()

laparams = LAParams()

# 创建一个device对象
device = PDFPageAggregator(rsrcmgr, laparams=laparams)

# 创建一个解释对象
interpreter = PDFPageInterpreter(rsrcmgr, device)

# 处理包含在文档中的每一页
for page in PDFPage.create_pages(document):
    interpreter.process_page(page)
    layout = device.get_result()
    for x in layout:
        # 获取文本对象
        if isinstance(x, LTTextBox):
            text = x.get_text().strip()
            logger.info(text)
fp.close()

可是得到的结果是一大堆cid和数字

解决方法

使用chr(int(123))

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 LTTextBox, LAParams
from pdfminer.converter import PDFPageAggregator
from loguru import logger
import re

# pdf_path = r'C:Users17875Desktop众成资料日本pdf日本体外试剂100159_12E1X80009000024_A_01_05.pdf'
pdf_path = r'C:Users17875Desktop众成资料日本pdf日本体外试剂100148_14A2X00001FIB001_A_F1_05.pdf'
# 打开pdf文件
fp = open(pdf_path, 'rb')

# 从文件句柄创建一个pdf解析对象
parser = PDFParser(fp)
# 创建pdf文档对象,存储文档结构
document = PDFDocument(parser)

# 创建一个pdf资源管理对象,存储共享资源
rsrcmgr = PDFResourceManager()

laparams = LAParams()

# 创建一个device对象
device = PDFPageAggregator(rsrcmgr, laparams=laparams)

# 创建一个解释对象
interpreter = PDFPageInterpreter(rsrcmgr, device)

# 处理包含在文档中的每一页
for page in PDFPage.create_pages(document):
    interpreter.process_page(page)
    layout = device.get_result()
    for x in layout:
        # 获取文本对象
        if isinstance(x, LTTextBox):
            text = x.get_text().strip()
            if 'cid' in text:
            	# 找到cid后面的数字
                number = re.findall(r'd+', text)
                result = [chr((int(i))) for i in number]
                logger.info(result)
            logger.info(text)
fp.close()

结果如下:

但是还不是很准确,假如有更好的方法,请分享一下

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/932233.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号