PyPDF2 编码问题'latin-1' codec can't encode characters in position 8-11: ordinal not in range(256)
使用pypdf2出现编码问题
报错信息
解决方法
1、修改pypdf2包中的generic.py文件
我用的是PyCharm,报错的是那个模块,直接点击即可跳转查看。
generic.py文件第488行原文
try:
return NameObject(name.decode('utf-8'))
except (UnicodeEncodeError, UnicodeDecodeError) as e:
# Name objects should represent irregular characters
# with a '#' followed by the symbol's hex number
if not pdf.strict:
warnings.warn("Illegal character in Name Object", utils.PdfReadWarning)
return NameObject(name)
else:
raise utils.PdfReadError("Illegal character in Name Object")
修改成
try:
return NameObject(name.decode('utf-8'))
except (UnicodeEncodeError, UnicodeDecodeError) as e:
try:
return NameObject(name.decode('gbk'))
except (UnicodeEncodeError, UnicodeDecodeError) as e:
# Name objects should represent irregular characters
# with a '#' followed by the symbol's hex number
if not pdf.strict:
warnings.warn("Illegal character in Name Object", utils.PdfReadWarning)
return NameObject(name)
else:
raise utils.PdfReadError("Illegal character in Name Object")
2、修改pypdf2包中的utils.py文件
utils.py238行原文
r = s.encode('latin-1')
if len(s) < 2:
bc[s] = r
return r
修改成
try:
r = s.encode('latin-1')
if len(s) < 2:
bc[s] = r
return r
except Exception as e:
print(s)
r = s.encode('utf-8')
if len(s) < 2:
bc[s] = r
return r
然后运行就成功了
自己写的一个简单pdf多文件合并为一个pdf文件的小程序
使用方法:
为了避免删除源pdf文件,所以另建文件夹,将需要合并的pdf文件复制一份进去,然后对pdf文件重命名,以数字命名排序,1.pdf、2.pdf...。
示例如下
from PyPDF2 import PdfFileReader, PdfFileWriter
import os
def readPdf(path):
if os.path.splitext(path)[1] == '': # 判断文件格式是否以.pdf结尾
path = path + ".pdf"
pdf = PdfFileReader(path) # 读取pdf
return pdf
def writePdf(files):
pdf_writer = PdfFileWriter() # pdf写入对象
for file in files:
for page in range(file.getNumPages()):
pdf_writer.addPage(file.getPage(page))
with open("pdf_all.pdf", 'wb') as f:
pdf_writer.write(f)
if __name__ == '__main__':
obj = []
for i in range(1, 10): # 这里得根据你的文件数量来自行更改,注意文件命名
obj.append(readPdf(str(i)))
writePdf(obj)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!