国产化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 分别加载并插入指定文字即可完成批量处理。

免费Spire.PDF for .NET 是一款由e-iceblue公司开发的专业性的PDF文档创建组件。它能够使用户在不用Adobe Acrobat和其他外部控件的情况下,运用.NET 应用程序阅读,编写和操纵PDF 文档。Spire.PDF for .NET不仅可以运用在服端比如:ASP.NET 或者其他环境,还可以应用在Windows Forms 应用程序中。Spire.PDF for .NET 适合应用于所有常见的坏境中,比如:创建好的PDF文档可以存到磁盘中, 还可以在Windows Forms应用程序,ASP.NET 应用程序客户端浏览器中保存为数据流。 Spire.PDF for .NET 功能丰富。 除了基本的功能比如:绘制多种图形,图片,创建窗体字段,插入页眉页脚,输入数据表,自动对大型表格进行分页外,Spire.PDF for .NET还支持PDF数字签名,将HTML转换成PDF格式,提取PDF文档中的文本信息和图片,存为文本格式和各种图片格式,甚至可以将PDF中的附件提取出来。 主要功能 支持嵌入式字体,Truetype 字体和CJK字体。 支持绘图。比如:矩形,环形,弧形,椭圆形,也可以自定笔刷将其填充。 可以将图片从数据流, 磁盘文件中载入到PDF 文档中。 在PDF 文档中既可以绘制梯状图形和矢量图像,还支持掩模和水印图像。 可以在PDF 文档中载入数据表。可以设置表中的行和列的格式,还可以在表内加入图形元素。 自动对PDF 中的大型表格进行分页。 创建窗体字段。比如在PDF 文档中创建按钮,文本框,列表框,复选框等等。 在PDF 中插入页眉页脚。 通过设置所有者密码和用户密码来加密PDF文档。 通过作者的签名来保护PDF文档。 读取当前PDF文档的表格并且填充表格。 HTML网页在转换到PDF文档时会拆分为多个大型页面,这些页面可以原原本本的展现在PDF文档中,而且在PDF文档的分页处没有任何文字的截断。用户还可以将这些网页在不需要临时文件的情况下,直接转换为数据流来创建PDF文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值