国产化PDF处理控件Spire.PDF教程:使用 Python 向 PDF 添加文字(支持创建与编辑)
<p><img src="https://image.evget.com/attachment/keditor/image/20250717/111334_2.png"></p><p>在处理 PDF 时,向文档中添加文字是非常常见的场景,比如自动生成报告、插入批注说明、填写表单模板或添加版本标记等。<strong>借助 Python 向 PDF 插入文本</strong>,可以大幅提升文档处理的灵活性与自动化效率。</p>
<p>相比手动操作或依赖复杂工具,使用专业的 PDF 库能让你通过几行代码精准地控制文本位置、样式和内容。<strong>E-iceblue</strong>旗下Spire系列产品,是文档处理组件领域的佼佼者,<strong>支持国产化信创</strong>。本文将介绍,如何借助功能强大的<strong> </strong><strong>Spire.PDF for Python</strong> 库,演示如何实现这些操作。</p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>Spire.PDF for Python免费试用下载,请联系Spire官方授权代理商<span style="color: rgba(0, 0, 0, 1)">慧都科技 </span></strong></span></p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong><em>加入Spire技术交流QQ群(125237868),与更多开发者一起提升文档开发技能。</em></strong></span></p>
<p> </p>
<h2>环境准备:安装 Python PDF 库</h2>
<p>开始前,请先安装 <strong><u>Spire.PDF for Python</u></strong>:</p>
<pre class="prettyprint lang-js highlighter-hljs"><code>pip install Spire.PDF</code></pre>
<p><strong>选择 Spire.PDF 的理由:</strong></p>
<ul>
<li>无需安装 Acrobat 或其他办公软件</li>
<li>支持精确控制文本样式与位置</li>
<li>同时支持创建与修改 PDF</li>
<li>跨平台兼容,适用于各种操作系统</li>
</ul>
<h2>创建新 PDF 并添加文字</h2>
<p>如果你需要<strong>从零创建一个 PDF 文件并写入文字</strong>,以下示例展示了如何在空白页面中插入带有自定义样式的文本内容。</p>
<h3>示例:创建空白 PDF 并插入文字</h3>
<pre class="prettyprint lang-js highlighter-hljs"><code>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()</code></pre>
<p><strong>要点说明:</strong></p>
<ul>
<li>使用 PdfTrueTypeFont() 加载系统字体,支持字体大小与样式配置。</li>
<li>通过 PdfSolidBrush() 设置文本颜色,例如 (0, 0, 0) 表示黑色。</li>
<li>使用 RectangleF() 定义文本绘制区域,支持自动换行。</li>
<li>通过 PdfStringFormat() 控制文字对齐方式。</li>
<li>使用 DrawString() 在页面指定位置绘制文字,不影响其他内容。</li>
</ul>
<p>生成的 PDF 文件:</p>
<p><img src="https://www.e-iceblue.cn/images/tutorials-images/python-add-text-to-pdf-1.png"></p>
<p><strong>提示:</strong> 若有多段文字或需手动换行,可调整 Y 坐标或多次调用 DrawString() 分段插入。</p>
<h2>向已有 PDF 添加文字</h2>
<p>若你希望<strong>在现有 PDF 文档中添加文字</strong>,可通过加载 PDF、定位页面,并指定位置插入文本。</p>
<p>常见应用场景:</p>
<ul>
<li>添加注释或说明</li>
<li>标记文档处理状态(如“已审核”、“作废”)</li>
<li>向模板中填入信息字段</li>
</ul>
<h3>示例:在已有 PDF 页面中添加文字</h3>
<pre class="prettyprint lang-js highlighter-hljs"><code>from spire.pdf import PdfDocument, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, PdfCjkStandardFont, PdfCjkFontFamily
# 加载已有的 PDF 文档
pdf = PdfDocument()
pdf.LoadFromFile("input.pdf")# 从文件加载 PDF
page = pdf.Pages# 获取第一页
# 设置字体为 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()</code></pre>
<p><strong>要点说明:</strong></p>
<ul>
<li>LoadFromFile() 可加载本地 PDF 文档</li>
<li>使用 pdf.Pages 访问页面对象</li>
<li>添加的内容以叠加形式呈现,不会修改原始内容</li>
<li>文本位置由 PointF(x, y) 控制,坐标单位为磅(point)</li>
</ul>
<p>保存的 PDF 文件:</p>
<p><img src="https://www.e-iceblue.cn/images/tutorials-images/python-add-text-to-pdf-2.png"></p>
<p>通过调整坐标参数,即可灵活控制文本位置。</p>
<h2>设置文本样式、位置、透明度与旋转</h2>
<p>添加文本不仅仅是插入内容,更重要的是其呈现方式。<strong>Spire.PDF </strong>支持多种文本样式控制,包括字体、颜色、对齐方式、透明度和旋转角度,常用于水印或提示标签。</p>
<h3>设置字体与颜色</h3>
<pre class="prettyprint lang-js highlighter-hljs"><code># 创建 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)</code></pre>
<p>PdfTrueTypeFont 支持将字体嵌入 PDF,确保在不同设备上显示一致。如需减小文件体积,可使用系统字体(不嵌入)。</p>
<h3>设置透明度与旋转角度</h3>
<pre class="prettyprint lang-js highlighter-hljs"><code># 保存当前画布状态
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))</code></pre>
<p>透明度与旋转角度的结合,常用于创建水印、对角标记等视觉效果。</p>
<h3>示例:添加居中斜体水印</h3>
<pre class="prettyprint lang-js highlighter-hljs"><code>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
# 要添加的水印文字
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()</code></pre>
<p>常用于生成自动水印文字,如 “CONFIDENTIAL”、“COPY” 等,可灵活用于批量处理。</p>
<p>生成的 PDF 文件:</p>
<p><img src="https://www.e-iceblue.cn/images/tutorials-images/python-add-text-to-pdf-3.png"></p>
<p>文件正在被其他程序占用,保存时可能遇到 PermissionError。</p>
<h2>常见问题与跨平台注意事项</h2>
<p>在不同平台或字体环境下添加文本时,可能会遇到如下问题。以下是一些常见问题及解决建议:</p>
<table>
<thead>
<tr>
<th>问题</th>
<th>可能原因</th>
<th>解决方案</th>
</tr>
</thead>
<tbody>
<tr>
<td>文本位置偏差</td>
<td>坐标设置未考虑页面尺寸</td>
<td>使用 ClientSize 或 MeasureString() 实现动态适配</td>
</tr>
<tr>
<td>字体无法显示</td>
<td>缺少对应字体或不支持字符集</td>
<td>嵌入常用字体如 Arial Unicode,或使用 Noto Sans 等 Unicode 字体</td>
</tr>
<tr>
<td>Unicode 字符乱码</td>
<td>字体不支持全字符集</td>
<td>使用支持广泛字符集的字体并嵌入</td>
</tr>
<tr>
<td>内容重叠</td>
<td>行距或位置设置不当</td>
<td>使用 MeasureString() 计算文本高度,合理设置 Y 坐标</td>
</tr>
<tr>
<td>出现水印文字</td>
<td>使用试用版未授权</td>
<td>使用免费版本,或申请临时授权</td>
</tr>
<tr>
<td>文件体积变大</td>
<td>嵌入字体增加文件大小</td>
<td>如不需跨设备显示一致性,可使用不嵌入字体的 PdfFont</td>
</tr>
<tr>
<td>macOS/Linux 显示异常</td>
<td>系统字体差异或度量方式不同</td>
<td>携带字体文件,或使用跨平台字体以确保一致性</td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
</tbody>
</table>
<h2>总结</h2>
<p>通过<strong> Spire.PDF for Python</strong>,你可以灵活地实现 PDF 文档的文字添加,无论是新建文档、修改现有文件,还是批量处理。该库提供丰富的样式与位置控制选项,适用于自动化报告、水印标注、模板填充等多种场景。</p>
<h2>常见问题(FAQ)</h2>
<h3>如何用 Python 向 PDF 添加文字?</h3>
<p>使用如<strong> Spire.PDF </strong>等库,通过 DrawString() 方法添加文字,并可设置字体、颜色和位置等属性。</p>
<h3>能否向已有 PDF 添加文字?</h3>
<p>当然可以。加载 PDF 后通过页面对象调用 DrawString() 添加内容即可。</p>
<h3>如何将文本文件内容转换成 PDF?</h3>
<p>逐行读取 TXT 文件内容,结合 DrawString() 方法按需写入 PDF 页面。</p>
<h3>可以批量向多个 PDF 添加相同的内容吗?</h3>
<p>可以。遍历文件目录,对每个 PDF 分别加载并插入指定文字即可完成批量处理。</p><br><br>
来源:https://www.cnblogs.com/software-Development/p/18989591
頁:
[1]