跳過到頁腳內容
產品比較

探索PDFsharp向PDF添加水印的最佳替代方案

在 PDF 上加入水印是文件安全性、品牌和版本控制的共同需求。 無論是將檔案標示為機密、為官方報告打上品牌,或是防止未經授權的複製,水印都是不可或缺的功能。

在 C# 中,開發人員有多種函式庫可供選擇,其中 IronPDFPDFSharp 是最受歡迎的兩種選項。 然而,它們的方法、易用性、效能和授權結構有很大的差異。 本文詳細比較了IronPDF與 PDFsharp 在現有 PDF 上新增水印的功能,深入介紹了兩者的功能、實作流程以及客製化能力。

此比較涵蓋了兩個庫的浮水印 API,並提供了可運行的程式碼範例,以便您可以評估哪個庫更符合您的專案要求。

瞭解 PDF 水印

什麼是水印?

水印是覆蓋在文件上的圖形或文字,可作為識別、阻嚇或品牌元素。 水印可以是可見的,也可以是不可見的,這取決於其用途,並且與用於文件註釋的文字和圖像印章密切相關。

水印類型

  • Text Watermark - 通常是一個半透明的覆蓋層,上面寫著"CONFIDENTIAL"或"DRAFT"等訊息。
  • Image Watermark - 嵌入文件中的標誌、徽章或圖形。
  • Transparent Watermark - 不會阻礙文件可讀性的精細品牌標記。
  • Stamped Watermark - 較為顯眼、粗體的標記,以確保可見性。

常見使用案例

  • Security & Protection - 將文件標示為專屬文件,以防止未經授權的複製。
  • Branding - 加入公司標誌或簽名,以維持各文件的品牌一致性。
  • 版本控制 - 標示草稿、最終版本或文件修訂版。

IronPDF和 PDFsharp 是什麼?

IronPDF。

IronPDF是一個功能豐富的優質 .NET 程式庫,旨在簡化 PDF 處理,從建立 PDF到進階操作任務。 對於希望輕鬆實現 PDF 操作任務(包括水印)的開發人員而言,這份翻譯尤其有用。

主要功能:

  • 簡單直觀的 API,只需最少的程式碼。
  • 支援具有自訂選項的文字與影像水印。
  • 提供不透明度控制、定位和旋轉功能,以便精確放置。
  • 相容於 .NET 6+、.NET Core 及 .NET Framework。
  • 提供長期使用的永久授權模式。
  • 其他功能包括PDF註解HTML-to-PDF轉換,以及數位簽名

PDFsharp。

PDFsharp 是一個開放原始碼的函式庫,可讓開發人員使用 C# 來建立、編輯和處理 PDF。 如果您目前正在使用 PDFsharp 並考慮切換, PDFsharp 到IronPDF遷移指南將逐步介紹過渡過程。 雖然它提供了對繪圖操作的精細控制,但與IronPDF的抽象方法相比,水印功能需要更多的手動實現。

主要功能:

  • 免費且開放原始碼,因此對於有預算意識的專案來說是符合成本效益的。
  • 提供 PDF 繪圖作業的低階控制,包括勾勒圖形路徑和透明圖形路徑。
  • 支援文字和影像水印,但需要額外的程式碼來進行轉換。
  • 適用於 .NET Framework 和 .NET Core (透過 PDFSharpCore)。
  • 不包含內建的進階浮水印功能; 開發者透過繪圖 API 直接實現不透明度和旋轉等功能。

以下是這兩個庫在水印任務方面的比較簡要概述:

特點 IronPDF PDFsharp
文字浮水印 內建 ApplyWatermark 方法 透過 XGraphics API 進行手動繪圖
圖片浮水印 HTML/CSS <img> 標籤支持 DrawImage 手動定位
不透明度控制 參數位於 ApplyWatermark 需要自訂筆刷/Alpha通道處理
旋轉 參數位於 ApplyWatermark 手動呼叫 RotateTransform
水印樣式 完全支援 HTML/CSS 字型和筆刷配置
.NET 相容性 .NET 6+、核心、框架 .NET Framework Core(透過 PDFSharpCore)
授權 商業(永久選擇權) 開源(MIT)

IronPDF 的 [30 天免費試用](試用許可證包含以下範例中使用的完整浮水印 API。

使用IronPDF添加水印。

IronPDF 提供了一個高級 API,使開發人員只需幾行程式碼即可套用浮水印,無需手動計算座標或設定圖形管線。由於IronPDF的浮水印工具接受 HTML/CSS 字串(利用了庫中使用的基於 Chromium 的 HTML 渲染引擎) ,因此您可以使用熟悉的 Web 標記完全控制樣式、定位和外觀。

文字水印範例

using IronPdf;

const string filename = "existing.pdf";
// Load the existing PDF file
PdfDocument pdf = PdfDocument.FromFile(filename);

// Create a simple HTML-based watermark
string watermark = "<h1 style='color:red'>Confidential!</h1>";

// Apply the watermark to the PDF
pdf.ApplyWatermark(watermark);

// Save the updated document with the applied watermark
pdf.SaveAs("watermarked.pdf");
using IronPdf;

const string filename = "existing.pdf";
// Load the existing PDF file
PdfDocument pdf = PdfDocument.FromFile(filename);

// Create a simple HTML-based watermark
string watermark = "<h1 style='color:red'>Confidential!</h1>";

// Apply the watermark to the PDF
pdf.ApplyWatermark(watermark);

// Save the updated document with the applied watermark
pdf.SaveAs("watermarked.pdf");
Imports IronPdf

Private Const filename As String = "existing.pdf"
' Load the existing PDF file
Private pdf As PdfDocument = PdfDocument.FromFile(filename)

' Create a simple HTML-based watermark
Private watermark As String = "<h1 style='color:red'>Confidential!</h1>"

' Apply the watermark to the PDF
pdf.ApplyWatermark(watermark)

' Save the updated document with the applied watermark
pdf.SaveAs("watermarked.pdf")
$vbLabelText   $csharpLabel

Explore the Best Alternatives for PDFsharp Add Watermark to PDF:圖 3 - 文字水印輸出

在這個程式碼範例中,我們可以看到使用IronPDF在現有 PDF 檔案上套用水印是多麼容易。 在這裡,我們使用 FromFile 方法來載入現有的 PDF。 然後,我們創建一個簡單的字串,將其格式化為 HTML 元素作為浮水印,並使用 ApplyWatermark 將其應用於 PDF,類似於使用 HTML 從頭開始建立 PDF 的方式。 如輸出圖片所示,這在我們的 PDF 上加入了一個簡單的文字串"Confidential"作為水印。

圖片水印範例

using IronPdf;

// Load the PDF document
PdfDocument pdf = PdfDocument.FromFile("existing.pdf");

// Create an HTML-based watermark containing the image
string watermark = "<img src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>";

// Apply the watermark to the PDF with rotation and opacity
pdf.ApplyWatermark(watermark, rotation: 45, opacity: 80);

// Save the watermarked document
pdf.SaveAs("watermarked.pdf");
using IronPdf;

// Load the PDF document
PdfDocument pdf = PdfDocument.FromFile("existing.pdf");

// Create an HTML-based watermark containing the image
string watermark = "<img src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>";

// Apply the watermark to the PDF with rotation and opacity
pdf.ApplyWatermark(watermark, rotation: 45, opacity: 80);

// Save the watermarked document
pdf.SaveAs("watermarked.pdf");
Imports IronPdf

' Load the PDF document
Private pdf As PdfDocument = PdfDocument.FromFile("existing.pdf")

' Create an HTML-based watermark containing the image
Private watermark As String = "<img src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>"

' Apply the watermark to the PDF with rotation and opacity
pdf.ApplyWatermark(watermark, rotation:= 45, opacity:= 80)

' Save the watermarked document
pdf.SaveAs("watermarked.pdf")
$vbLabelText   $csharpLabel

Explore the Best Alternatives for PDFsharp Add Watermark to PDF:圖 4

添加圖片作為水印和添加文字一樣簡單,因為兩者使用相同的方法。 就像在文字範例中一樣,我們建立一個新的水印字串變數,包含指向圖片 URL 的 HTML 圖片標籤,並套用它。 這次,我們透過IronPDF的渲染選項參數加入了自訂旋轉和不透明度變換。

此方法在指定位置覆蓋圖片水印,允許自訂位置和透明度。

使用 PDFsharp 加入水印。

PDFsharp 要求開發人員使用其 GDI+ 繪圖 API 來手動呈現文字和影像。 若要在現有的 PDF 檔案上加上水印,請建立一個 XGraphics 物件來繪製並套用所需的內容。

文字水印範例

using PdfSharp.Pdf;
using PdfSharp.Drawing;
using PdfSharp.Pdf.IO;

const string filename = "existing.pdf";
// Open the PDF document in modify mode
var document = PdfReader.Open(filename, PdfDocumentOpenMode.Modify);

foreach (var page in document.Pages)
{
    // Create an XGraphics object for drawing
    var gfx = XGraphics.FromPdfPage(page);

    // Move the origin to the center of the page for rotation purposes
    gfx.TranslateTransform(page.Width / 2, page.Height / 2);

    // Rotate for diagonal watermark placement
    gfx.RotateTransform(Math.Atan(page.Height / page.Width));

    // Define font and brush for drawing the watermark text
    var font = new XFont("Arial", 40);
    var brush = new XSolidBrush(XColor.FromArgb(128, XColors.Red));  // Semi-transparent red

    // Draw the watermark text centered on the page
    gfx.DrawString("WATERMARK", font, brush, new XPoint(0, 0));
}

// Save modified document
document.Save("watermarked.pdf");
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using PdfSharp.Pdf.IO;

const string filename = "existing.pdf";
// Open the PDF document in modify mode
var document = PdfReader.Open(filename, PdfDocumentOpenMode.Modify);

foreach (var page in document.Pages)
{
    // Create an XGraphics object for drawing
    var gfx = XGraphics.FromPdfPage(page);

    // Move the origin to the center of the page for rotation purposes
    gfx.TranslateTransform(page.Width / 2, page.Height / 2);

    // Rotate for diagonal watermark placement
    gfx.RotateTransform(Math.Atan(page.Height / page.Width));

    // Define font and brush for drawing the watermark text
    var font = new XFont("Arial", 40);
    var brush = new XSolidBrush(XColor.FromArgb(128, XColors.Red));  // Semi-transparent red

    // Draw the watermark text centered on the page
    gfx.DrawString("WATERMARK", font, brush, new XPoint(0, 0));
}

// Save modified document
document.Save("watermarked.pdf");
Imports PdfSharp.Pdf
Imports PdfSharp.Drawing
Imports PdfSharp.Pdf.IO

Private Const filename As String = "existing.pdf"
' Open the PDF document in modify mode
Private document = PdfReader.Open(filename, PdfDocumentOpenMode.Modify)

For Each page In document.Pages
	' Create an XGraphics object for drawing
	Dim gfx = XGraphics.FromPdfPage(page)

	' Move the origin to the center of the page for rotation purposes
	gfx.TranslateTransform(page.Width \ 2, page.Height \ 2)

	' Rotate for diagonal watermark placement
	gfx.RotateTransform(Math.Atan(page.Height \ page.Width))

	' Define font and brush for drawing the watermark text
	Dim font = New XFont("Arial", 40)
	Dim brush = New XSolidBrush(XColor.FromArgb(128, XColors.Red)) ' Semi-transparent red

	' Draw the watermark text centered on the page
	gfx.DrawString("WATERMARK", font, brush, New XPoint(0, 0))
Next page

' Save modified document
document.Save("watermarked.pdf")
$vbLabelText   $csharpLabel

此實作方式透過明確的基於座標的定位,在每個頁面上繪製浮水印。 雖然 PDFsharp 產生的輸出與IronPDF範例類似,但它的方法涉及更多程式碼——IronPDF 的文字浮水印大約需要 4 行活動程式碼,而 PDFsharp 需要 10 行,因為 PDFsharp 將佈局決策(平移、旋轉、字體選擇)委託給開發人員,而不是對其進行抽象。

圖片水印範例

using PdfSharp.Pdf;
using PdfSharp.Drawing;
using PdfSharp.Pdf.IO;

// Open the existing PDF document in modify mode
var document = PdfReader.Open("sample.pdf", PdfDocumentOpenMode.Modify);

// Load the watermark image
XImage watermark = XImage.FromFile("watermark.png");

foreach (var page in document.Pages)
{
    // Create a graphics object from the page
    XGraphics gfx = XGraphics.FromPdfPage(page);

    // Draw the image watermark at the specified position and size
    gfx.DrawImage(watermark, 50, 100, watermark.PixelWidth / 2, watermark.PixelHeight / 2);
}

// Save the modified PDF document
document.Save("watermarked.pdf");
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using PdfSharp.Pdf.IO;

// Open the existing PDF document in modify mode
var document = PdfReader.Open("sample.pdf", PdfDocumentOpenMode.Modify);

// Load the watermark image
XImage watermark = XImage.FromFile("watermark.png");

foreach (var page in document.Pages)
{
    // Create a graphics object from the page
    XGraphics gfx = XGraphics.FromPdfPage(page);

    // Draw the image watermark at the specified position and size
    gfx.DrawImage(watermark, 50, 100, watermark.PixelWidth / 2, watermark.PixelHeight / 2);
}

// Save the modified PDF document
document.Save("watermarked.pdf");
Imports PdfSharp.Pdf
Imports PdfSharp.Drawing
Imports PdfSharp.Pdf.IO

' Open the existing PDF document in modify mode
Private document = PdfReader.Open("sample.pdf", PdfDocumentOpenMode.Modify)

' Load the watermark image
Private watermark As XImage = XImage.FromFile("watermark.png")

For Each page In document.Pages
	' Create a graphics object from the page
	Dim gfx As XGraphics = XGraphics.FromPdfPage(page)

	' Draw the image watermark at the specified position and size
'INSTANT VB WARNING: Instant VB cannot determine whether both operands of this division are integer types - if they are then you should use the VB integer division operator:
	gfx.DrawImage(watermark, 50, 100, watermark.PixelWidth / 2, watermark.PixelHeight / 2)
Next page

' Save the modified PDF document
document.Save("watermarked.pdf")
$vbLabelText   $csharpLabel

Explore the Best Alternatives for PDFsharp Add Watermark to PDF:圖 6

此方法會在影像上放置固定位置和大小的浮水印。不透明度處理不在 PDFsharp 的單次呼叫 API 範圍內-需要透明度控制的開發人員可以直接透過 XGraphics 管道進行管理。 與文字浮水印範例一樣,PDFsharp 允許您對渲染進行精細控制,但代價是需要額外的設置,而IronPDF的高級浮水印 API 則無法做到這一點。

IronPDF和 PDFsharp 在水印功能上有何不同?

易用性

  • IronPDF:提供高階功能,以最少的程式碼簡化水印處理。 它將複雜的操作抽象化,非常適合需要快速有效解決方案的開發人員。
  • PDFSharp: 需要使用圖形 API 手動實作,這會增加複雜性和開發時間。它更適合需要對呈現進行精細控制,但又能接受額外編碼的開發人員。

效能

  • IronPDF:以單一 NuGet 套件的形式提供,其浮水印作業可在一次方法呼叫中處理不透明度、旋轉和定位,從而減少為多頁文件添加浮水印時的每頁處理開銷。 對於大規模工作流程,請參閱IronPDF 效能最佳化指南
  • PDFSharp:輕量級,依賴項少。 對於涉及每頁多次轉換的複雜浮水印任務,開發人員可能需要分析和最佳化其繪圖邏輯,因為 PDFsharp 不會在內部批次處理或快取這些操作。

自訂選項

  • IronPDF:內建支援不透明度、旋轉、定位和字型大小自訂。 使用者可以輕鬆調整設定,而無需深入瞭解複雜的呈現邏輯。
  • PDFSharp:需要為不透明度、透明效果和轉換處理進行額外的編碼。 雖然功能強大,但它對開發者提出了更高的客製化要求,包括使用 var 格式進行特定的渲染任務。

相容性

  • IronPDF:完全相容於 .NET 6+、.NET Core 和 .NET Framework,使其適用於現代和傳統應用程式。
  • PDFSharp:支援 .NET Framework 和 .NET Core(透過 PDFSharpCore)。 根據您選擇的社群移植版本,某些較新的框架功能可能超出其目前範圍。

授權與成本

  • IronPDF:商業產品,需要付費許可,但包含永久許可選項、客戶支援和持續更新。
  • PDFSharp:開源且免費使用,對於喜歡不受限制的授權模式但願意自行處理支援和更新的開發人員來說,這是一個經濟高效的解決方案。

除了許可費用之外,專案總成本還包括開發人員花費在基於座標的手動定位、自訂不透明度和旋轉邏輯以及IronPDF在單一方法呼叫中處理的每頁繪圖程式碼上的時間。 對於評估多年專案生命週期成本的團隊來說,這些實施和維護時間往往會超過開源許可和商業許可之間的差異。

您應該選擇哪一個程式庫?

Explore the Best Alternatives for PDFsharp Add Watermark to PDF:圖 7

PDFsharp 提供強大的底層繪圖控制和開源許可證——對於預算緊張且缺乏從頭開始建立浮水印邏輯的開發能力的團隊來說,這是一個真正的優勢。 對於那些需要將浮水印定位、透明度、旋轉和基於 HTML/CSS 的樣式等功能作為一流操作的團隊來說, IronPDF提供了一個更全面的 API,可以縮短實現時間。最終,最佳選擇取決於您的專案需求、編碼經驗和可用資源。

您可以下載 免費試用版,親自試用 IronPDF,探索它如何讓您的 C# PDF 專案更上一層樓!

請注意PDFsharp 是其各自所有者的註冊商標。 本網站與 PDFsharp 無任何關聯、背書或贊助。所有產品名稱、標誌和品牌均為其各自擁有者的財產。 比較僅供參考,反映了撰寫時的公開信息。

常見問題解答

如何使用 .NET 庫将水印添加到 PDF ?

您可以通過利用 IronPDF 的簡单 API 添加水印,支援帶有可自定义選項(如不透明度和旋轉)的文字和图像水印。

使用高级 .NET PDF 庫進行水印具有哪些优势?

类似 IronPDF 的高级 .NET PDF 庫提供了高级功能的簡便水印、与現代 .NET 框架的兼容性,以及其他功能,如 PDF 注释和 HTML 轉 PDF 轉换。

為何水印在 PDF 文檔中很重要?

水印對于文件安全、品牌和版本控制很重要。它有助于防止未经授權的复制,确保品牌一致性,并将文件標记為机密。

IronPDF 和 PDFsharp 在 PDF 水印方面有何区别?

IronPDF 提供了更直观的 API,用最少的代碼實現簡便水印,而 PDFsharp 需要更多的手動操作和额外的代碼進行轉换和不透明度設置。

IronPDF 如何在 PDF 操作中相比于開源選項有所提升?

IronPDF 提供了內置的高级功能,使得执行水印、注释和轉换等 PDF 操作更加簡便,而这在像 PDFsharp 这样的開源選項中需要更复杂的编碼。

使用 .NET 庫可以将哪些类型的水印添加到 PDF 中?

使用类似 IronPDF 的庫,您可以添加文字水印、图像水印和透明水印,并可選择自定义定位、不透明度和旋轉。

IronPDF 適合處理大容量 PDF 文檔嗎?

是的,IronPDF 针對高速處理進行了优化,能够高效地處理大量 PDF 文檔而不会出現性能問题。

選择高级和開源 .NET PDF 庫時應該考虑什么?

考虑易用性、可用功能、兼容性、性能和支援。类似 IronPDF 的高级庫提供了廣泛的功能和支援,而类似 PDFsharp 的開源庫虽免费但需要更复杂的编碼并且缺乏官方支援。

我可以使用 IronPDF 和 .NET Core 嗎?

是的,IronPDF 兼容 .NET 6+ 、 .NET Core 和 .NET Framework,使其適用于不同的開發环境。

IronPDF 除了水印之外还提供哪些附加功能?

除了水印, IronPDF 还支援 PDF 注释、 HTML 轉 PDF 轉换、數字签名等,提供了全面的 PDF 操作能力。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我