如何向 PDF 添加印章 — 使用 Adobe Acrobat 和 Python

在文档审阅、审批和分发流程中,向 PDF 添加印章是一项常见操作。印章通常用于将文件标记为已批准、草稿或机密,或者用于添加公司徽标、官方印章等视觉元素。

在实际应用中,PDF 印章通常通过桌面软件手动添加,或作为自动化流程的一部分以编程方式添加。虽然许多工具都可以在 PDF 中放置文本或图像,但只有少数工具能够创建在使用 Adobe Acrobat 等 PDF 编辑器重新打开文档时仍可移动和编辑的印章。

本文将介绍两种可靠且广泛使用的 PDF 添加印章方法:

每种方法都会演示如何添加文本印章和图像印章,帮助你选择最适合自己工作流的方案。

什么是 PDF 印章?

PDF 印章在 PDF 规范中是以橡皮图章注释(Rubber Stamp Annotation)的形式实现的。与普通文本或图像相比,印章具有以下特点:

  • 可以在 Adobe Acrobat 中自由移动
  • 显示在“注释 / 印章”面板中
  • 可以在多个文档之间重复使用
  • 会被明确标识为注释,而不是页面内容

在文档后续被审阅、修订或审计时,这一区别尤为重要。

方法 1:使用 Adobe Acrobat 添加文本和图像印章

Adobe Acrobat 内置了对 PDF 印章的支持,是最常用的手动、可视化文档审阅和审批工具之一。它允许你添加基于文本或图像的印章,并直接在页面上调整其外观。

使用 Adobe Acrobat 添加文本印章

Adobe Acrobat 提供了多种预定义的文本印章,例如已批准、草稿和机密,同时也支持创建和自定义印章。

详细步骤

  1. 在 Adobe Acrobat 中打开 PDF 文件。
  2. 依次点击工具→ 图章。
    进入工具-图章
  3. 选择一个内置文本印章。
    选择内置图章
  4. 在页面任意位置单击以放置印章。
    将图章放置到页面
  5. 根据需要调整印章大小或位置。
  6. 右键单击印章并选择属性,可进一步自定义其外观(如颜色、不透明度)以及作者、主题等印章信息。
    自定义图章外观
  7. 保存文档。

添加完成后,印章仍然可以移动和编辑,方便你后续调整位置或更新属性。

使用 Adobe Acrobat 添加图像印章

图像印章通常用于公司徽标、官方印章或扫描签名。Acrobat 允许你将图像文件转换为可重复使用的自定义印章。

详细步骤

  1. 准备一个 PNG 或 JPG 格式的图像文件。
  2. 在 Acrobat 中,依次点击工具 → 图章 → 自定义图章→ 创建。
    创建自定义图章
  3. 导入图像并将其保存为自定义印章。
    导入图片
  4. 将印章分配到指定分类,方便后续复用。
    将自定义印章分配到指定分类
  5. 打开图章或图章调板,选择新创建的印章并单击页面进行放置。
    放置新建的图章到页面
  6. 调整印章大小、位置和透明度。
    调整图章大小位置和透明度
  7. 保存文档。

以该方式创建的图像印章在功能和交互行为上与文本印章完全一致,可在 Acrobat 中移动、复用,并通过印章管理面板进行管理。

Adobe Acrobat 的优点与局限

优点

  • 全面支持文本和图像印章。
  • 可精确控制印章的位置和外观。
  • 非常适合单个文档或少量文件的编辑。

局限

  • 完全依赖手动操作。
  • 不适合批量处理或自动化场景。

方法 2:使用 Python(Spire.PDF)添加文本和图像印章

对于开发者和自动化工作流而言,以编程方式添加印章通常是最高效、最可扩展的解决方案。你无需在每个文档中手动放置印章,而是可以一次性定义印章样式,并将其一致地应用到一个或多个 PDF 文件中。

Spire.PDF for Python 提供了用于创建和应用印章注释的 API,使你可以精确控制布局、样式和位置。该方法尤其适用于以下场景:

  • 批量处理大量 PDF 文件。
  • 自动化审批或审阅流程。
  • 后台或服务器端文档生成。

使用 Python 向 PDF 添加文本印章

以下示例展示了如何创建一个带有样式背景的自定义文本印章,并将其应用到指定页面。印章内容、字体、颜色和位置都可以通过代码进行调整。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
from spire.pdf.common import *
from spire.pdf import *
from datetime import *

# 创建一个 PdfDocument 对象
doc = PdfDocument()

# 加载 PDF 文档
doc.LoadFromFile(r"C:\Users\Administrator\Desktop\input.pdf")

# 获取特定页面
page = doc.Pages.get_Item(1)

# 创建一个 PdfTemplate 对象
template = PdfTemplate(220.0, 50.0, True)

# 创建两个字体
font1 = PdfTrueTypeFont("黑体", 16.0, 0, True)
font2 = PdfTrueTypeFont("宋体", 10.0, 0, True)

# 创建一个纯色画刷和一个渐变画刷
solidBrush = PdfSolidBrush(PdfRGBColor(Color.get_Blue()))
rectangle1 = RectangleF(PointF(0.0, 0.0), template.Size)
linearGradientBrush = PdfLinearGradientBrush(rectangle1, PdfRGBColor(Color.get_White()), PdfRGBColor(Color.get_LightBlue()), PdfLinearGradientMode.Horizontal)

# 创建一个笔
pen = PdfPen(solidBrush)

# 创建一个圆角矩形路径
CornerRadius = 10.0
path = PdfPath()
path.AddArc(template.GetBounds().X, template.GetBounds().Y, CornerRadius, CornerRadius, 180.0, 90.0)
path.AddArc(template.GetBounds().X + template.Width - CornerRadius, template.GetBounds().Y, CornerRadius, CornerRadius, 270.0, 90.0)
path.AddArc(template.GetBounds().X + template.Width - CornerRadius, template.GetBounds().Y + template.Height - CornerRadius, CornerRadius, CornerRadius, 0.0, 90.0)
path.AddArc(template.GetBounds().X, template.GetBounds().Y + template.Height - CornerRadius, CornerRadius, CornerRadius, 90.0, 90.0)
path.AddLine(template.GetBounds().X, template.GetBounds().Y + template.Height - CornerRadius, template.GetBounds().X, template.GetBounds().Y + CornerRadius / 2)

# 在模板上绘制路径
template.Graphics.DrawPath(pen, path)
template.Graphics.DrawPath(linearGradientBrush, path)

# 在模板上绘制文本
string1 = "已审核\n"
string2 = "销售经理 Lee, 审核时间:" + datetime.now().strftime("%m %d, %Y")
template.Graphics.DrawString(string1, font1, solidBrush, PointF(5.0, 5.0))
template.Graphics.DrawString(string2, font2, solidBrush, PointF(2.0, 28.0))

# 创建一个橡皮图章,指定其大小和位置
rectangle2 = RectangleF(60.0, 250.0, 220.0, 50.0)
stamp = PdfRubberStampAnnotation(rectangle2)

# 创建一个 PdfAppearance 对象并将模板应用为其正常状态
appearance = PdfAppearance(stamp)
appearance.Normal = template

# 将外观应用于印章
stamp.Appearance = appearance

# 将印章注释添加到注释集合中
page.AnnotationsWidget.Add(stamp)

# 保存文件
doc.SaveToFile("DynamicStamp.pdf", FileFormat.PDF)
doc.Dispose()

当输出文件在 Adobe Acrobat 中打开时,该印章可以像手动添加的印章一样进行移动、缩放和管理。

使用Python创建动态文本印章

使用 Python 向 PDF 添加图像印章

图像印章通常用于徽标、印章或视觉审批标记。其流程与文本印章类似,不同之处在于模板内容来自图像而非绘制的图形。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from spire.pdf import *
from spire.pdf.common import *

# 加载 PDF 文档
doc = PdfDocument()
doc.LoadFromFile(r"C:\Users\Administrator\Desktop\input.pdf")

# 获取目标页面
page = doc.Pages.get_Item(1)

# 加载图像
image = PdfImage.FromFile(r"C:\Users\Administrator\Desktop\internal-document.png")
w, h = float(image.Width), float(image.Height)

# 创建模板并绘制图像
template = PdfTemplate(w, h, True)
template.Graphics.DrawImage(image, 0.0, 0.0, w, h)

# 定义印章位置
rect = RectangleF(60.0, 250.0, w, h)

# 创建并应用图像印章
stamp = PdfRubberStampAnnotation(rect)
appearance = PdfAppearance(stamp)
appearance.Normal = template
stamp.Appearance = appearance
page.AnnotationsWidget.Add(stamp)

# 保存并关闭
doc.SaveToFile("output/ImageStamp.pdf", FileFormat.PDF)
doc.Dispose()

该图像印章可以在 Adobe Acrobat 中重新定位或调整大小,其行为与通过 Acrobat 界面创建的印章完全一致。

使用Python创建图片印章

何时选择 Python 而不是 Adobe Acrobat

在以下情况下,基于 Python 的方案更具优势:

  • 需要将相同印章应用到多个 PDF 文件。
  • 印章内容需要动态生成(例如日期、用户名或状态值)。
  • PDF 处理是自动化或后台工作流的一部分。

Adobe Acrobat 适合可视化的单次编辑,而 Python 更适合需要规模化处理的印章场景。

如需了解更多高级 PDF 处理场景,也可以参考其他 Spire.PDF 在线教程,例如添加页眉页脚、为 PDF 页面添加水印,或以编程方式添加注释和签名等。这些内容可以帮助你进一步扩展 PDF 工作流。

功能对比

功能 Adobe Acrobat Python(Spire.PDF)
文本印章 是 是
图像印章 是 是
橡皮图章注释(Rubber Stamp Annotation) 是 是
可在 Acrobat 中移动 是 是
批量处理 否 是
自动化 否 是

总结

根据你处理文档的频率以及对控制能力的需求不同,向 PDF 添加印章可以采用不同方式。

  • Adobe Acrobat 非常适合注重可视化精度的手动操作,适用于偶尔的印章添加、审阅和审批场景。
  • Python + Spire.PDF 更适合自动化工作流,支持以编程方式添加文本和图像印章,非常适合批量处理或集成到现有系统中。

两种方式都支持常见的印章需求,包括状态标记以及徽标或印章等图像标识。选择最适合你工作流的方法,可以让 PDF 印章管理更加高效、一致且易维护。

FAQs

Q1. 添加普通文本或图像与添加印章注释有什么区别?

普通文本或图像通常作为固定的页面内容存在,而印章注释是可交互元素,可以在 Adobe Acrobat 等 PDF 编辑器中移动、调整大小和管理。

Q2. 为什么某些 PDF 工具添加的印章在 Adobe Acrobat 中无法编辑?

因为这些工具将内容直接“扁平化”到页面中,而不是创建注释。被扁平化的内容是静态的,无法重新定位或作为印章复用。

Q3. 使用 Python 添加的印章之后还能在 Adobe Acrobat 中编辑吗?

可以。通过编程方式创建的印章注释与在 Acrobat 中添加的印章行为一致,仍然可以完全编辑。

Q4. 什么时候应该使用编程方式添加印章,而不是 PDF 编辑器?

当需要自动化、批量处理或动态内容时,应选择编程方式;而 PDF 编辑器更适合快速的手动修改。

你可能还感兴趣