在企業辦公、合同簽署、審批流程等場景中,我們經常需要在 PDF 文件上添加印章或標記。例如:
- 在審批文件上添加“APPROVED(已批准)”字樣;
- 在保密文件上添加圖像水印或公司 Logo;
- 在電子合同中添加簽名或蓋章區域。
這些操作如果手動完成,不僅效率低,還容易出錯。本文將介紹如何使用 Free Spire.PDF for Python 在 PDF 中自動添加兩種類型的印章:
- 文字印章(動態審批章)
- 圖像印章(Logo 或簽章)
安裝庫
在開始之前,先通過 pip 安裝 Spire.PDF 模塊:
pip install spire.pdf
安裝完成後,即可在 Python 中直接導入使用。
一、添加文字印章
下面的示例演示如何在 PDF 文件的指定頁面上創建一個帶有圓角矩形邊框和漸變背景的“APPROVED”印章,並動態顯示當前時間。
from spire.pdf import *
# 創建 PdfDocument 對象並加載 PDF 文件
doc = PdfDocument()
doc.LoadFromFile("input.pdf")
# 獲取指定頁面(索引從 0 開始)
page = doc.Pages[0]
# 創建 PdfTemplate 模板對象(用於定義印章外觀)
template = PdfTemplate(220.0, 50.0, True)
# 創建字體
font_title = PdfTrueTypeFont("Arial", 16.0, 0, True)
font_info = PdfTrueTypeFont("Times New Roman", 10.0, 0, True)
# 創建畫筆與漸變填充
solid_brush = PdfSolidBrush(PdfRGBColor(Color.get_Blue()))
rect = RectangleF(PointF(0.0, 0.0), template.Size)
gradient_brush = PdfLinearGradientBrush(rect, PdfRGBColor(Color.get_White()), PdfRGBColor(Color.get_LightBlue()), PdfLinearGradientMode.Horizontal)
# 繪製圓角矩形路徑
corner = 10.0
path = PdfPath()
path.AddArc(template.GetBounds().X, template.GetBounds().Y, corner, corner, 180.0, 90.0)
path.AddArc(template.GetBounds().X + template.Width - corner, template.GetBounds().Y, corner, corner, 270.0, 90.0)
path.AddArc(template.GetBounds().X + template.Width - corner, template.GetBounds().Y + template.Height - corner, corner, corner, 0.0, 90.0)
path.AddArc(template.GetBounds().X, template.GetBounds().Y + template.Height - corner, corner, corner, 90.0, 90.0)
# 繪製邊框與填充
template.Graphics.DrawPath(PdfPen(solid_brush), path)
template.Graphics.DrawPath(gradient_brush, path)
# 繪製文字內容
title_text = "APPROVED\n"
info_text = "By Jock at " + DateTime.get_Now().ToString("HH:mm, MMM dd, yyyy")
template.Graphics.DrawString(title_text, font_title, solid_brush, PointF(5.0, 5.0))
template.Graphics.DrawString(info_text, font_info, solid_brush, PointF(2.0, 28.0))
# 創建印章註釋並設置位置
rect_stamp = RectangleF((float)(page.ActualSize.Width - 270.0), (float)(page.ActualSize.Height - 150.0), 220.0, 50.0)
stamp = PdfRubberStampAnnotation(rect_stamp)
# 應用模板到印章外觀
appearance = PdfAppearance(stamp)
appearance.Normal = template
stamp.Appearance = appearance
# 將印章添加到頁面
page.AnnotationsWidget.Add(stamp)
# 保存結果
doc.SaveToFile("output/TextStamp.pdf", FileFormat.PDF)
doc.Dispose()
✨代碼解析:
- PdfTemplate 用於繪製印章的內容(可包括文字、圖形或圖像);
- PdfRubberStampAnnotation 表示一個“橡皮圖章註釋”,可以附加在任意頁面位置;
- 通過 PdfAppearance.Normal 屬性,將模板作為印章的常態外觀;
- DrawString 可在模板中繪製多行文字;
- RectangleF 控制印章在頁面中的位置與大小。
執行後,PDF 第三頁右下角會生成一個帶有藍色邊框、漸變底色和當前時間戳的“APPROVED”印章,非常適合用於電子審批流程。效果如下:
二、添加圖像印章
如果你希望使用公司 Logo 或簽名圖片作為印章,可以直接加載圖片並應用到 PDF 中。示例代碼如下:
from spire.pdf import *
# 加載 PDF
doc = PdfDocument()
doc.LoadFromFile("Sample.pdf")
page = doc.Pages[0]
# 加載印章圖像
image = PdfImage.FromFile("Stamp.png")
width = float(image.Width)
height = float(image.Height)
# 創建模板並繪製圖像
template = PdfTemplate(width, height, True)
template.Graphics.DrawImage(image, 0.0, 0.0, width, height)
# 設置印章位置
rect = RectangleF((float)(page.ActualSize.Width - width - 50),
(float)(page.ActualSize.Height - height - 40),
width, height)
stamp = PdfRubberStampAnnotation(rect)
# 應用圖像模板為印章外觀
appearance = PdfAppearance(stamp)
appearance.Normal = template
stamp.Appearance = appearance
# 添加印章到頁面
page.AnnotationsWidget.Add(stamp)
# 保存文件
doc.SaveToFile("output/ImageStamp.pdf")
doc.Close()
🔍要點説明:
- 圖像可以是
.png、.jpg或.bmp等常見格式; - 印章位置可以通過調整
RectangleF座標靈活控制; - 圖像印章適用於電子簽章、公司 Logo、水印等用途。
運行結果如下:
三、應用場景與擴展建議
| 場景 | 示例 |
|---|---|
| 文件審批 | 在文檔上自動添加“APPROVED”、“REVIEWED”等動態印章 |
| 合同簽署 | 添加簽名或公司印章圖像 |
| 保密標識 | 添加“CONFIDENTIAL”水印 |
| 自動批處理 | 結合循環語句批量為多份 PDF 加蓋印章 |
此外,你還可以:
- 在模板中添加 日期、用户名、系統信息;
- 結合 Python 文件操作,對文件夾內所有 PDF 統一蓋章;
- 設置透明度或旋轉角度,創建更靈活的視覺效果。
四、關鍵類與方法速查表
| 類 / 方法 | 説明 |
|---|---|
PdfDocument |
表示 PDF 文檔對象 |
PdfTemplate |
用於繪製印章內容的模板 |
PdfRubberStampAnnotation |
表示橡皮圖章註釋對象 |
PdfAppearance |
控制印章外觀(Normal、Down、Rollover 狀態) |
DrawString() |
繪製文字 |
DrawImage() |
繪製圖像 |
AnnotationsWidget.Add() |
將印章添加到 PDF 頁面 |
SaveToFile() |
保存生成的 PDF 文件 |
總結
本文介紹瞭如何使用 Spire.PDF for Python 為 PDF 文件添加兩種類型的印章——文字印章與圖像印章。
通過編程方式實現自動化蓋章,不僅能提升審批效率,也能保證文件的一致性與專業性。無論是企業審批流、合同簽章,還是內部文檔標識,這種方法都能大大簡化人工操作,提升工作效率。