使用pypdf提取TCPDF生成的PDF文本时触发IndexError报错的解决方案咨询
使用pypdf提取TCPDF生成的PDF文本时触发IndexError报错的解决方案咨询
我最近遇到一个棘手的问题,想请教社区的各位有没有可行的解决办法:
问题背景
我目前使用Python 3.10.11和pypdf 3.17.0做PDF文本提取工作,大部分文件都能正常处理,但遇到一类由TCPDF生成的PDF时,调用extract_text()方法就会触发IndexError,具体报错栈追踪如下:
File "...\pypdf_cmap.py", line 481, in type1_alternative
if words[3] != b"put":
IndexError: list index out of range
这类PDF并没有加密,我可以正常获取它的元数据,也能执行其他PDF操作,但唯独提取文本时会报错。我搜索了相关问题,没找到完全匹配这个报错的案例,但感觉和“Python无法提取部分PDF文本”“PyPDF2字体读取异常”这类场景有点相似。
测试对比情况
我尝试用已经被弃用的PyPDF2(据我了解开发者已经将维护精力转移到pypdf上了)来提取同一份PDF,反而能正常获取到文本。测试代码如下:
# 切换注释以下两行进行测试 # from pypdf import PdfReader # from PyPDF2 import PdfReader reader = PdfReader("example.pdf") number_of_pages = len(reader.pages) page = reader.pages[0] text = page.extract_text() print(text)
使用PyPDF2运行时,能正常输出类似CÁMARA DE COMERCIO...的完整文本;但换成pypdf运行,就会抛出上面的IndexError。
我的诉求
我不想为了这类特殊PDF在项目中多引入一个依赖,更希望继续使用pypdf。所以想请教大家:有没有办法让pypdf正常处理这类TCPDF生成的PDF?是不是我在使用过程中遗漏了什么配置或操作?
备注:内容来源于stack exchange,提问作者sescobar
相关产品推荐
相关产品推荐

