PyPDF2库操作PDF元数据完全指南
pypdf 项目地址: https://gitcode.com/gh_mirrors/pypd/pypdf
元数据概述
PDF文档中的元数据(Metadata)是指嵌入在文件中的描述性信息,它不会直接显示在文档内容中,但包含了关于文档的重要属性。这些信息对于文档管理和检索至关重要。PyPDF2库提供了完整的API来读取和修改这些元数据。
常见PDF元数据字段
PDF标准定义了一系列标准的元数据字段,包括但不限于:
- /Title:文档标题
- /Author:文档作者
- /Subject:文档主题
- /Keywords:文档关键词
- /Creator:创建文档的应用程序
- /Producer:生成PDF的软件
- /CreationDate:创建日期
- /ModDate:最后修改日期
读取PDF元数据
使用PyPDF2读取PDF元数据非常简单:
from pypdf import PdfReader
# 创建PDF阅读器对象
reader = PdfReader("example.pdf")
# 获取元数据对象
meta = reader.metadata
# 打印文档页数
print(f"文档总页数: {len(reader.pages)}")
# 打印各种元数据信息
print(f"作者: {meta.author}")
print(f"创建者: {meta.creator}")
print(f"生成软件: {meta.producer}")
print(f"主题: {meta.subject}")
print(f"标题: {meta.title}")
需要注意的是,这些元数据字段可能为空,因此在处理前应进行空值检查。
写入PDF元数据
PyPDF2允许我们创建新的PDF文件并添加自定义元数据:
from datetime import datetime
from pypdf import PdfReader, PdfWriter
# 读取原始PDF
reader = PdfReader("example.pdf")
writer = PdfWriter()
# 复制所有页面
for page in reader.pages:
writer.add_page(page)
# 保留原始元数据(可选)
metadata = reader.metadata
writer.add_metadata(metadata)
# 准备时间戳(符合PDF日期格式规范)
utc_time = "-05'00'" # UTC时区偏移量
time = datetime.now().strftime(f"D\072%Y%m%d%H%M%S{utc_time}")
# 添加新元数据
writer.add_metadata(
{
"/Author": "张三",
"/Producer": "PyPDF2库",
"/Title": "技术文档示例",
"/Subject": "PDF元数据操作",
"/Keywords": "PDF, 元数据, Python",
"/CreationDate": time,
"/ModDate": time,
"/Creator": "Python脚本",
"/CustomField": "自定义字段值", # 自定义元数据字段
}
)
# 保存新PDF
with open("带元数据的PDF.pdf", "wb") as f:
writer.write(f)
更新现有PDF元数据
如果只需要更新部分元数据而不修改文档内容,可以使用更简洁的方式:
from pypdf import PdfWriter
# 直接从原PDF克隆写入器
writer = PdfWriter(clone_from="example.pdf")
# 只更新需要的元数据字段
writer.add_metadata(
{
"/Author": "李四",
"/Producer": "更新后的生成器",
"/Title": "新标题",
}
)
# 保存修改后的PDF
with open("更新元数据的PDF.pdf", "wb") as f:
writer.write(f)
高级技巧与注意事项
-
日期格式:PDF规范要求日期格式严格遵循特定模式,PyPDF2会自动处理这种转换。
-
自定义字段:除了标准字段,还可以添加任意自定义元数据字段,但某些PDF阅读器可能不会显示这些字段。
-
元数据编码:非ASCII字符(如中文)在元数据中是允许的,PyPDF2会正确处理编码问题。
-
性能考虑:对于大型PDF文件,修改元数据不会显著增加处理时间,因为实际内容不会被重新处理。
-
兼容性问题:某些PDF阅读器可能只识别部分标准元数据字段,建议测试目标环境下的显示效果。
通过掌握PyPDF2的元数据操作功能,开发者可以更好地管理和组织PDF文档,实现自动化文档处理流程。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考