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

用Python向PDF添加文本:精确插入文本到PDF文档

PDF 文档的版式特性使其适用于输出不可变格式的报告与合同。但若要在此类文档中插入或修改文本,常规方式难以实现。借助Python,我们可以高效地向 PDF 添加文本,实现从文档生成到内容管理的自动化流程。

本文将从以下方面介绍Python实现PDF中文本的添加:

文章目录

    • 新建PDF并添加段落文本
    • 向现有PDF中插入文本内容
    • 复杂格式设置:添加透明旋转水印文本
    • 总结


本文使用的方法需要用到免费的Free Spire.PDF for Python,可通过pip安装:

pip install spire.pdf.free

新建PDF并添加段落文本

在构建系统报告或生成模板文档时,通常需要从空白页插入一段段文本,保持排版一致性。

from spire.pdf import PdfDocument, PdfTrueTypeFont, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, RectangleF, \PdfStringFormat, PdfTextAlignment, PdfVerticalAlignment# 创建新的PDF文档并添加页面
pdf = PdfDocument()
page = pdf.Pages.Add()# 待插入的文本内容
text = ("The purpose of this document is to provide an overview of the company’s financial highlights for the fiscal year 2024. ""It includes revenue trends, operational costs, and net income summaries. ""The following sections will outline each metric in more detail.")# 设置字体、画刷(颜色)和排版区域
font = PdfTrueTypeFont("Arial", 14.0, PdfFontStyle.Regular, True)
brush = PdfSolidBrush(PdfRGBColor(0, 0, 0))  # 黑色文本
layout_area = RectangleF(50.0, 50.0, page.GetClientSize().Width - 100.0, page.GetClientSize().Height)
string_format = PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Top)# 添加文字内容
page.Canvas.DrawString(text, font, brush, layout_area, string_format, False)# 保存并关闭
pdf.SaveToFile("output/new.pdf")
pdf.Close()

📌 技术细节说明:

  • PdfTrueTypeFont 可嵌入外部字体文件,适用于需要控制字体兼容性的场景;
  • RectangleF 定义文本区域边界(支持自定义段落框);
  • DrawString() 支持超出区域自动换行;
  • 使用 PdfStringFormat 设定水平方向与垂直方向的对齐方式。

生成的PDF文档:
Python新建PDF并插入文本


向现有PDF中插入文本内容

当你已有一份PDF文件,但希望在某一页添加标记或文字说明,例如审批标语、状态说明等,可以使用如下方式:

from spire.pdf import PdfDocument, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, PdfFont, PdfFontFamily# 加载已有PDF文档
pdf = PdfDocument()
pdf.LoadFromFile("PDF.pdf")
page = pdf.Pages[0]# 设置字体、颜色和插入位置
font = PdfFont(PdfFontFamily.TimesRoman, 12.0, PdfFontStyle.Bold)
brush = PdfSolidBrush(PdfRGBColor(0, 128, 0))  # 深绿色
location = PointF(130.0, 90.0)# 插入文本
page.Canvas.DrawString("Verified by QA Department", font, brush, location)# 保存结果
pdf.SaveToFile("output/ModifiedPDF.pdf")
pdf.Close()

📌 技术细节说明:

  • PdfFontFamily.TimesRoman 属于 PDF 标准内置字体(无需嵌入);
  • 坐标 PointF(x, y) 单位为磅(1 pt ≈ 0.3528 mm),以页面左上角为 (0,0);
  • 无需设置区域框时,适用于短文本、标签插入、动态盖章等场景。

修改的PDF文档:
Python载入PDF插入文本


复杂格式设置:添加透明旋转水印文本

在文档审阅或内部版本发布场景中,常见的做法是添加一个带透明度与旋转角度的水印文字,以提示机密性或防止误传播。Spire.PDF 提供了画布状态保存、旋转、透明度控制等接口,可用于实现这种复杂的格式需求。

from spire.pdf import PdfDocument, PdfTrueTypeFont, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF
from spire.pdf.common import Color# 加载已有PDF文档
pdf = PdfDocument()
pdf.LoadFromFile("input1.pdf")
page = pdf.Pages[0]# 设置水印文本内容
text = "Internal Use Only"# 设置字体样式与大小
font = PdfTrueTypeFont("Arial", 40.0, PdfFontStyle.Bold, True)# 设置画刷颜色为深红色
brush = PdfSolidBrush(PdfRGBColor(Color.get_DarkRed()))# 测量文本大小以便居中放置
size = font.MeasureString(text)
x = (page.Canvas.ClientSize.Width - size.Width) / 2
y = (page.Canvas.ClientSize.Height - size.Height) / 2# 保存当前画布状态
state = page.Canvas.Save()# 设置透明度
page.Canvas.SetTransparency(0.3)# 平移至文本中心位置
page.Canvas.TranslateTransform(x + size.Width / 2, y + size.Height / 2)# 旋转文本(-45度斜着显示)
page.Canvas.RotateTransform(-45.0)# 绘制文本水印(左上角为起始点,因此需偏移)
page.Canvas.DrawString(text, font, brush, PointF(-size.Width / 2, -size.Height / 2))# 恢复画布状态
page.Canvas.Restore(state)# 保存文档
pdf.SaveToFile("output/with_watermark.pdf")
pdf.Close()

📌 技术细节说明:

  • 使用 SetTransparency(0.3) 设置文本透明度,增强水印效果但不遮挡内容;
  • TranslateTransform() 将画布原点移动至文本中心;
  • RotateTransform(-45) 实现对角线旋转,常用于“CONFIDENTIAL”或“DRAFT”类水印;
  • 水印文本使用 DrawString() 绘制,PointF(-size.Width / 2, -size.Height / 2) 保证以中心为参考点;
  • 通过 Canvas.Save()Canvas.Restore() 管理局部画布状态,避免影响页面中其他元素。

修改后的PDF文档:
Python插入文本到PDF并精确控制位置和格式


总结

通过 Spire.PDF for Python,你可以使用简洁的 Python 代码在 PDF 中添加各类文本,功能包括:

功能项方法与说明
✅ 从零创建文档PdfDocument.Pages.Add() + DrawString()
✅ 插入文本到现有文档LoadFromFile() + PointF 定位文本插入点
✅ 控制排版样式使用 RectangleF + PdfStringFormat 控制对齐与区域
✅ 多行文本支持文本中添加 \n,自动换行渲染
✅ 字体与颜色控制支持 TrueType标准字体,自定义颜色 RGB

这些操作覆盖了 PDF 文本添加的主要应用场景,从文档批量生成到人工标注支持,适合用于自动归档、审批流程、内容输出等业务场景。


📚 更多PDF编辑教程,请访问:
Spire.PDF for Python 教程中心

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

相关文章:

  • vue3+uniapp 使用vue-plugin-hiprint中实现打印效果
  • Triton Inference Server 架构与前后处理方案梳理
  • 打破空间边界!Nas-Cab用模块化设计重构个人存储逻辑
  • JAVA进阶--JVM
  • 设备发出、接收数据帧的工作机制
  • 无人机迫降模式模块运行方式概述!
  • 掉线监测-tezos rpc不能用,改为残疾网页监测
  • .net winfrom 获取上传的Excel文件 单元格的背景色
  • 深入浅出Kafka Producer源码解析:架构设计与编码艺术
  • 创客匠人:创始人 IP 打造的破局点,藏在 “小而精” 的需求里
  • React源码3:update、fiber.updateQueue对象数据结构和updateContainer()中enqueueUpdate()阶段
  • 分布式系统中设计临时节点授权的自动化安全审计
  • postgreSQL的sql语句
  • 时序预测 | Pytorch实现CNN-LSTM-KAN电力负荷时间序列预测模型
  • 2025 春秋杯夏季个人挑战赛 Web
  • lesson13:Python的datetime模块
  • 登录校验与异常处理(web后端笔记第三期)
  • NAT原理与实验指南:网络地址转换技术解析与实践
  • 中国AI应用“三分天下”:国企成主力、中小企偏订阅、C端仍在观望
  • 使用axios向服务器请求信息并渲染页面
  • TCP心跳机制详解
  • 【Linux系统】进程切换 | 进程调度——O(1)调度队列
  • 如何在服务器上运行一个github项目
  • VMware 虚拟机 Ubuntu 无法主机与虚拟机之间复制粘贴的详细解决方案
  • ZLMediaKit流媒体服务器:不用docker -java源码部署Linux问题处理
  • day20 力扣235. 二叉搜索树的最近公共祖先 力扣701.二叉搜索树中的插入操作 力扣450.删除二叉搜索树中的节点
  • 8:从USB摄像头把声音拿出来--ALSA大佬登场!
  • Bash常见条件语句和循环语句
  • rk3588平台USB 3.0 -OAK深度相机适配方法
  • springboot 好处