pdf读取内容缺失(漏字/文字丢失)问题

项目中遇到pdf文件漏字,由于文件涉密,不能展示,简单描述一下:

比如原pff中 姓名:张三

读取结果中:空白:张三

即:原文件说是银行出具的打款证明,银行内部设置了文件权限,读取不了

但是,我们发现,相同文件权限的其它文件,可以正常读取,所以,可能不是文件权限问题

然后,还是从代码开始排查

读取代码:

复制代码
def trans_pic(pdf_page_document, target_path):
    '''
    pdf_page_document: pdf_page_document = fitz.open('pdf文件路径')[页码]
    target_path: 保存的图片路径
    '''
    rotate = int(0)
    trans = fitz.Matrix(1, 1).preRotate(rotate)
    pm = pdf_page_document.getPixmap(matrix=trans, alpha=False) # 本行代码提示 warn
    pm.writePNG(target_path)

pdf_fitz = fitz.open(ocr_pdf_file_path)
trans_pic(pdf_fitz[0], page_pic_path)

用代码读取问题文件,报warn

复制代码
mupdf: zlib error: invalid distance too far back
mupdf: FT_New_Memory_Face(SOKSWQ+SimSun): SFNT font table missing

意思大概是:1:文件编码有问题 2:字体缺失

正常文件和问题文件的代码执行过程,仅此warn差别,其它无差别。

解决方向:

1:修改运行环境的字体库,代码加编码修改,但是是这个编码和字体,应该是很难改的[放弃];

2:让客户重新生成文件,需要跟银行交涉,成本大,且也不保证能解决[放弃];

3:从代码上解决。

然后,发现PyMuPDF版本较早,升级为最新版本,发现文件读取正常

复制代码
# 注意:需要安装最新版的 PyMuPDF == 1.22.5
# !pip install PyMuPDF --upgrade
import fitz
pdf_fitz = fitz.open("./识别漏字-原文件.pdf")
rotate = int(0)
trans = fitz.Matrix(1, 1).prerotate(rotate)
pdf_page_document = pdf_fitz[0]
pm = pdf_page_document.get_pixmap(matrix=trans, alpha=False)
pm.save('./12111123.PNG')

希望遇到类似问题的同学,可以先尝试升级个版本试试

相关推荐
疯狂的挖掘机3 小时前
记一次基于QT的图片操作处理优化思路(包括在图上放大缩小,截图,画线,取值等)
开发语言·数据库·qt
cnxy1883 小时前
围棋对弈Python程序开发完整指南:步骤4 - 提子逻辑和劫争规则实现
开发语言·python·机器学习
意趣新3 小时前
C 语言源文件从编写完成到最终生成可执行文件的完整、详细过程
c语言·开发语言
TheSumSt3 小时前
Python丨课程笔记Part3:语法进阶部分(控制结构与基础数据结构)
数据结构·笔记·python
ha_lydms4 小时前
5、Spark函数_s/t
java·大数据·python·spark·数据处理·maxcompute·spark 函数
李艺为4 小时前
根据apk包名动态修改Android品牌与型号
android·开发语言
电商API&Tina4 小时前
跨境电商 API 对接指南:亚马逊 + 速卖通接口调用全流程
大数据·服务器·数据库·python·算法·json·图搜索算法
Yyyyy123jsjs5 小时前
外汇Tick数据交易时段详解与Python实战分析
人工智能·python·区块链
黄河滴滴5 小时前
java系统变卡变慢的原因是什么?从oom的角度分析
java·开发语言
老华带你飞5 小时前
农产品销售管理|基于java + vue农产品销售管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端