查看: 232|回复: 0

Python Spire.PDF 实现PDF添加文本与旋转水印

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式
在 PDF 自动化处理场景中,经常需要给已有 PDF 追加备注、标注、页码或水印文字。Free Spire.PDF for Python 提供了无需本地 Adobe 组件的 Python 调用方式,安装后可直接加载 PDF,并在指定页面、指定坐标绘制文本,同时支持字体、颜色、透明度、旋转等样式。下面按实际代码实现说明。

一、安装与核心类
安装命令:
  1. pip install spire-pdf-free
复制代码
该库支持 Python 3.7 及以上版本,兼容 Windows、Mac、Linux。常用类包括:PdfDocument 负责加载、保存、关闭文档;PdfCjkStandardFont、PdfTrueTypeFont、PdfFont 分别用于中文字体、系统 TrueType 字体、PDF 内置标准字体;PdfSolidBrush、PdfRGBColor 用于设置画刷和 RGB 颜色;PointF 用于定义绘制坐标。

二、基础实现:加载 PDF 并在指定坐标写文本
流程是:加载文档 -> 获取页面 -> 配置字体与颜色 -> 定义坐标 -> 绘制文本 -> 保存 -> 释放资源。完整代码:
  1. from spire.pdf import PdfDocument, PdfFontStyle, PdfSolidBrush, PdfRGBColor, PointF, PdfCjkStandardFont, PdfCjkFontFamily
  2. # 初始化PDF文档对象并加载本地PDF文件
  3. pdf = PdfDocument()
  4. pdf.LoadFromFile("input.pdf")
  5. # 获取PDF第一页(索引从0开始)
  6. page = pdf.Pages.get_Item(0)
  7. # 配置中文字体:蒙纳黑体、16号字号、加粗样式
  8. font = PdfCjkStandardFont(PdfCjkFontFamily.MonotypeHeiMedium, 16.0, PdfFontStyle.Bold)
  9. # 创建画刷,设置文本颜色:浅橘色
  10. brush = PdfSolidBrush(PdfRGBColor(255, 200, 180))
  11. # 定义文本绘制坐标(单位:磅)
  12. location = PointF(72.0, 300.0)
  13. # 在指定位置绘制自定义文本
  14. page.Canvas.DrawString("这是添加的新文本。", font, brush, location)
  15. # 保存修改后的PDF文件
  16. pdf.SaveToFile("添加文本.pdf")
  17. # 关闭文档,释放资源
  18. pdf.Close()
复制代码
这里的 DrawString 第二、三、四个参数分别是字体、画刷、坐标。页面索引从 0 开始,坐标单位为磅,原点在页面左上角。中文文本建议优先使用 PdfCjkStandardFont 或系统中文字体,避免乱码和字体缺失。

三、进阶样式:多字体、颜色、透明度、旋转
1. 多字体与自定义颜色。PdfTrueTypeFont 可调用系统 TrueType 字体,最后一个布尔参数为 True 时会把字体嵌入 PDF,适合跨设备展示;PdfFont 可调用 PDF 内置标准字体;PdfRGBColor 支持任意 RGB 颜色。
  1. # 方式1:调用系统TrueType字体(Calibri),斜体、字号16,嵌入字体到PDF
  2. font1 = PdfTrueTypeFont("Calibri", 16.0, PdfFontStyle.Italic, True)
  3. # 方式2:调用PDF内置Times Roman标准字体,斜体、字号16
  4. font2 = PdfFont(PdfFontFamily.TimesRoman, 16.0, PdfFontStyle.Italic)
  5. # 自定义森林绿色文本画刷
  6. brush = PdfSolidBrush(PdfRGBColor(34, 139, 34))
复制代码
这两段属于样式配置片段,使用时需要从 spire.pdf 中导入相应的字体类。

2. 透明度。page.Canvas.SetTransparency 的参数范围是 0.0~1.0,0.0 为完全透明,1.0 为完全不透明,适合做轻量化水印或备注。
  1. # 设置文本半透明(透明度0.4)
  2. page.Canvas.SetTransparency(0.4)
  3. # 绘制半透明文本
  4. page.Canvas.DrawString("半透明文字", font, brush, PointF(100.0, 100.0))
复制代码

3. 旋转文字。通过画布 RotateTransform 旋转坐标系,逆时针为负角度,顺时针为正角度,常用于斜向水印和侧边标注。
  1. # 画布逆时针旋转45度
  2. page.Canvas.RotateTransform(-45)
  3. # 绘制旋转后的文本
  4. page.Canvas.DrawString("旋转后的文字", font, brush, PointF(100.0, 100.0))
复制代码
注意:画布旋转是全局生效;绘制完成后如需恢复默认角度,应重置画布变换状态。

四、开发注意事项
资源释放:文档操作完成后必须调用 Close(),否则可能造成文件占用和内存溢出。
坐标适配:PDF 坐标单位为磅,原点在页面左上角,应根据页面尺寸调整绘制位置。
中文适配:中文文本优先使用 PdfCjkStandardFont 或系统中文字体,避免乱码、字体缺失。
样式叠加:透明度、旋转、字体样式可以自由组合,实现复杂文本展示效果。

五、适用场景
这套实现适合 PDF 自动化编辑、批量文档处理、水印生成、页码注释和批注补充等场景。相比手动编辑,其 API 较简洁,并覆盖中英文样式配置,能降低重复处理 PDF 的成本。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-16 15:05 , Processed in 0.026010 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部