国产化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 文件:
提示: 若有多段文字或需手动换行,可调整 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 文件:
通过调整坐标参数,即可灵活控制文本位置。
设置文本样式、位置、透明度与旋转
添加文本不仅仅是插入内容,更重要的是其呈现方式。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 文件:
文件正在被其他程序占用,保存时可能遇到 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 分别加载并插入指定文字即可完成批量处理。