查看: 121|回复: 3

Python+Spire.PDF实战:PDF文本替换、转Word、OCR识别及表单填充全攻略

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式
在日常开发中,PDF文件的自动化编辑需求非常常见,例如批量修改合同中的日期、将PDF转为可编辑的Word文档、提取扫描件中的文字,或者动态填充表单域。本文基于Spire.PDF for Python和Spire.OCR for Python两个库,通过四个具体场景的代码示例,展示如何用Python高效处理这些任务。

所有操作均可在纯Python环境中完成,无需安装Adobe Acrobat或Microsoft Office。

## 环境准备

通过pip安装两个核心组件:
  1. pip install Spire.Pdf
  2. pip install Spire.Ocr
复制代码
如果涉及多种文档格式(如Excel、PPT),可以直接安装集成包:
  1. pip install Spire.Office
复制代码
该包额外包含Spire.XLS、Spire.Doc和Spire.Presentation等组件。

## 场景一:在PDF中查找并替换文本

适用场景:仅需修改PDF中的局部文字(如合同日期、发票金额),不影响整体排版。

核心逻辑:遍历PDF每一页,创建PdfTextReplacer对象,调用ReplaceAllText方法替换目标字符串,并可设置新文本颜色。
  1. from spire.pdf import *
  2. from spire.pdf.common import *
  3. # 加载PDF文档
  4. pdf = PdfDocument()
  5. pdf.LoadFromFile("/input/示例文档.pdf")
  6. # 遍历每一页
  7. for i in range(pdf.Pages.Count):
  8.     page = pdf.Pages.get_Item(i)
  9.     replacer = PdfTextReplacer(page)
  10.     # 将"AI 绘画"替换为"AI 生成图画",颜色设为红色
  11.     replacer.ReplaceAllText("AI 绘画", "AI 生成图画", Color.get_Red())
  12. # 保存替换后的文档
  13. pdf.SaveToFile("/output/替换所有文本.pdf")
  14. pdf.Close()
复制代码

注意:ReplaceAllText方法会替换当前页中所有匹配的文本,适用于精确匹配场景。如需区分大小写或正则匹配,可查看Spire.PDF的扩展方法。

## 场景二:PDF高保真转换为可编辑的Word

适用场景:需要对文档进行段落结构调整或二次编辑。

通过SaveToFile方法直接指定FileFormat.DOCX,即可将PDF转换为Word,最大程度保留原始排版。
  1. from spire.pdf import *
  2. pdf = PdfDocument()
  3. pdf.LoadFromFile("示例文档.pdf")
  4. pdf.SaveToFile("pdf转word.docx", FileFormat.DOCX)
  5. pdf.Close()
复制代码

转换后生成的.docx文件可以在Word中自由编辑,适合进一步处理。

## 场景三:OCR识别扫描件与图片PDF

适用场景:PDF由扫描仪或相机生成,内部只有图片而无文字层,无法直接提取文本。

需要先通过Spire.OCR对图片进行光学字符识别。如果PDF本身已经是独立的图片,可直接识别;如果是PDF文档,需要先将其转为图片(本文不展开,可参考后续教程)。

以下示例展示对单张图片进行OCR识别并输出文本文件:
  1. from spire.ocr import *
  2. scanner = OcrScanner()
  3. # 配置OCR模型路径(需提前下载模型)和语言
  4. configureOptions = ConfigureOptions()
  5. configureOptions.ModelPath = r"E:/DownloadsNew/win-x64/"
  6. configureOptions.Language = "Chinese"
  7. scanner.ConfigureDependencies(configureOptions)
  8. # 执行OCR识别
  9. scanner.Scan(r"/output/pdftoimage/ToImage_0.png")
  10. # 提取识别结果并写入文本文件
  11. text = scanner.Text.ToString()
  12. with open("/output/OCR结果.txt", "a", encoding="utf-8") as file:
  13.     file.write(text + "\n")
复制代码

关键点:ModelPath需要指向下载的OCR模型目录,Language支持“Chinese”等参数。识别出的文本为简单顺序流,不含排版格式。

## 场景四:在PDF中填写可交互表单域

适用场景:使用预置表单域的PDF模板(如入职申请表、开户信息表),通过代码批量填充数据。

核心操作:获取表单部件集合FieldsWidget,遍历并根据字段类型(文本框、复选框等)和名称赋值。
  1. from spire.pdf import *
  2. pdf = PdfDocument()
  3. pdf.LoadFromFile("application_form.pdf")
  4. form_widget = PdfFormWidget(pdf.Form)
  5. for i in range(form_widget.FieldsWidget.Count):
  6.     field = form_widget.FieldsWidget.get_Item(i)
  7.    
  8.     if isinstance(field, PdfTextBoxFieldWidget) and field.Name == "EmployeeName":
  9.         field.Text = "张三"
  10.     elif isinstance(field, PdfCheckBoxFieldWidget) and field.Name == "AgreeTerms":
  11.         field.Checked = True
  12. pdf.SaveToFile("filled_form.pdf")
  13. pdf.Close()
复制代码

这种方法保证了PDF模板的防篡改特性,同时允许局部填写。

## 四种方案对比总结

| 方案 | 核心机制 | 优势 | 局限 |
|------|----------|------|------|
| 查找并替换文本 | 直接修改PDF文本流 | 零格式损失,内存占用低 | 无法进行段落级重构 |
| 转Word | 映射为Word DOM树 | 视觉还原度高,可深度编辑 | 超大文件转换时性能要求高 |
| OCR识别 | 图像像素特征识别 | 将不可选中的“死文字”变为可编辑文本 | 仅输出原始文本流,无排版 |
| 填写表单域 | 对预埋交互字段动态赋值 | 兼顾防篡改和局部填写 | 依赖预置模板 |

选择哪种方式取决于实际需求:如果只是修改几个关键字,用方案一;需要全面编辑,用方案二;扫描件用方案三;模板批量填充用方案四。

通过Spire.PDF for Python和Spire.OCR for Python,开发者可以轻松集成这些PDF自动化能力到自己的Python脚本中。在Spire.Office官网还可以找到更多API文档和示例。
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python+Spire.PDF实战:PDF文本替换、转Word、OCR识别及表单填充全攻略

非常感谢楼主这么详细的教程!Spire.PDF这个库我之前只简单用过转换,没想到还有文本替换和表单填充的功能,太实用了。场景一的替换文本正好能解决我批量改合同日期的痛点,之前都是手动一个个改,累得不行。 有个小疑问:场景三的OCR识别,那个模型文件是直接能下载的吗?还是需要额外去官网获取?我手头有一批扫描的PDF,如果能用代码批量转成可搜索的文字就太好了。另外,文本替换那里如果遇到换行或特殊字符,ReplaceAllText能正常处理吗? 再次感谢分享,干货满满,收藏了!
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python+Spire.PDF实战:PDF文本替换、转Word、OCR识别及表单填充全攻略

感谢分享!非常实用的教程,四个场景覆盖了日常开发中最常见的PDF处理需求,代码示例也很清晰。想问一下,Spire.PDF for Python的免费版本有没有水印或页数限制?另外OCR模型需要手动下载,具体应该去哪里下载呢?
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python+Spire.PDF实战:PDF文本替换、转Word、OCR识别及表单填充全攻略

感谢分享这么详细的实战教程!Spire.PDF 这个库我之前也试过,文本替换和表单填充确实很方便,而且不用装 Adobe 的桌面软件,很适合批量自动化处理。 想追问一个细节:场景三里提到的 OCR 模型需要提前下载,你一般从哪下载模型文件?以及有没有试过识别英文以外的多语言混合文档(比如中英文混排),识别准确率如何?另外,如果扫描 PDF 是多页的,转换成图片后再逐页 OCR,会不会有性能瓶颈?如果方便的话,后续可以补充一个完整的多页扫描 PDF 到可搜索 PDF 的流程示例,相信对很多人会有帮助。 再次感谢你的整理,代码清晰,对比表格也很直观。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-23 12:04 , Processed in 0.038527 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部