我想使用以下代码更改pdf文件的元数据:
from PyPDF2 import PdfFileReader, PdfFileWriter
title = "Vice-présidence pour l'éducation"
fin = open(filename, 'rb')
reader = PdfFileReader(fin)
writer = PdfFileWriter()
writer.appendPagesFromReader(reader)
metadata = reader.getDocumentInfo()
metadata.update({'/Title':title})
writer.addMetadata(metadata)
fout = open(filename, 'wb')
writer.write(fout)
fin.close()
fout.close()
如果标题是英语(没有重音),则可以正常工作,但是当带有重音时,会出现以下错误:
TypeError: createStringObject should have str or unicode arg
如何在元数据中添加带有重音的标题?
谢谢
答案 0 :(得分:2)
获取此错误消息的唯一方法是在library本身的string
函数中为参数createStringObject(string)
输入错误的类型。
正在使用utils.py
中的这些函数来查找字符串或字节类型import builtins
bytes_type = type(bytes()) # Works the same in Python 2.X and 3.X
string_type = getattr(builtins, "unicode", str)
仅当我用明显错误的类型重写您的代码时,我才能重现您的错误(使用with语句重写代码,但只有注释行很重要):
from PyPDF2 import PdfFileReader, PdfFileWriter
with open(inputfile, "rb") as fr, open(outputfile, "wb") as fw:
reader = PdfFileReader(fr)
writer = PdfFileWriter()
writer.appendPagesFromReader(reader)
metadata = reader.getDocumentInfo()
# metadata.update({'/Title': "Vice-présidence pour l'éducation"})
metadata.update({'/Title': [1, 2, 3]}) # <- wrong type here !
writer.addMetadata(metadata)
writer.write(fw)
似乎您的字符串title = "Vice-présidence pour l'éducation"
的类型与解析的bytes_type
或string_type
都不匹配。您是否有一个奇怪的标题变量类型(我可能在代码中看不到,也许是因为创建了MCVE),或者您无法将bytes_type
或string_type
设置为库编写者想要的类型(这可能是库中的错误或错误的安装,这很难告诉我。)
没有可复制的代码,很难提供解决方案。但是希望这会给您正确的方向。也许将字符串的类型设置为解析为bytes_type
或string_type
的字符串就足够了。其他解决方案将在图书馆站点上或仅仅是黑客入侵。