C#代碼實(shí)現(xiàn)為PDF文檔添加印章
為 PDF 文檔添加印章可以增強(qiáng)文檔的視覺(jué) 效果,并傳達(dá)諸如審批、機(jī)密或緊急等重要信息。通過(guò)這一簡(jiǎn)單操作,用戶可以使用自定義圖片或文本對(duì)文檔進(jìn)行標(biāo)記,從而更直觀地傳遞關(guān)鍵信息。無(wú)論是在辦公場(chǎng)景還是個(gè)人項(xiàng)目中,為 PDF 添加印章都能提升文檔的清晰度與專(zhuān)業(yè)感。本文將介紹如何使用 C# 為 PDF 文檔添加印章。
安裝 PDF 組件
開(kāi)始之前,需要在 .NET 項(xiàng)目中添加用于處理 PDF 的相關(guān) DLL 引用??梢酝ㄟ^(guò)下載安裝包手動(dòng)引用 DLL,也可以直接通過(guò) NuGet 進(jìn)行安裝。
PM> Install-Package Spire.PDF
前置知識(shí)
在 PDF 文檔中,印章(Stamp)是一種注釋或圖形元素,用于向文檔添加補(bǔ)充信息。常見(jiàn)的用途包括標(biāo)記審批狀態(tài)、機(jī)密等級(jí)或時(shí)間信息等。
在 C# 中,可以通過(guò) PDF 相關(guān)類(lèi) 庫(kù)中的印章注釋對(duì)象來(lái)創(chuàng)建橡皮章效果,并結(jié)合模板對(duì)象作為繪制區(qū)域,在其中添加文本、圖片、圖形以及日期時(shí)間等內(nèi)容。
使用 C# 為 PDF 添加動(dòng)態(tài)印章
動(dòng)態(tài)印章是一種可自定義的 PDF 注釋?zhuān)捎糜陲@示審批狀態(tài)、簽名信息或其他動(dòng)態(tài)內(nèi)容。與靜態(tài)印章不同,動(dòng)態(tài)印章中的部分信息可以實(shí)時(shí)更新,例如當(dāng)前日期、時(shí)間、用戶名或自定義文本等。
下面是為 PDF 添加動(dòng)態(tài)印章的基本步驟:
- 創(chuàng)建 PdfDocument 對(duì)象。
- 使用 PdfDocument.LoadFromFile() 方法加載 PDF 文件。
- 創(chuàng)建指定大小的 PdfTemplate 對(duì)象。
- 使用 PdfTemplate.Graphics.DrawString() 在模板中繪制文本,并添加日期、時(shí)間等動(dòng)態(tài)信息。
- 創(chuàng)建 PdfRubberStampAnnotation 對(duì)象,并將模板設(shè)置為其外觀。
- 使用 PdfPageBase.Annotations.Add() 方法將印章添加到指定 PDF 頁(yè)面。
- 將結(jié)果保存為新的 PDF 文件。
示例代碼如下:
using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Annotations;
using Spire.Pdf.Annotations.Appearance;
namespace AddDynamicStamp
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 PdfDocument 對(duì)象
PdfDocument doc = new PdfDocument();
// 加載 PDF 文檔
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\input.pdf");
// 獲取指定頁(yè)面
PdfPageBase page = doc.Pages[1];
// 創(chuàng)建 PdfTemplate 對(duì)象
PdfTemplate template = new PdfTemplate(220, 50);
// 創(chuàng)建兩種字體
PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Elephant", 16f, FontStyle.Bold), true);
PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("Times New Roman", 10f, FontStyle.Bold), true);
// 創(chuàng)建純色畫(huà)刷和漸變畫(huà)刷
PdfSolidBrush solidBrush = new PdfSolidBrush(Color.Blue);
RectangleF rectangle1 = new RectangleF(new PointF(0, 0), template.Size);
PdfLinearGradientBrush linearGradientBrush = new PdfLinearGradientBrush(
rectangle1,
new PdfRGBColor(Color.White),
new PdfRGBColor(Color.Blue),
PdfLinearGradientMode.Horizontal);
// 創(chuàng)建畫(huà)筆
PdfPen pen = new PdfPen(solidBrush);
// 創(chuàng)建圓角矩形路徑
int CornerRadius = 10;
PdfPath path = new PdfPath();
path.AddArc(template.GetBounds().X,
template.GetBounds().Y,
CornerRadius,
CornerRadius,
180,
90);
path.AddArc(template.GetBounds().X + template.Width - CornerRadius,
template.GetBounds().Y,
CornerRadius,
CornerRadius,
270,
90);
path.AddArc(template.GetBounds().X + template.Width - CornerRadius,
template.GetBounds().Y + template.Height - CornerRadius,
CornerRadius,
CornerRadius,
0,
90);
path.AddArc(template.GetBounds().X,
template.GetBounds().Y + template.Height - CornerRadius,
CornerRadius,
CornerRadius,
90,
90);
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);
// 在模板上繪制文本
String string1 = "APPROVED\n";
String string2 = "By Marketing Manager at " +
DateTime.Now.ToString("HH:mm, MMM dd, yyyy");
template.Graphics.DrawString(string1,
font1,
solidBrush,
new PointF(5, 5));
template.Graphics.DrawString(string2,
font2,
solidBrush,
new PointF(2, 28));
// 創(chuàng)建橡皮章,并設(shè)置大小和位置
RectangleF rectangle2 = new RectangleF(
55,
page.ActualSize.Height - 55 - 70,
240,
55);
PdfRubberStampAnnotation stamp =
new PdfRubberStampAnnotation(rectangle2);
// 創(chuàng)建 PdfAppearance 對(duì)象,并將模板設(shè)置為其普通狀態(tài)外觀
PdfAppearance apprearance = new PdfAppearance(stamp);
apprearance.Normal = template;
// 將外觀應(yīng)用到印章
stamp.Appearance = apprearance;
// 將印章注釋添加到頁(yè)面注釋集合
page.Annotations.Add(stamp);
// 保存文件
doc.SaveToFile("DynamicStamp.pdf", FileFormat.PDF);
// 釋放資源
doc.Dispose();
}
}
}使用 C# 為 PDF 添加圖片印章
圖片印章是添加到 PDF 文檔中的一種圖形元素,通常以注釋或覆蓋層的形式顯示。它一般由一張圖片組成,可以放置在 PDF 頁(yè)面中的指定位置,用于展示公司 Logo、簽名、水印或?qū)徟鷺?biāo)記等內(nèi)容。
下面是為 PDF 添加圖片印章的基本步驟:
- 創(chuàng)建 PdfDocument 對(duì)象。
- 使用 PdfDocument.LoadFromFile() 方法加載 PDF 文件。
- 創(chuàng)建指定大小的 PdfTemplate 對(duì)象。
- 使用 PdfTemplate.Graphics.DrawImage() 方法在模板中繪制圖片。
- 創(chuàng)建 PdfRubberStampAnnotation 對(duì)象,并將模板設(shè)置為其外觀。
- 使用 PdfPageBase.Annotations.Add() 方法將印章添加到指定 PDF 頁(yè)面。
- 將結(jié)果保存為新的 PDF 文件。
示例代碼如下:
using Spire.Pdf;
using Spire.Pdf.Annotations;
using Spire.Pdf.Annotations.Appearance;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace AddImageStamp
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 PdfDocument 對(duì)象
PdfDocument doc = new PdfDocument();
// 加載 PDF 文檔
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\input.pdf");
// 獲取指定頁(yè)面
PdfPageBase page = doc.Pages[1];
// 加載圖片文件
PdfImage image = PdfImage.FromFile("C:\\Users\\Administrator\\Desktop\\confidential.png");
// 獲取圖片的寬度和高度
int width = image.Width;
int height = image.Height;
// 根據(jù)圖片大小創(chuàng)建 PdfTemplate 對(duì)象
PdfTemplate template = new PdfTemplate(width, height, true);
// 在模板上繪制圖片
template.Graphics.DrawImage(image, 0, 0, width, height);
// 創(chuàng)建橡皮章注釋?zhuān)⒃O(shè)置其位置和大小
RectangleF rect = new RectangleF(
page.ActualSize.Width - width - 50,
page.ActualSize.Height - height - 50,
width,
height);
PdfRubberStampAnnotation stamp =
new PdfRubberStampAnnotation(rect);
// 創(chuàng)建 PdfAppearance 對(duì)象
PdfAppearance pdfAppearance = new PdfAppearance(stamp);
// 將模板設(shè)置為外觀的普通狀態(tài)
pdfAppearance.Normal = template;
// 將外觀應(yīng)用到印章
stamp.Appearance = pdfAppearance;
// 將印章注釋添加到 PDF
page.Annotations.Add(stamp);
// 保存文件
doc.SaveToFile("ImageStamp.pdf");
// 釋放資源
doc.Dispose();
}
}
}方法補(bǔ)充
在 C# 中為 PDF 添加印章通常有三種實(shí)現(xiàn)路徑:將圖片作為圖像印章插入、生成動(dòng)態(tài)文本印章,或創(chuàng)建包含多方信息的復(fù)合印章。綜合對(duì)比來(lái)看,商業(yè)庫(kù) (Aspose/Spire) 適合追求開(kāi)發(fā)效率和企業(yè)級(jí)交付的場(chǎng)景;iText (AGPL) 適合開(kāi)源項(xiàng)目;PdfPig 則是無(wú)許可證風(fēng)險(xiǎn)的免費(fèi)選擇。
主流方案對(duì)比速覽
| 對(duì)比維度 | Aspose.PDF | Spire.PDF | iText (iTextSharp/iText7) | PdfPig | GroupDocs.Signature |
|---|---|---|---|---|---|
| 優(yōu)勢(shì)與劣勢(shì) | 優(yōu)勢(shì):功能全面、API穩(wěn)定且文檔詳盡;劣勢(shì):商業(yè)授權(quán),成本較高 | 優(yōu)勢(shì):API 簡(jiǎn)潔直觀,上手快;劣勢(shì):商業(yè)授權(quán) | 優(yōu)勢(shì):功能強(qiáng)大,社區(qū)版開(kāi)源;劣勢(shì):沿用 AGPL 協(xié)議,閉源商用需購(gòu)買(mǎi)商業(yè)授權(quán) | 優(yōu)勢(shì):開(kāi)源免費(fèi),MIT 許可,無(wú)商業(yè)限制;劣勢(shì):功能相對(duì)基礎(chǔ) | 優(yōu)勢(shì):API 語(yǔ)義化,專(zhuān)注于簽名與印章場(chǎng)景;劣勢(shì):商業(yè)授權(quán) |
| 核心特點(diǎn) | 工業(yè)級(jí) PDF 處理 | 豐富的擴(kuò)展功能,支持場(chǎng)景多 | 電子簽名與印章的行業(yè)標(biāo)準(zhǔn) | 輕量級(jí),專(zhuān)注于 PDF 解析 | 簽名專(zhuān)用,功能強(qiáng)大 |
| 代碼量 | 較少 | 很少 | 中等 | 較多 | 較少 |
| 費(fèi)用 | ?????? | ?????? | ???? (社區(qū)版 AGPL 免費(fèi)) / ?????? (商業(yè)版) | ?? 免費(fèi) | ?????? |
| 適用場(chǎng)景 | 企業(yè)級(jí)應(yīng)用,追求穩(wěn)定性和功能完整性 | 快速實(shí)現(xiàn)復(fù)雜 PDF 功能,兼顧文檔的生成與編輯 | 數(shù)字簽名、電子印章等安全需求高的場(chǎng)景 | 需要基礎(chǔ)印章功能且預(yù)算有限,追求輕量級(jí)和低開(kāi)銷(xiāo)的開(kāi)源項(xiàng)目 | 主要關(guān)注文檔數(shù)字簽名,希望快速集成的場(chǎng)景 |
實(shí)時(shí)建議:如果你的首要目標(biāo)是 快速實(shí)現(xiàn) 且 開(kāi)發(fā)環(huán)境允許,那么商業(yè)庫(kù) (如 Spire 或 Aspose) 是最省時(shí)省力的選擇。 但如果你的項(xiàng)目要求免費(fèi)且希望主動(dòng)權(quán)完全掌握在自己手中,PdfPig 是值得嘗試的方向。
以下將以 Aspose.PDF 和 Spire.PDF 為例,提供兩種主流方案的詳細(xì)代碼示例。
使用 ImageStamp 類(lèi)添加圖片印章 (Aspose.PDF)
操作步驟:
- 使用
Document對(duì)象加載 PDF,并用ImageStamp創(chuàng)建印章。 - 設(shè)置印章的屬性(如背景、位置、尺寸等)。
- 將印章添加到指定頁(yè)面,并保存更新后的文檔。
using Aspose.Pdf;
using Aspose.Pdf.Text;
class Program
{
static void Main(string[] args)
{
const string dataDir = "YOUR DOCUMENT DIRECTORY";
// 1. 加載文檔
Document pdfDocument = new Document(dataDir + "AddImageStamp.pdf");
// 2. 創(chuàng)建基于圖片的印章對(duì)象
ImageStamp imageStamp = new ImageStamp(dataDir + "aspose-logo.jpg");
imageStamp.Background = true; // 設(shè)為背景印章
imageStamp.XIndent = 100; // 左邊距
imageStamp.YIndent = 100; // 上邊距
imageStamp.Height = 300; // 高度
imageStamp.Width = 300; // 寬度
imageStamp.Rotate = Rotation.on270; // 旋轉(zhuǎn)角度
imageStamp.Opacity = 0.5; // 透明度 (0.5 = 50%)
// 3. 將印章添加到第一頁(yè)
pdfDocument.Pages[1].AddStamp(imageStamp);
// 4. 保存文檔
pdfDocument.Save(dataDir + "AddImageStamp_out.pdf");
}
}(代碼來(lái)源:Aspose.PDF 官方文檔)
使用 PdfFileStamp 類(lèi)批量添加完整印章 (Aspose.PDF Facades)
操作步驟:
- 借助
PdfFileStamp對(duì)象,可一鍵連接 PDF 文檔。 - 使用
Stamp類(lèi)靈活配置印章的圖片、文字及位置參數(shù)。 - 將配置好的單一印章應(yīng)用到文檔的每一頁(yè)并輸出最終文件。
using Aspose.Pdf.Facades;
class Program
{
static void Main(string[] args)
{
// 1. 創(chuàng)建 PdfFileStamp 對(duì)象并綁定 PDF 文檔
PdfFileStamp fileStamp = new PdfFileStamp();
fileStamp.BindPdf("YOUR_DOCUMENT_DIRECTORY/AddImageStampAll.pdf");
// 2. 創(chuàng)建并配置 Stamp 對(duì)象
Aspose.Pdf.Facades.Stamp stamp = new Aspose.Pdf.Facades.Stamp();
stamp.BindImage("YOUR_DOCUMENT_DIRECTORY/aspose-logo.jpg");
stamp.SetOrigin(200, 200); // 設(shè)置位置(X, Y 坐標(biāo))
stamp.Rotation = 90.0F; // 設(shè)置旋轉(zhuǎn)角度
stamp.IsBackground = true; // 設(shè)置為背景
// 3. 將配置好的 Stamp 添加到文檔的所有頁(yè)面
fileStamp.AddStamp(stamp);
// 4. 保存并關(guān)閉
fileStamp.Save("YOUR_OUTPUT_DIRECTORY/AddImageStampAll_out.pdf");
fileStamp.Close();
}
}直接撰寫(xiě)動(dòng)態(tài)文本印章 (Spire.PDF)
- 加載 PDF 文檔。
- 創(chuàng)建
PdfPageTemplate模板并綁定到目標(biāo)頁(yè)面。 - 在模板上繪制自定義文本及樣式,實(shí)現(xiàn)文本印章效果。
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
class Program
{
static void Main(string[] args)
{
// 1. 加載文檔
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("sample.pdf");
// 2. 獲取第一頁(yè)及頁(yè)面尺寸
PdfPageBase page = doc.Pages[0];
System.Drawing.SizeF pageSize = page.Size;
// 3. 創(chuàng)建模板并綁定到頁(yè)面
PdfPageTemplate template = new PdfPageTemplate();
template.Size = new SizeF(200, 60);
template.Bounds = new RectangleF(50, pageSize.Height - 60, 200, 60); // 左下角
page.AddTemplate(template);
// 4. 在模板上繪制文本(來(lái)客訪案例)
using (PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋體", 12)))
{
template.Graphics.DrawString("申請(qǐng)人:張三", font, PdfBrushes.Black, new PointF(10, 15));
template.Graphics.DrawString("日期:2026-05-08", font, PdfBrushes.Black, new PointF(10, 35));
}
doc.SaveToFile("result.pdf");
doc.Close();
}
}代碼解析:該方案通過(guò) PdfPageTemplate 創(chuàng)建一個(gè)與頁(yè)面綁定的可繪制區(qū)域,可以在其中直接繪制文本,無(wú)需依賴(lài)原始圖像素材即可生成動(dòng)態(tài)的文本印章。
總結(jié)
本文介紹了如何使用 C# 為 PDF 文檔添加動(dòng)態(tài)印章和圖片印章。通過(guò)印章功能,開(kāi)發(fā)者可以在 PDF 中快速添加審批信息、時(shí)間標(biāo)記、公司 Logo 或其他自定義內(nèi)容,從而提升文檔的專(zhuān)業(yè)性與可讀性。
文章分別演示了動(dòng)態(tài)印章與圖片印章的實(shí)現(xiàn)方式,包括創(chuàng)建模板、繪制文本或圖片、設(shè)置印章外觀以及將印章添加到指定頁(yè)面等核心操作。借助這些方法,可以更加靈活地實(shí)現(xiàn) PDF 文檔的標(biāo)記與管理需求。
到此這篇關(guān)于C#代碼實(shí)現(xiàn)為PDF文檔添加印章的文章就介紹到這了,更多相關(guān)C# PDF添加印章內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#遞歸實(shí)現(xiàn)將一整數(shù)逆序后放入一數(shù)組中
這篇文章主要介紹了C#遞歸實(shí)現(xiàn)將一整數(shù)逆序后放入一數(shù)組中,是遞歸算法的一個(gè)簡(jiǎn)單應(yīng)用,需要的朋友可以參考下2014-10-10
C#實(shí)現(xiàn)多選項(xiàng)卡的瀏覽器控件
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)多選項(xiàng)卡的瀏覽器控件的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-03-03
C#實(shí)現(xiàn)網(wǎng)頁(yè)畫(huà)圖功能
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)網(wǎng)頁(yè)畫(huà)圖功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新聞效果的方法
這篇文章主要介紹了WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新聞效果的方法,涉及WinForm窗口滾動(dòng)字幕設(shè)置的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
C#中獲取二維數(shù)組的行數(shù)和列數(shù)以及多維數(shù)組各個(gè)維度的長(zhǎng)度
這篇文章介紹了C#中獲取二維數(shù)組的行數(shù)和列數(shù)以及多維數(shù)組各個(gè)維度的長(zhǎng)度,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
C#使用SqlConnection連接到SQL Server的代碼示例
這篇文章主要介紹了C#使用SqlConnection連接到SQL Server的代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
給c#添加SetTimeout和SetInterval函數(shù)
Javascript中的SetTimeout和SetInterval函數(shù)很方便,把他們移植到c#中來(lái)。2008-03-03

