当前位置: 首页 > news >正文

用Python向PDF添加文本:精确插入文本到PDF文档

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

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

文章目录

    • 新建PDF并添加段落文本
    • 向现有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文档:
Python新建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文档:
Python载入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文档:
Python插入文本到PDF并精确控制位置和格式


总结

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

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

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


📚 更多PDF编辑教程,请访问:
Spire.PDF for Python 教程中心

http://www.lryc.cn/news/588038.html

相关文章:

  • 2024-2025-2 山东大学《毛概》期末(回忆版)
  • 复习笔记 38
  • linux下的消息队列数据收发
  • “国乙黑月光”指的是谁?
  • 动态规划题解——单词拆分【LeetCode】
  • 【字节跳动】数据挖掘面试题0017:推荐算法:双塔模型,怎么把内容精准地推送给用户
  • 设计模式(行为型)-迭代器模式
  • iOS App 安全加固全流程:静态 + 动态混淆对抗逆向攻击实录
  • Linux进程优先级机制深度解析:从Nice值到实时调度
  • 基于MATLAB的LSTM长短期记忆神经网络的时间序列数据预测方法应用
  • .NET ExpandoObject 技术原理解析
  • C#/.NET/.NET Core技术前沿周刊 | 第 46 期(2025年7.7-7.13)
  • 如何用深度学习实现图像风格迁移
  • 面试150 路径总和
  • 电脑升级Experience
  • WPF自定义日历选择控件
  • ZYNQ双核通信终极指南:FreeRTOS移植+OpenAMP双核通信+固化实战
  • spark广播表大小超过Spark默认的8GB限制
  • 大数据系列之:通过trino查询hive表
  • pyspark中map算子和flatmap算子
  • kettle从入门到精通 第103课 ETL之kettle kettle读取redis中的Hash数据
  • IOS开发者账号如何添加 uuid 原创
  • 图机器学习(1)——图论基础
  • [硬件电路-22]: 为什么模拟电路信号处理运算的精度不如数字信号处理运算?
  • flink 中配置hadoop 遇到问题解决
  • 基于MaxCompute MaxFrame 汽车自动驾驶数据预处理最佳实践
  • WST2078 N+P 双通道 MOSFET 在蓝牙耳机中的技术适配
  • FreeSWITCH fifo模块排队并动态播放排队位置
  • 12.如何判断字符串是否为空?
  • AI驱动的软件工程(下):AI辅助的质检与交付