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


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

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

Spire.PDF for Python免费试用下载,请联系Spire官方授权代理商慧都科技 

加入Spire技术交流QQ群(125237868),与更多开发者一起提升文档开发技能。

 

环境准备:安装 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 分别加载并插入指定文字即可完成批量处理。