任何有使用 pikepdf 编辑 pdf 元数据的经验的人?
我安装了这个库,因为其他库似乎在目录和/或书签方面存在一些问题。我也尝试过 pdfrw,但是这个库无法覆盖现有值,所以现在我正在尝试 pikepdf。
文档说:
在 with 块中打开元数据以将其打开以进行编辑。退出块时,将提交更改(更新 XMP 和 Document Info 字典)并附加到 PDF 对象。PDF 仍然必须保存。如果块中发生异常,则丢弃更改。
In [4]: with pdf.open_metadata() as meta:
...: meta['dc:title'] = "Let's change the title"
我已经尝试过这种方法,使用一个函数:
from pikepdf import Pdf
def add_metadata(source_pdf, author, title, out_dir):
with Pdf.open(source_pdf) as pdf:
with pdf.open_metadata() as meta:
meta['dc:title'] = title
meta['dc:creator'] = author
pdf.save(os.path.join(out_dir, os.path.basename(source_pdf)))
保存后,什么都没有改变。我在这里遗漏了一些明显的东西吗?
如果我在函数中添加断点并尝试检查现有值,则会收到未找到键的错误。所以我想这是问题的一部分——我无法访问正确的键,但我如何才能看到 open_metadata() 返回的对象中存在哪些键值对?如果我按原样打印“元”对象,我会得到以下信息:
<x:xmpmeta xmlns:x="adobe:ns:meta/"
x:xmptk="XMP toolkit 2.9.1-13, framework 1.6">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:iX="http://ns.adobe.com/iX/1.0/">
<rdf:Description xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
rdf:about="Q"
pdf:Producer="GPL Ghostscript 8.70"/>
<rdf:Description xmlns:xmp="http://ns.adobe.com/xap/1.0/"
rdf:about="W">
<xmp:ModifyDate>2020-05-28T09:26:1Z</xmp:ModifyDate>
<xmp:CreateDate>2020-05-28T09:26:1Z</xmp:CreateDate>
<xmp:CreatorTool>XYZ</xmp:CreatorTool>
</rdf:Description>
<rdf:Description xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
rdf:about="E"
xapMM:DocumentID="R"/>
<rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/"
rdf:about="T"
dc:format="application/pdf">
<dc:title>
<rdf:Alt>
<rdf:li xml:lang="x-default">Unknown</rdf:li>
</rdf:Alt>
</dc:title>
<dc:creator>
<rdf:Seq>
<rdf:li>user-id,S-D-F-G-12345678</rdf:li>
</rdf:Seq>
</dc:creator>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
print(meta.keys())
--> KeysView(<pikepdf.models.metadata.PdfMetadata object at 0x000001E4024306A0>)
list(meta.keys())
-->[]
有人可以指出我正确的方向吗?如何更改值“未知”和“用户 ID,SDFG-12345678”?