一文详解如何使用Python向PDF精确添加文本

 更新时间:2025年07月15日 08:32:35   作者:Eiceblue  
借助Python,我们可以高效地向 PDF 添加文本,实现从文档生成到内容管理的自动化流程,文中的示例代码讲解详细,下面小编就跟随小编一起了解下具体实现方法吧

PDF 文档的版式特性使其适用于输出不可变格式的报告与合同。但若要在此类文档中插入或修改文本,常规方式难以实现。借助Python,我们可以高效地向 PDF 添加文本,实现从文档生成到内容管理的自动化流程。

本文将从以下方面介绍Python实现PDF中文本的添加:

本文使用的方法需要用到免费的Free Spire.PDF for Python,可通过pip安装:

pip install spire.pdf.free

新建PDF并添加段落文本

在构建系统报告或生成模板文档时,通常需要从空白页插入一段段文本,保持排版一致性。

from spire.pdf import PdfDocument, PdfTrueTypeFont, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, RectangleF, \
    PdfStringFormat, PdfTextAlignment, PdfVerticalAlignment

# 创建新的PDF文档并添加页面
pdf = PdfDocument()
page = pdf.Pages.Add()

# 待插入的文本内容
text = ("The purpose of this document is to provide an overview of the company's financial highlights for the fiscal year 2024. "
        "It includes revenue trends, operational costs, and net income summaries. "
        "The following sections will outline each metric in more detail.")

# 设置字体、画刷(颜色)和排版区域
font = PdfTrueTypeFont("Arial", 14.0, PdfFontStyle.Regular, True)
brush = PdfSolidBrush(PdfRGBColor(0, 0, 0))  # 黑色文本
layout_area = RectangleF(50.0, 50.0, page.GetClientSize().Width - 100.0, page.GetClientSize().Height)
string_format = PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Top)

# 添加文字内容
page.Canvas.DrawString(text, font, brush, layout_area, string_format, False)

# 保存并关闭
pdf.SaveToFile("output/new.pdf")
pdf.Close()

技术细节说明:

  • PdfTrueTypeFont 可嵌入外部字体文件,适用于需要控制字体兼容性的场景;
  • RectangleF 定义文本区域边界(支持自定义段落框);
  • DrawString() 支持超出区域自动换行;
  • 使用 PdfStringFormat 设定水平方向与垂直方向的对齐方式。

生成的PDF文档:

向现有PDF中插入文本内容

当你已有一份PDF文件,但希望在某一页添加标记或文字说明,例如审批标语、状态说明等,可以使用如下方式:

from spire.pdf import PdfDocument, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, PdfFont, PdfFontFamily

# 加载已有PDF文档
pdf = PdfDocument()
pdf.LoadFromFile("PDF.pdf")
page = pdf.Pages[0]

# 设置字体、颜色和插入位置
font = PdfFont(PdfFontFamily.TimesRoman, 12.0, PdfFontStyle.Bold)
brush = PdfSolidBrush(PdfRGBColor(0, 128, 0))  # 深绿色
location = PointF(130.0, 90.0)

# 插入文本
page.Canvas.DrawString("Verified by QA Department", font, brush, location)

# 保存结果
pdf.SaveToFile("output/ModifiedPDF.pdf")
pdf.Close()

技术细节说明:

  • PdfFontFamily.TimesRoman 属于 PDF 标准内置字体(无需嵌入);
  • 坐标 PointF(x, y) 单位为磅(1 pt ≈ 0.3528 mm),以页面左上角为 (0,0);
  • 无需设置区域框时,适用于短文本、标签插入、动态盖章等场景。

修改的PDF文档:

复杂格式设置:添加透明旋转水印文本

在文档审阅或内部版本发布场景中,常见的做法是添加一个带透明度与旋转角度的水印文字,以提示机密性或防止误传播。Spire.PDF 提供了画布状态保存、旋转、透明度控制等接口,可用于实现这种复杂的格式需求。

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 = "Internal Use Only"

# 设置字体样式与大小
font = PdfTrueTypeFont("Arial", 40.0, PdfFontStyle.Bold, True)

# 设置画刷颜色为深红色
brush = PdfSolidBrush(PdfRGBColor(Color.get_DarkRed()))

# 测量文本大小以便居中放置
size = font.MeasureString(text)
x = (page.Canvas.ClientSize.Width - size.Width) / 2
y = (page.Canvas.ClientSize.Height - size.Height) / 2

# 保存当前画布状态
state = page.Canvas.Save()

# 设置透明度
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.SaveToFile("output/with_watermark.pdf")
pdf.Close()

技术细节说明:

  • 使用 SetTransparency(0.3) 设置文本透明度,增强水印效果但不遮挡内容;
  • TranslateTransform() 将画布原点移动至文本中心;
  • RotateTransform(-45) 实现对角线旋转,常用于“CONFIDENTIAL”或“DRAFT”类水印;
  • 水印文本使用 DrawString() 绘制,PointF(-size.Width / 2, -size.Height / 2) 保证以中心为参考点;
  • 通过 Canvas.Save()Canvas.Restore() 管理局部画布状态,避免影响页面中其他元素。

修改后的PDF文档:

总结

通过 Spire.PDF for Python,你可以使用简洁的 Python 代码在 PDF 中添加各类文本,功能包括:

功能项方法与说明
从零创建文档PdfDocument.Pages.Add() + DrawString()
插入文本到现有文档LoadFromFile() + PointF 定位文本插入点
控制排版样式使用 RectangleF + PdfStringFormat 控制对齐与区域
行文本支持文本中添加 \n,自动换行渲染
字体与颜色控制支持 TrueType 与 标准字体,自定义颜色 RGB

这些操作覆盖了 PDF 文本添加的主要应用场景,从文档批量生成到人工标注支持,适合用于自动归档、审批流程、内容输出等业务场景。

到此这篇关于一文详解如何使用Python向PDF精确添加文本的文章就介绍到这了,更多相关Python PDF添加文本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现绘制水平线

    Python实现绘制水平线

    这篇文章主要为大家详细介绍如何了在Python中创建一条水平线以及Python 中的 Matplotlib 库的使用,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2023-10-10
  • python3 面向对象__类的内置属性与方法的实例代码

    python3 面向对象__类的内置属性与方法的实例代码

    这篇文章主要介绍了python3 面向对象__类的内置属性与方法的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • Python中的常见数据集打乱方法

    Python中的常见数据集打乱方法

    这篇文章主要介绍了Python中的常见数据集打乱方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python retrying 重试机制的使用方法

    Python retrying 重试机制的使用方法

    我们在程序开发中,经常会需要请求一些外部的接口资源,而且我们不能保证每次请求一定会成功,所以这些涉及到网络请求的代码片段就需要加上重试机制。本文就来详细的介绍一下,感兴趣的可以了解一下
    2021-09-09
  • python实现多人聊天服务器以及客户端

    python实现多人聊天服务器以及客户端

    这篇文章主要为大家详细介绍了python实现多人聊天服务器以及客户端,带图形化界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例

    python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例

    这篇文章主要介绍了python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例,需要的朋友可以参考下
    2020-02-02
  • MediaPipe API实现骨骼识别功能分步讲解流程

    MediaPipe API实现骨骼识别功能分步讲解流程

    MediaPipe是用于构建多模态(例如视频、音频或任何时间序列数据)、跨平台(即eAndroid、IOS、web、边缘设备)应用ML管道的框架。这篇文章主要介绍了MediaPipe API实现骨骼识别功能分步流程
    2022-09-09
  • 解决PyCharm中光标变粗的问题

    解决PyCharm中光标变粗的问题

    下面小编就为大家带来一篇解决PyCharm中光标变粗的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • python数据预处理 :样本分布不均的解决(过采样和欠采样)

    python数据预处理 :样本分布不均的解决(过采样和欠采样)

    今天小编就为大家分享一篇python数据预处理 :样本分布不均的解决(过采样和欠采样),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 使用Django开发简单接口实现文章增删改查

    使用Django开发简单接口实现文章增删改查

    这篇文章主要介绍了使用Django开发简单接口实现文章增删改查,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05

最新评论