使用PyPDF2合并PDF时遇Unexpected destination '/__WKANCHOR_2'错误求解决
解决PyPDF2合并PDF时的"Unexpected destination '/__WKANCHOR_2'"错误
这个报错大多是因为PyPDF2对某些PDF(比如Wkhtmltopdf生成的文件)里的特殊锚点处理不兼容导致的,下面给你几个实用的解决办法:
方案1:切换到PyPDF4库
PyPDF4是PyPDF2的分支版本,修复了不少兼容性问题,对这类锚点错误的处理更友好:
- 先安装依赖:
pip install PyPDF4 - 修改你的代码,只需要替换导入的库即可:
from PyPDF4 import PdfFileMerger, PdfFileReader filepath_list = ['/tmp/abc.pdf','/tmp/xyz.pdf'] merger = PdfFileMerger() for file_name in filepath_list: with open(file_name, 'rb') as f: merger.append(f) merger.write("result.pdf") merger.close() # 记得加上这行释放资源
方案2:用pdfrw库实现合并
pdfrw对复杂PDF的兼容性表现也不错,尤其擅长处理这类特殊锚点场景:
- 先安装库:
pip install pdfrw - 使用以下代码完成合并:
from pdfrw import PdfReader, PdfWriter filepath_list = ['/tmp/abc.pdf','/tmp/xyz.pdf'] writer = PdfWriter() for path in filepath_list: writer.addpages(PdfReader(path).pages) writer.write("result.pdf")
方案3:预处理修复PDF的锚点问题
如果必须坚持用PyPDF2,可以先用工具预处理PDF,修复有问题的锚点。比如用ghostscript命令行工具:
# 修复第一个PDF gs -o fixed_abc.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress /tmp/abc.pdf # 修复第二个PDF gs -o fixed_xyz.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress /tmp/xyz.pdf
之后再用你原来的代码合并修复后的fixed_abc.pdf和fixed_xyz.pdf即可。
内容的提问来源于stack exchange,提问作者Deval
相关产品推荐
相关产品推荐

