当前位置: 首页 > news >正文

5 种使用 Python 自动化处理 PDF 的实用方法

自动化处理 PDF 文件已成为减少重复工作、提升工作效率的重要手段。对于需要处理报表、合同或发票的开发者来说,手动操作往往耗时且容易出错。Python 因其简单易用且拥有丰富生态系统,提供了多种库,使得 PDF 的拆分、合并、提取和生成等操作变得更加便捷。本文将介绍五种实用方法,从内置工具到专业库,帮助你在 Python 中实现 PDF 任务的自动化。

  • 内置库
  • PyPDF2
  • pdfplumber
  • ReportLab
  • Spire.PDF

使用内置库(os、subprocess)调用外部工具

在 Python 中,标准库如 ossubprocess 并不直接支持 PDF 操作,但你仍可以利用它们调用外部命令行工具,从而完成基本的 PDF 操作,例如合并、拆分或转换文件。下面的示例演示如何借助命令行工具将 PDF 文件转换为 .txt 文档:

import subprocess
import osinput_path = r"E:/Administrator/Python1/input/AI绘画的利与弊-图片版.pdf"
output_path = r"E:/Administrator/Python1/output/转为TXT.pdf"# 调用命令行工具 pdftotext
subprocess.run(["pdftotext", input_path, output_path])if os.path.exists(output_path):print("文本提取成功:", output_path)

注意:此代码依赖 Windows 下的第三方命令行工具 Poppler。

使用 PyPDF2 进行基本 PDF 操作

在了解了 Python 内置库之后,我们来看最受欢迎的开源 Python PDF 库之一——PyPDF2。这个轻量级且广泛使用的库,可以方便地完成常见 PDF 操作,如合并多个文件、拆分文档、旋转页面以及提取文本。对于只需进行基础 PDF 操作的开发者来说,它是一个很好的起点,无需依赖繁重的外部工具。

下面的代码示例展示了如何使用 PyPDF2 拆分 PDF,并将前两页保存为新的 PDF 文件:

from PyPDF2 import PdfReader, PdfWriterinput_path = r"E:/Administrator/Python1/input/AI绘画的利与弊-图片版.pdf"
output_path = r"E:/Administrator/Python1/output/拆分PDF.pdf"# 创建 PdfReader 对象并读取源 PDF
reader = PdfReader(input_path)# 创建 PdfWriter 对象
writer = PdfWriter()# 拆分 PDF,并将前两页添加到 writer
for i in range(2):  writer.add_page(reader.pages[i])# 将拆分后的 PDF 写入新文件
with open(output_path, "wb") as f:writer.write(f)print("拆分后的 PDF 已生成:", output_path)

以下为拆分后的 PDF 与原文档的对比预览:

使用 PyPDF2 在 Python 中拆分 PDF

使用 pdfplumber 精准提取文本

PDF 文件通常难以直接编辑,因此许多人希望提取其中的内容(如文本或表格)以便在其他场景中复用。这时 pdfplumber 就非常实用。它是专门用于文本和表格提取的开源 Python 库,能够在保持原有结构的同时提供高度准确的提取结果,非常适合需要可靠数据提取的场景。

下面的示例展示如何使用 pdfplumber 从 PDF 中提取文本并输出到控制台:

import pdfplumberinput_path = r"/input/AI绘画的利与弊-图片版.pdf"with pdfplumber.open(input_path) as pdf:page = pdf.pages[1]text = page.extract_text()print("第一页提取的文本:\n", text)

使用 ReportLab 创建和定制 PDF

到目前为止,我们主要关注的是从现有 PDF 文档中提取或转换内容,或拆分页面。除了处理已有文件外,许多场景还需要动态生成 PDF 文档,例如自动生成报表、添加水印或插入图表和图片。ReportLab 是一个强大的 Python 库,允许开发者从零创建 PDF 文件,并对内容和布局进行高度定制。借助 ReportLab,你可以轻松生成个性化 PDF,以满足各种业务或展示需求。

下面的 Python 示例展示如何使用 ReportLab 创建 PDF 文件:

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4output_path = r"/output/生成PDF.pdf"c = canvas.Canvas(output_path, pagesize=A4)
c.drawString(100, 750, "this is a PDF created using ReportLab.")
c.drawString(100, 730, "You can add text, images and even tables.")
c.showPage()
c.save()print("新 PDF 已生成:", output_path)

以下为输出文件预览:

使用 ReportLab 在 Python 中创建 PDF

使用专业库如 Spire.PDF 应对高级场景

除了开源库外,Python 还有商业选项,例如 Spire.PDF for Python,它提供了全面的功能,涵盖几乎所有常见的 Adobe Acrobat 操作,如 PDF 加密、数字签名和格式转换。同时,它还支持一些 Acrobat 难以处理的高级任务,如批量表单字段处理、生成带复杂图表的动态 PDF 以及自动化 PDF 报告创建。对于需要专业、自动化且高度定制的 PDF 处理工作,Spire.PDF 提供了灵活高效的解决方案。

下面通过两个代码示例展示 Spire.PDF 在 Python 中的应用。

以下示例演示如何为 PDF 文件添加数字签名:

from spire.pdf.common import *
from spire.pdf import *# 加载 PDF
doc = PdfDocument()
doc.LoadFromFile("/input/Booklet.pdf")# 创建签名生成器
signatureMaker = PdfOrdinarySignatureMaker(doc, "/alice.pfx", "e-iceblue")# 配置签名属性,如签名者姓名、联系方式、位置和签名原因
signature = signatureMaker.Signature
signature.Name = "Alice"
signature.ContactInfo = "+86 12345678"
signature.Location = "China"
signature.Reason = "Author"# 创建自定义签名外观
appearance = PdfSignatureAppearance(signature)
appearance.NameLabel = "Signer: "
appearance.ContactInfoLabel = "Tel: "
appearance.LocationLabel = "Address:"
appearance.ReasonLabel = "Reason: "
appearance.SignatureImage = PdfImage.FromFile("/signature2.png")
appearance.GraphicMode = GraphicMode.SignImageAndSignDetail
appearance.SignImageLayout = SignImageLayout.none# 获取首页
page = doc.Pages[0]# 将签名添加到页面指定位置
signatureMaker.MakeSignature("Alice sign", page, 90.0, 600.0, 260.0, 100.0, appearance)# 保存已签名文档
doc.SaveToFile("/output/数字签名.pdf")
doc.Close()

结果预览:
使用 Spire.PDF 为 PDF 添加数字签名

以下示例展示如何使用打开密码和权限密码加密 PDF:

from spire.pdf.common import *
from spire.pdf import *# 加载 PDF 文件
doc = PdfDocument()
doc.LoadFromFile("/input/AI绘画的利与弊-图片版.pdf")# 使用打开密码和权限密码加密 PDF
doc.Security.Encrypt("openPsd", "permissionPsd", PdfPermissionsFlags.FillFields, PdfEncryptionKeySize.Key128Bit)doc.SaveToFile("/output/加密PDF.pdf", FileFormat.PDF)

总结

总的来说,Python 提供了丰富的解决方案来处理 PDF,从满足基础需求的开源库到针对复杂工作流提供高级功能的商业工具。根据项目需求——无论是简单的文本提取、文档转换,还是构建完整的自动化 PDF 工作流——开发者都可以选择最适合的方案,在功能性、易用性和性能之间找到最佳平衡。

http://www.dtcms.com/a/409761.html

相关文章:

  • 专业电子商务网站建设东莞网站建设兼职
  • (23)ASP.NET Core2.2 EF关系数据库建模
  • 【ArcGIS Pro微课1000例】0073:ArcGIS Pro3.5.2学习版下载及安装教程
  • flutter mixin
  • DevOps 工具链:CI/CD 概念解析 + Git 版本控制 + GitLab 仓库 + Jenkins 自动化全教程
  • flutter 使用dio发送本地https请求报错
  • 分享咖啡豆研磨机方案,MCU控制方案
  • flutter AudioPlayer的使用问题及处理
  • utf8mb4_bin、 utf8mb3_general_ci 、utf8mb4_0900_ai_ci 这几个有什么区别
  • 策划方案网站广告设计师证怎么考
  • 半导体制造中的等离子体是什么?
  • 南华 NHJX-13 型底盘间隙仪:机动车底盘安全检测的核心设备
  • 网站优化意义安徽省住房建设工程信息网站
  • 儿童安全座椅 - 背带专利拆解:可拆卸支撑部件的快扣接口结构与安全固定机制
  • 【安全】TLS 协议介绍
  • 【C++哲学】面向对象的三大特性之 继承
  • Spring Cloud Nacos 入门案例:从 0 到 1 实现服务注册与调用
  • 百度推广联系人网站搜索引擎优化主要方法
  • 网站备案 几年安装wordpress主题后 显示乱码 怎么解决
  • C++ 位运算 高频面试考点 力扣 01.01 判断字符是否唯一 题解 每日一题
  • LeetCode 2825.循环增长使字符串子序列等于另一个字符串
  • JUC CountDownLatch源码详解
  • Unity-动画IK控制
  • 华天软件Inforcenter PLM uploadFileTolls接口存在任意文件上传漏洞
  • FT2000/4核Linux下GPIO中断调试说明
  • 从后端到react框架
  • 几个Linux系统安装体验: 银河麒麟服务器系统V11
  • 金仓数据库打通电子证照国产化“最后一公里”——福建某地2TB MongoDB无缝迁移实践
  • 宁波网站建设明细报价上海红蚂蚁装潢设计有限公司
  • 罗田企业网站建设在贸易网站怎么做贸易