如何通过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
相关产品推荐
相关产品推荐

