在python中添加带有重音符号的pdf元数据

时间:2018-08-14 15:12:46

标签: python pdf

我想使用以下代码更改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

如何在元数据中添加带有重音的标题?

谢谢

1 个答案:

答案 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_typestring_type都不匹配。您是否有一个奇怪的标题变量类型(我可能在代码中看不到,也许是因为创建了MCVE),或者您无法将bytes_typestring_type设置为库编写者想要的类型(这可能是库中的错误或错误的安装,这很难告诉我。)

没有可复制的代码,很难提供解决方案。但是希望这会给您正确的方向。也许将字符串的类型设置为解析为bytes_typestring_type的字符串就足够了。其他解决方案将在图书馆站点上或仅仅是黑客入侵。