You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过pypdf为PDF添加XMP数据?求非商业替代方案

关于pypdf添加XMP元数据及替代方案

最新版pypdf的支持情况

现在最新版的pypdf已经支持读写PDF的XMP元数据,完全解决了2009年那个回答里的限制。你可以通过PdfWriter和PdfReader的相关API实现,以下是简单示例:

from pypdf import PdfReader, PdfWriter

# 读取原PDF
reader = PdfReader("input.pdf")
writer = PdfWriter()

# 将原PDF页面添加到写入器
writer.append_pages_from_reader(reader)

# 构造XMP元数据(可根据需求自定义结构)
xmp_xml = """<x:xmpmeta xmlns:x="adobe:ns:meta/">
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/">
            <dc:title>自定义PDF标题</dc:title>
            <dc:creator>测试作者</dc:creator>
            <dc:subject>XMP元数据嵌入测试</dc:subject>
        </rdf:Description>
    </rdf:RDF>
</x:xmpmeta>"""

# 嵌入XMP元数据
writer.add_metadata(xmp_metadata=xmp_xml)

# 保存修改后的PDF
with open("output_with_xmp.pdf", "wb") as output_file:
    writer.write(output_file)

非商业替代方案

如果不想使用pypdf,还有以下两种开源非商业的实现方式:

1. 使用PyMuPDF(fitz)

PyMuPDF是功能全面的PDF处理库,支持嵌入XMP数据,示例代码如下:

import fitz  # 导入PyMuPDF库

# 打开目标PDF文档
doc = fitz.open("input.pdf")

# 定义XMP元数据内容
xmp_xml = """<x:xmpmeta xmlns:x="adobe:ns:meta/">
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/">
            <dc:title>PyMuPDF添加的XMP标题</dc:title>
        </rdf:Description>
    </rdf:RDF>
</x:xmpmeta>"""

# 设置XMP元数据
doc.set_metadata({"xmp": xmp_xml})

# 保存修改后的文档
doc.save("output_pymupdf.pdf")
doc.close()

2. 使用Ghostscript命令行工具

Ghostscript是开源的PDF处理工具,可通过命令行嵌入XMP数据,示例命令:

gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=output_gs.pdf -c "[ /Metadata (xmp_content.xml) /DOCINFO pdfmark" -f input.pdf

其中xmp_content.xml是存储你自定义XMP数据的本地文件路径。


内容的提问来源于stack exchange,提问作者yannis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:37:04