如何使用Python设置PDF的title、author元数据以生成ADA合规PDF
方案1:生成PDF前直接修改Word内置属性(优先推荐)
该方案直接在Word导出PDF前修改内置元数据,导出的PDF原生携带正确的Title、Author,不会破坏ADA规范要求的文档结构、标签属性,从根源解决校验不通过问题。
import comtypes.client import os # 配置参数 WORD_DIR = "你的Word文件所在文件夹路径" PDF_OUTPUT_DIR = "生成PDF的输出路径" TARGET_AUTHOR = "你的机构名称" def word_to_pdf_with_correct_meta(word_path, pdf_path, target_title, target_author): word = comtypes.client.CreateObject("Word.Application") word.Visible = False try: doc = word.Documents.Open(word_path) # 修改Word内置属性 doc.BuiltInDocumentProperties("Title").Value = target_title doc.BuiltInDocumentProperties("Author").Value = target_author # 导出为带标签的PDF(符合ADA规范的必要参数) doc.ExportAsFixedFormat( OutputFileName=pdf_path, ExportFormat=17, # 17对应PDF格式 OpenAfterExport=False, OptimizeFor=0, IncludeDocProps=True, # 必须开启,才会把属性写入PDF UseISO19005_1=True # 可选,生成PDF/A格式更符合规范要求 ) doc.Close() except Exception as e: print(f"处理文件{word_path}出错:{e}") finally: word.Quit() # 批量处理示例 for filename in os.listdir(WORD_DIR): if filename.endswith(".docx") or filename.endswith(".doc"): word_path = os.path.join(WORD_DIR, filename) # 此处可自定义Title规则,示例使用去掉后缀的文件名作为Title title = os.path.splitext(filename)[0] pdf_path = os.path.join(PDF_OUTPUT_DIR, f"{title}.pdf") word_to_pdf_with_correct_meta(word_path, pdf_path, title, TARGET_AUTHOR)
方案2:已生成PDF批量修改元数据(使用pikepdf)
该方案解决PyPDF2无法修改标准元数据的问题,pikepdf基于成熟的qpdf库开发,支持同时修改PDF标准文档信息和XMP元数据,完全满足ADA可访问性校验要求。
首先安装依赖:pip install pikepdf
批量处理代码示例:
import os import pikepdf from pikepdf import models PDF_DIR = "待处理PDF所在路径" OUTPUT_DIR = "修改后PDF输出路径" TARGET_AUTHOR = "你的机构名称" def modify_pdf_meta(pdf_path, output_path, target_title, target_author): with pikepdf.open(pdf_path, allow_overwriting_input=False) as pdf: # 修改标准文档信息字典 pdf.docinfo.Title = target_title pdf.docinfo.Author = target_author # 同步修改XMP元数据(ADA可访问性检查会读取该部分) xmp = pdf.open_metadata() xmp["dc:title"] = target_title xmp["dc:creator"] = [target_author] pdf.save(output_path) # 批量处理示例 for filename in os.listdir(PDF_DIR): if filename.endswith(".pdf"): pdf_path = os.path.join(PDF_DIR, filename) # 此处可自定义Title规则,示例使用去掉后缀的文件名作为Title title = os.path.splitext(filename)[0] output_path = os.path.join(OUTPUT_DIR, filename) modify_pdf_meta(pdf_path, output_path, title, TARGET_AUTHOR)
注意事项
- 优先使用方案1:Word原生导出带标签的PDF是符合ADA规范的最优路径,后期修改PDF存在小概率破坏文档结构标签的风险
- 若使用方案2,修改时需同步更新文档信息字典与XMP元数据,避免部分可访问性检查工具仅读取XMP字段导致校验不通过
- 批量处理前请先备份原始Word/PDF文件,避免操作失误丢失数据
内容的提问来源于stack exchange,提问作者ksteinmann
相关产品推荐
相关产品推荐

