在处理 PDF 时,向文档中添加文字是非常常见的场景,比如自动生成报告、插入批注说明、填写表单模板或添加版本标记等。借助 Python 向 PDF 插入文本,可以大幅提升文档处理的灵活性与自动化效率。
相比手动操作或依赖复杂工具,使用专业的 PDF 库能让你通过几行代码精准地控制文本位置、样式和内容。本文将借助功能强大的 Spire.PDF for Python 库,演示如何实现这些操作。
文章导航
环境准备:安装 Python PDF 库
开始前,请先安装 Spire.PDF for Python:
pip install Spire.PDF
如使用免费版本,请安装:
pip install spire.pdf.free
选择 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()
分段插入。
想了解如何将 TXT 文件转换为 PDF?请参考:Python 将文本文件转换为 PDF 教程
向已有 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 文件:
文件正在被其他程序占用,保存时可能遇到 PermissionError
。
查看完整水印添加方法:Python 向 PDF 添加文字水印
常见问题与跨平台注意事项
在不同平台或字体环境下添加文本时,可能会遇到如下问题。以下是一些常见问题及解决建议:
总结
通过 Spire.PDF for Python,你可以灵活地实现 PDF 文档的文字添加,无论是新建文档、修改现有文件,还是批量处理。该库提供丰富的样式与位置控制选项,适用于自动化报告、水印标注、模板填充等多种场景。
你可以立即使用免费版本开始开发,或联系销售申请免费临时License 以解锁完整功能。
常见问题(FAQ)
如何用 Python 向 PDF 添加文字?
使用如 Spire.PDF 等库,通过 DrawString()
方法添加文字,并可设置字体、颜色和位置等属性。
能否向已有 PDF 添加文字?
当然可以。加载 PDF 后通过页面对象调用 DrawString()
添加内容即可。
如何将文本文件内容转换成 PDF?
逐行读取 TXT 文件内容,结合 DrawString()
方法按需写入 PDF 页面。
可以批量向多个 PDF 添加相同的内容吗?
可以。遍历文件目录,对每个 PDF 分别加载并插入指定文字即可完成批量处理。