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

国产化PDF处理控件Spire.PDF教程:使用 Python 向 PDF 添加文字(支持创建与编辑)

在处理 PDF 时,向文档中添加文字是非常常见的场景,比如自动生成报告、插入批注说明、填写表单模板或添加版本标记等。借助 Python 向 PDF 插入文本,可以大幅提升文档处理的灵活性与自动化效率。

相比手动操作或依赖复杂工具,使用专业的 PDF 库能让你通过几行代码精准地控制文本位置、样式和内容。E-iceblue旗下Spire系列产品,是文档处理组件领域的佼佼者,支持国产化信创。本文将介绍,如何借助功能强大的 Spire.PDF for Python 库,演示如何实现这些操作。

Spire.PDF for Python免费试用下载 

环境准备:安装 Python PDF 库

开始前,请先安装 Spire.PDF for Python

pip install Spire.PDF

选择 Spire.PDF 的理由:

  • 无需安装 Acrobat 或其他办公软件
  • 支持精确控制文本样式与位置
  • 同时支持创建与修改 PDF
  • 跨平台兼容,适用于各种操作系统

创建新 PDF 并添加文字

如果你需要从零创建一个 PDF 文件并写入文字,以下示例展示了如何在空白页面中插入带有自定义样式的文本内容。

示例:创建空白 PDF 并插入文字

from spire.pdf import PdfDocument, PdfTrueTypeFont, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, RectangleF, \PdfStringFormat, PdfTextAlignment, PdfVerticalAlignment# 创建一个新的 PDF 文档并添加一页
pdf = PdfDocument()
page = pdf.Pages.Add()# 要绘制的文本内容(示例字符串)
text = ("本报告总结了 2025 年第一季度各类产品的销售表现。"+ "以下是按产品类别划分的总销售额明细,"+ "随后是各个地区的销售对比分析。")# 设置字体、画刷和起始坐标点
font = PdfTrueTypeFont("微软雅黑", 14.0, PdfFontStyle.Regular, True)  # 使用 Arial 字体,14号,常规样式,嵌入字体
brush = PdfSolidBrush(PdfRGBColor(0, 0, 0))  # 使用黑色实心画刷
point = PointF(50.0, 100.0)  # 文本起始绘制坐标(未被实际使用)# 设置文本布局区域和格式
layoutArea = RectangleF(50.0, 50.0, page.GetClientSize().Width - 100.0, page.GetClientSize().Height)
# 从页面距离左边 50、高度 50 的位置开始绘制文本,宽度为页面宽度减去两侧各 50 的边距,高度为整页高度stringFormat = PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Top)
# 文本左对齐,垂直顶部对齐# 在页面上绘制文本
page.Canvas.DrawString(text, font, brush, layoutArea, stringFormat, False)# 保存 PDF 文件并关闭文档
pdf.SaveToFile("output/new.pdf")
pdf.Close()

要点说明:

  • 使用 PdfTrueTypeFont() 加载系统字体,支持字体大小与样式配置。
  • 通过 PdfSolidBrush() 设置文本颜色,例如 (0, 0, 0) 表示黑色。
  • 使用 RectangleF() 定义文本绘制区域,支持自动换行。
  • 通过 PdfStringFormat() 控制文字对齐方式。
  • 使用 DrawString() 在页面指定位置绘制文字,不影响其他内容。

生成的 PDF 文件:

使用Python创建新PDF插入文本

提示: 若有多段文字或需手动换行,可调整 Y 坐标或多次调用 DrawString() 分段插入。

向已有 PDF 添加文字

若你希望在现有 PDF 文档中添加文字,可通过加载 PDF、定位页面,并指定位置插入文本。

常见应用场景:

  • 添加注释或说明
  • 标记文档处理状态(如“已审核”、“作废”)
  • 向模板中填入信息字段

示例:在已有 PDF 页面中添加文字

from spire.pdf import PdfDocument, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, PdfCjkStandardFont, PdfCjkFontFamily# 加载已有的 PDF 文档
pdf = PdfDocument()
pdf.LoadFromFile("input.pdf")  # 从文件加载 PDF
page = pdf.Pages[0]  # 获取第一页# 设置字体为 Times Roman,字号 12,加粗
font = PdfCjkStandardFont(PdfCjkFontFamily.MonotypeHeiMedium, 16.0, PdfFontStyle.Bold)# 使用红色画刷
brush = PdfSolidBrush(PdfRGBColor(255, 0, 0))  # 红色# 设置文本绘制位置
location = PointF(150.0, 110.0)# 在指定位置绘制文本
page.Canvas.DrawString("本文件已批准。", font, brush, location)# 保存修改后的 PDF 文件
pdf.SaveToFile("output/modified.pdf")
pdf.Close()

要点说明:

  • LoadFromFile() 可加载本地 PDF 文档
  • 使用 pdf.Pages[index] 访问页面对象
  • 添加的内容以叠加形式呈现,不会修改原始内容
  • 文本位置由 PointF(x, y) 控制,坐标单位为磅(point)

保存的 PDF 文件:

使用Python载入PDF文件插入文本

通过调整坐标参数,即可灵活控制文本位置。

设置文本样式、位置、透明度与旋转

添加文本不仅仅是插入内容,更重要的是其呈现方式。Spire.PDF 支持多种文本样式控制,包括字体、颜色、对齐方式、透明度和旋转角度,常用于水印或提示标签。

设置字体与颜色

# 创建 PdfTrueTypeFont(使用系统中的 Calibri 字体,16号,斜体,嵌入字体)
font = PdfTrueTypeFont("Calibri", 16.0, PdfFontStyle.Italic, True)# 创建 PdfFont(使用内置 Times Roman 字体,16号,斜体)
font = PdfFont(PdfFontFamily.TimesRoman, 16.0, PdfFontStyle.Italic)# 创建 PdfBrush,用于设置文本绘制颜色
brush = PdfSolidBrush(PdfRGBColor(34, 139, 34))  # 森林绿(forest green)

PdfTrueTypeFont 支持将字体嵌入 PDF,确保在不同设备上显示一致。如需减小文件体积,可使用系统字体(不嵌入)。

设置透明度与旋转角度

# 保存当前画布状态
state = page.Canvas.Save()# 设置半透明效果(0.0 = 完全透明,1.0 = 完全不透明)
page.Canvas.SetTransparency(0.4)# 将原点移动到页面中心
page.Canvas.TranslateTransform(page.Size.Width / 2, page.Size.Height / 2)# 将画布逆时针旋转 45 度
page.Canvas.RotateTransform(-45)# 在新的原点位置绘制文本
page.Canvas.DrawString("草稿", font, brush, PointF(-50, -20))

透明度与旋转角度的结合,常用于创建水印、对角标记等视觉效果。

示例:添加居中斜体水印

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 = "请勿外传此文档"  # 将 "Confidential" 翻译为中文“机密”# 创建字体(微软雅黑,40号,加粗,嵌入字体)
font = PdfTrueTypeFont("微软雅黑", 40.0, PdfFontStyle.Bold, True)# 创建画刷(深蓝色)
brush = PdfSolidBrush(PdfRGBColor(Color.get_DarkBlue()))# 测量文字尺寸以计算居中位置
size = font.MeasureString(text)
x = (page.Canvas.ClientSize.Width - size.Width) / 2
y = (page.Canvas.ClientSize.Height - size.Height) / 2# 保存当前画布状态
state = page.Canvas.Save()# 设置透明度为 0.3(30% 不透明)
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 文件
pdf.SaveToFile("output/with_watermark.pdf")
pdf.Close()

常用于生成自动水印文字,如 “CONFIDENTIAL”、“COPY” 等,可灵活用于批量处理。

生成的 PDF 文件:

使用Python在PDF文件中插入水印文字

文件正在被其他程序占用,保存时可能遇到 PermissionError。

常见问题与跨平台注意事项

在不同平台或字体环境下添加文本时,可能会遇到如下问题。以下是一些常见问题及解决建议:

问题可能原因解决方案
文本位置偏差坐标设置未考虑页面尺寸使用 ClientSize 或 MeasureString() 实现动态适配
字体无法显示缺少对应字体或不支持字符集嵌入常用字体如 Arial Unicode,或使用 Noto Sans 等 Unicode 字体
Unicode 字符乱码字体不支持全字符集使用支持广泛字符集的字体并嵌入
内容重叠行距或位置设置不当使用 MeasureString() 计算文本高度,合理设置 Y 坐标
出现水印文字使用试用版未授权使用免费版本,或申请临时授权
文件体积变大嵌入字体增加文件大小如不需跨设备显示一致性,可使用不嵌入字体的 PdfFont
macOS/Linux 显示异常系统字体差异或度量方式不同携带字体文件,或使用跨平台字体以确保一致性

总结

通过 Spire.PDF for Python,你可以灵活地实现 PDF 文档的文字添加,无论是新建文档、修改现有文件,还是批量处理。该库提供丰富的样式与位置控制选项,适用于自动化报告、水印标注、模板填充等多种场景。

常见问题(FAQ)

如何用 Python 向 PDF 添加文字?

使用如 Spire.PDF 等库,通过 DrawString() 方法添加文字,并可设置字体、颜色和位置等属性。

能否向已有 PDF 添加文字?

当然可以。加载 PDF 后通过页面对象调用 DrawString() 添加内容即可。

如何将文本文件内容转换成 PDF?

逐行读取 TXT 文件内容,结合 DrawString() 方法按需写入 PDF 页面。

可以批量向多个 PDF 添加相同的内容吗?

可以。遍历文件目录,对每个 PDF 分别加载并插入指定文字即可完成批量处理。

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

相关文章:

  • 腾讯位置商业授权鸿蒙地图SDK工程配置
  • 网络爬虫的详细知识点
  • 【JVM】深入理解 JVM 类加载器
  • 语雀编辑器内双击回车插入当前时间js脚本
  • Webpack5 新特性与详细配置指南
  • 爬虫小知识
  • 机器学习:数据清洗与预处理 | Python
  • 【后端】.NET Core API框架搭建(9) --配置使用Log4Net日志
  • 结合自身,制定一套明确的 Web3 学习路线和技术栈建议
  • Elasticsearch MCP 服务器现已在 AWS Marketplace 上提供
  • 概念设计总监的“VR”雕刻术:用Substance 3D Modeler,实现直觉式3D建模
  • HOOPS SDK赋能PLM:打造全生命周期3D数据管理与协作能力
  • 一次多架构镜像构建实战:Docker Buildx + Harbor 踩坑记录
  • Curtain e-locker易锁防泄密:从源头把关“打印”安全
  • 电商行业如何做好网络安全工作?
  • 树莓派Qt 安装
  • 2. 框架对比类:《React 18 vs Vue3:状态管理方案深度对比》
  • React hooks——useMemo
  • 【Java开发日记】我们来说说 LockSupport 的 park 和 unpark
  • React hooks——useCallback
  • 深入理解React Hooks:从使用到原理
  • Planning Agent:基于大模型的动态规划与ReAct机制,实现复杂问题自适应执行求解
  • React 学习(4)
  • Android 实现:当后台数据限制开启时,仅限制互联网APN。
  • NLP-文本预处理
  • 使用docker安装、启动jenkins服务(mac系统)
  • 数据结构 栈(1)
  • vue-advance-concepts
  • 【Redis 】看门狗:分布式锁的自动续期
  • 部署-k8s和docker、jenkins的区别和联系