如何用Python库提取Word转PDF文档中的修订红线内容?
提取PDF中Word修订批注的结构化数据问题
Word开启修订模式编辑后转存的PDF,其修订内容(删除/插入文本)在PDF内部是以底层注释对象存储的,并非直接封装成{"inserted": "...", "deleted": "..."}这种结构化格式——这就是你用普通Python库无法直接提取到目标结构的核心原因。
可行的处理方案
- 先明确PDF中修订对应的注释类型:Word转PDF时,删除的文本通常对应
StrikeOut(删除线)类型注释,插入的内容一般会存放在注释的contents字段(弹出批注文本),或关联的Insertion类型注释中。 - 使用支持PDF注释解析的Python库(如
pdfplumber、PyPDF2)提取注释,再匹配同一修订操作的删除/插入内容:
import pdfplumber def parse_pdf_revisions(pdf_file_path): revision_list = [] with pdfplumber.open(pdf_file_path) as pdf_doc: for page in pdf_doc.pages: # 遍历页面所有注释,筛选删除线类型的修订 for annotation in page.annotations: if annotation.get("subtype") == "StrikeOut": # 提取被删除的文本(通过注释的 bounding box 定位页面文本) deleted_content = page.within_bbox(annotation["bbox"]).extract_text() or "" # 提取对应插入的内容(通常在注释的contents字段) inserted_content = annotation.get("contents", "").strip() if deleted_content or inserted_content: revision_list.append({ "inserted": inserted_content, "deleted": deleted_content.strip() }) return revision_list # 调用示例 revisions = parse_pdf_revisions("revised_document.pdf") print(revisions)
- 注意事项:不同版本的Word/Acrobat转PDF时,注释的存储格式可能有差异,比如部分场景下插入内容会以独立的
TextEdit注释存在,需要额外通过注释的位置、ID来关联对应的删除操作。
内容的提问来源于stack exchange,提问作者Anthony Tomasic
相关产品推荐
相关产品推荐

