在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
隨著技術的進步和網際網路使用的增加,數據主要以數位形式傳送和接收,主要是以PDF文件的形式。
在過去的一段時間裡,C# 開發人員在處理 PDF 文件方面遇到了困難。在許多情況下,開發人員需要在他們的應用程式中整合 PDF 檢視和 PDF 生成功能。 考慮到這一點,許多庫已被開發用於促進這些及類似的任務。
本文將比較兩個最受 .NET 和 .NET Core 開發人員歡迎的 PDF 庫。 這兩個庫是:
PDFium.NET SDK 函式庫
IronPDF 和 PDFium.NET 能夠在 .NET 應用程式中創建、操作和列印 PDF。 產生的問題是:應該使用哪個函式庫? 閱讀本文將使您自行決定。
首先,讓我們來看看這兩個庫各自提供了什麼,然後我們將進行比較。
PDFium.NET 用於創建、修改和查看文件為PDF格式。(可攜式文件格式). 它提供一個高階 C#/VB.NET API,用於在網頁伺服器上動態創建 PDF,以及在現有桌面或網頁應用中實現儲存為 PDF功能。
PDFium.NET 的亮點特性有:
IronPDF .NET PDF 函式庫是專為開發人員量身打造的,特別是針對 C# 開發人員。 使用這個出色的PDF庫,您可以輕鬆地在您的.NET專案中整合PDF檢視功能。
IronPDF 具有內建的 Chromium 引擎,可以非常輕鬆地將 HTML 轉換為 PDF。 這不需要任何複雜的低階API來操作PDF文件。 它可以處理 HTML 源文件,如 HTML 文件、JavaScript 文件和 ASPX 網頁。
IronPDF 可以通過自訂頁首和頁尾、水印等功能來自訂 PDF。 這也使得開發人員閱讀 PDF 文本和提取圖形變得非常簡單。
IronPDF for .NET 的突出功能包括:
不使用 Adobe Acrobat Reader 打印 PDF 文件。
IronPDF 套件庫適用於幾乎所有與 C# 相容的作業系統和框架,包括以下內容:
Azure, AWS, Docker, Linux, Windows
其餘的文章如下:
IronPDF C# 庫安裝
PDFium.NET SDK 安裝
建立 PDF 文件
從多個圖像創建 PDF
數位簽署 PDF
定價和授權
有不同的方法可以下載和安裝IronPDF庫。 最簡單的方法如下:
使用 Visual Studio
開發者命令提示字元
直接下載 NuGet 套件
在您的 Visual Studio 專案中,從「工具」選單或在方案總管中右鍵點擊您的專案,然後選擇「管理 NuGet 封裝」。 這兩個選項在下面的截圖中顯示。
一旦打開 NuGet 套件管理器,瀏覽 IronPDF 套件並安裝,如下圖所示。
IronPDF 也可以通過開發人員命令提示字元下載。 請按照以下步驟進行:
Install-Package IronPdf
IronPDF 也可以直接下載,請造訪NuGet IronPDF 套件. 步驟如下:
您也可以直接從IronPDF的包頁面下載IronPDF.DLL文件.
在專案中參考 IronPDF 庫,請按照以下步驟進行:
點擊確定!
全部完成! IronPDF 已經下載並安裝。 我們現在將開始安裝 PDFium.NET SDK 庫。
我們可以使用 NuGet 套件管理器安裝 PDFium.NET 或下載 PDFium Windows 安裝程式。
搜索 PDFium.NET.SDK。 點擊安裝於您目前的專案中。
PM> Install-Package Pdfium.Net.SDK
IronPDF 提供多種生成 PDF 文件的方法。 讓我們來看看兩個重要的。
IronPDF 使轉換變得非常簡單使用 IronPDF 的 URL 渲染將 HTML 轉換為 PDF使用現有的URL。
請考慮以下源代碼。
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
using var Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
Pdf.SaveAs("url.pdf");
Dim Renderer As New IronPdf.ChromePdfRenderer()
Dim Pdf = Renderer.RenderUrlAsPdf("https://ironpdf.com/")
Pdf.SaveAs("url.pdf")
以下程式碼範例顯示如何使用 HTML 字串來渲染 PDF 頁面。 您可以使用簡單的 HTML,或者將其與 CSS、圖像和 JavaScript 結合使用。
var Renderer = new IronPDF.ChromePdfRenderer();
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
PDF.SaveAs("pixel-perfect.pdf");
// Load external html assets: images, css and javascript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo_square.png'>", @"e:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
var Renderer = new IronPDF.ChromePdfRenderer();
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
PDF.SaveAs("pixel-perfect.pdf");
// Load external html assets: images, css and javascript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo_square.png'>", @"e:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
Dim Renderer = New IronPDF.ChromePdfRenderer()
Dim PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>")
PDF.SaveAs("pixel-perfect.pdf")
' Load external html assets: images, css and javascript.
' An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
Dim AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo_square.png'>", "e:\site\assets\")
AdvancedPDF.SaveAs("html-with-assets.pdf")
輸出如下:
它可以即時使用圖片和文字對象生成 PDF。 然而,它無法將 URL 或 HTML 字串轉換為 PDF 文件。
使用 PDFium.NET 生成 PDF 的代碼如下:
public void CreatePDF()
{
// Step 1: Initialize PDF library and create empty document
// Return value: PdfDocument main class
PdfCommon.Initialize();
var doc = PdfDocument.CreateNew(); // Create a PDF document
// Step 2: Add new page
// Arguments: page width: 8.27", page height: 11.69", Unit of measure: inches
// The PDF unit of measure is point. There are 72 points in one inch.
var page = doc.Pages.InsertPageAt(doc.Pages.Count, 8.27f * 72, 11.69f * 72);
// Step 3: Add graphics and text contents to the page
// Insert image from file using standard System.Drawing.Bitmap class
using (PdfBitmap logo = PdfBitmap.FromFile(@"e:\site\assets\logo_square.png"))
{
PdfImageObject imageObject = PdfImageObject.Create(doc, logo, 0, 0);
//image resolution is 300 DPI and location is 1.69 x 10.0 inches.
imageObject.Matrix = new FS_MATRIX(logo.Width * 72 / 300, 0, 0, logo.Height * 72 / 300, 1.69 * 72, 10.0 * 72);
page.PageObjects.Add(imageObject);
}
// Create fonts used for text objects
PdfFont calibryBold = PdfFont.CreateFont(doc, "CalibriBold");
// Insert text objects at 7.69"; 11.02" and font size is 25
PdfTextObject textObject = PdfTextObject.Create("Sample text", 7.69f * 72, 11.02f * 72, calibryBold, 25);
textObject.FillColor = FS_COLOR.Black;
page.PageObjects.Add(textObject);
// Step 5: Generate page content and save PDF file
// argument: PDF file name
page.GenerateContent();
doc.Save(@"e:\site\sample_document.pdf", SaveFlags.NoIncremental);
}
public void CreatePDF()
{
// Step 1: Initialize PDF library and create empty document
// Return value: PdfDocument main class
PdfCommon.Initialize();
var doc = PdfDocument.CreateNew(); // Create a PDF document
// Step 2: Add new page
// Arguments: page width: 8.27", page height: 11.69", Unit of measure: inches
// The PDF unit of measure is point. There are 72 points in one inch.
var page = doc.Pages.InsertPageAt(doc.Pages.Count, 8.27f * 72, 11.69f * 72);
// Step 3: Add graphics and text contents to the page
// Insert image from file using standard System.Drawing.Bitmap class
using (PdfBitmap logo = PdfBitmap.FromFile(@"e:\site\assets\logo_square.png"))
{
PdfImageObject imageObject = PdfImageObject.Create(doc, logo, 0, 0);
//image resolution is 300 DPI and location is 1.69 x 10.0 inches.
imageObject.Matrix = new FS_MATRIX(logo.Width * 72 / 300, 0, 0, logo.Height * 72 / 300, 1.69 * 72, 10.0 * 72);
page.PageObjects.Add(imageObject);
}
// Create fonts used for text objects
PdfFont calibryBold = PdfFont.CreateFont(doc, "CalibriBold");
// Insert text objects at 7.69"; 11.02" and font size is 25
PdfTextObject textObject = PdfTextObject.Create("Sample text", 7.69f * 72, 11.02f * 72, calibryBold, 25);
textObject.FillColor = FS_COLOR.Black;
page.PageObjects.Add(textObject);
// Step 5: Generate page content and save PDF file
// argument: PDF file name
page.GenerateContent();
doc.Save(@"e:\site\sample_document.pdf", SaveFlags.NoIncremental);
}
Public Sub CreatePDF()
' Step 1: Initialize PDF library and create empty document
' Return value: PdfDocument main class
PdfCommon.Initialize()
Dim doc = PdfDocument.CreateNew() ' Create a PDF document
' Step 2: Add new page
' Arguments: page width: 8.27", page height: 11.69", Unit of measure: inches
' The PDF unit of measure is point. There are 72 points in one inch.
Dim page = doc.Pages.InsertPageAt(doc.Pages.Count, 8.27F * 72, 11.69F * 72)
' Step 3: Add graphics and text contents to the page
' Insert image from file using standard System.Drawing.Bitmap class
Using logo As PdfBitmap = PdfBitmap.FromFile("e:\site\assets\logo_square.png")
Dim imageObject As PdfImageObject = PdfImageObject.Create(doc, logo, 0, 0)
'image resolution is 300 DPI and location is 1.69 x 10.0 inches.
imageObject.Matrix = New FS_MATRIX(logo.Width * 72 \ 300, 0, 0, logo.Height * 72 \ 300, 1.69 * 72, 10.0 * 72)
page.PageObjects.Add(imageObject)
End Using
' Create fonts used for text objects
Dim calibryBold As PdfFont = PdfFont.CreateFont(doc, "CalibriBold")
' Insert text objects at 7.69"; 11.02" and font size is 25
Dim textObject As PdfTextObject = PdfTextObject.Create("Sample text", 7.69F * 72, 11.02F * 72, calibryBold, 25)
textObject.FillColor = FS_COLOR.Black
page.PageObjects.Add(textObject)
' Step 5: Generate page content and save PDF file
' argument: PDF file name
page.GenerateContent()
doc.Save("e:\site\sample_document.pdf", SaveFlags.NoIncremental)
End Sub
輸出如下:
如果我們比較 IronPDF 和 PDFium 專案的輸出結果,我們可以清楚地看到基於 IronPDF 類庫的輸出在使用 HTML 渲染時提供了更好的結果,甚至不需要縮放圖像大小。另一方面,PDFium.NET 的輸出與 IronPDF 相似,但只是在縮放圖像的情況下。 如果我們從程式碼中跳過這一行:
imageObject.Matrix = new FS_MATRIX(logo.Width * 72 / 300, 0, 0, logo.Height * 72 / 300, 1.69 * 72, 10.0 * 72);
imageObject.Matrix = new FS_MATRIX(logo.Width * 72 / 300, 0, 0, logo.Height * 72 / 300, 1.69 * 72, 10.0 * 72);
imageObject.Matrix = New FS_MATRIX(logo.Width * 72 \ 300, 0, 0, logo.Height * 72 \ 300, 1.69 * 72, 10.0 * 72)
輸出結果將是:
在 IronPDF 中合併兩個或更多 PDF 很容易。 使用 Merge 方法,您可以合併兩個或多個 PDF,每個文件用逗號分隔。 代碼如下:
using IronPdf;
var html_a = @"<p> [PDF_A] </p>
<p> [PDF_A] 1st Page </p>
<div style = 'page-break-after: always;' ></div>
<p> [PDF_A] 2nd Page</p>";
var html_b = @"<p> [PDF_B] </p>
<p> [PDF_B] 1st Page </p>
<div style = 'page-break-after: always;' ></div>
<p> [PDF_B] 2nd Page</p>";
var Renderer = new IronPDF.ChromePdfRenderer();
var pdfdoc_a = Renderer.RenderHtmlAsPdf(html_a);
var pdfdoc_b = Renderer.RenderHtmlAsPdf(html_b);
var merged = IronPDF.PdfDocument.Merge(pdfdoc_a, pdfdoc_b);
merged.SaveAs("Merged.PDF");
using IronPdf;
var html_a = @"<p> [PDF_A] </p>
<p> [PDF_A] 1st Page </p>
<div style = 'page-break-after: always;' ></div>
<p> [PDF_A] 2nd Page</p>";
var html_b = @"<p> [PDF_B] </p>
<p> [PDF_B] 1st Page </p>
<div style = 'page-break-after: always;' ></div>
<p> [PDF_B] 2nd Page</p>";
var Renderer = new IronPDF.ChromePdfRenderer();
var pdfdoc_a = Renderer.RenderHtmlAsPdf(html_a);
var pdfdoc_b = Renderer.RenderHtmlAsPdf(html_b);
var merged = IronPDF.PdfDocument.Merge(pdfdoc_a, pdfdoc_b);
merged.SaveAs("Merged.PDF");
Imports IronPdf
Private html_a = "<p> [PDF_A] </p>
<p> [PDF_A] 1st Page </p>
<div style = 'page-break-after: always;' ></div>
<p> [PDF_A] 2nd Page</p>"
Private html_b = "<p> [PDF_B] </p>
<p> [PDF_B] 1st Page </p>
<div style = 'page-break-after: always;' ></div>
<p> [PDF_B] 2nd Page</p>"
Private Renderer = New IronPDF.ChromePdfRenderer()
Private pdfdoc_a = Renderer.RenderHtmlAsPdf(html_a)
Private pdfdoc_b = Renderer.RenderHtmlAsPdf(html_b)
Private merged = IronPDF.PdfDocument.Merge(pdfdoc_a, pdfdoc_b)
merged.SaveAs("Merged.PDF")
使用 PDFium.NET,您不僅可以將多個 PDF 文件合併成一個文件,還可以從源文件中選擇特定頁面,並將它們合併到一個 PDF 文件中。
下面的程式碼顯示如何使用 ImportPages
方法來完成。
public void MergePDF()
{
//Initialize the SDK library.
PdfCommon.Initialize();
//Open and load a PDF document in which other files will be merged
using (var mainDoc = PdfDocument.Load(@"c:\test001.pdf")) // C# Read source PDF File #1
{
//Open one PDF document.
using (var doc = PdfDocument.Load(@"c:\doc1.pdf")) //Read PDF File #2
{
//Import all pages from document
mainDoc.Pages.ImportPages(
doc,
string.Format("1-{0}", doc.Pages.Count),
mainDoc.Pages.Count
);
}
//Open another PDF document.
using (var doc = PdfDocument.Load(@"c:\doc2.pdf"))
{
//Import all pages from document
mainDoc.Pages.ImportPages(
doc,
string.Format("1-{0}", doc.Pages.Count),
mainDoc.Pages.Count
);
}
mainDoc.Save(@"c:\ResultDocument.pdf", SaveFlags.NoIncremental);
}
}
public void MergePDF()
{
//Initialize the SDK library.
PdfCommon.Initialize();
//Open and load a PDF document in which other files will be merged
using (var mainDoc = PdfDocument.Load(@"c:\test001.pdf")) // C# Read source PDF File #1
{
//Open one PDF document.
using (var doc = PdfDocument.Load(@"c:\doc1.pdf")) //Read PDF File #2
{
//Import all pages from document
mainDoc.Pages.ImportPages(
doc,
string.Format("1-{0}", doc.Pages.Count),
mainDoc.Pages.Count
);
}
//Open another PDF document.
using (var doc = PdfDocument.Load(@"c:\doc2.pdf"))
{
//Import all pages from document
mainDoc.Pages.ImportPages(
doc,
string.Format("1-{0}", doc.Pages.Count),
mainDoc.Pages.Count
);
}
mainDoc.Save(@"c:\ResultDocument.pdf", SaveFlags.NoIncremental);
}
}
Public Sub MergePDF()
'Initialize the SDK library.
PdfCommon.Initialize()
'Open and load a PDF document in which other files will be merged
Using mainDoc = PdfDocument.Load("c:\test001.pdf") ' C# Read source PDF File #1
'Open one PDF document.
Using doc = PdfDocument.Load("c:\doc1.pdf") 'Read PDF File #2
'Import all pages from document
mainDoc.Pages.ImportPages(doc, String.Format("1-{0}", doc.Pages.Count), mainDoc.Pages.Count)
End Using
'Open another PDF document.
Using doc = PdfDocument.Load("c:\doc2.pdf")
'Import all pages from document
mainDoc.Pages.ImportPages(doc, String.Format("1-{0}", doc.Pages.Count), mainDoc.Pages.Count)
End Using
mainDoc.Save("c:\ResultDocument.pdf", SaveFlags.NoIncremental)
End Using
End Sub
當今最重要的功能之一是數位簽署 PDF 文件。 IronPDF 提供此功能。 代碼如下:
using IronPdf;
// Cryptographically sign an existing PDF in 1 line of code!
new IronPDF.Signing.PdfSignature("Iron.p12", "123456").SignPdfFile("any.pdf");
/***** Advanced example for more control *****/
// Step 1. Create a PDF
var Renderer = new IronPdf.ChromePdfRenderer();
var doc = Renderer.RenderHtmlAsPDF("<h1>Testing 2048 bit digital security</h1>");
// Step 2. Create a Signature.
// You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.
var signature = new IronPDF.Signing.PdfSignature("Iron.pfx", "123456");
// Step 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png");
//Step 4. Sign the PDF with the PDFSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature);
//Step 4. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf");
using IronPdf;
// Cryptographically sign an existing PDF in 1 line of code!
new IronPDF.Signing.PdfSignature("Iron.p12", "123456").SignPdfFile("any.pdf");
/***** Advanced example for more control *****/
// Step 1. Create a PDF
var Renderer = new IronPdf.ChromePdfRenderer();
var doc = Renderer.RenderHtmlAsPDF("<h1>Testing 2048 bit digital security</h1>");
// Step 2. Create a Signature.
// You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.
var signature = new IronPDF.Signing.PdfSignature("Iron.pfx", "123456");
// Step 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png");
//Step 4. Sign the PDF with the PDFSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature);
//Step 4. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf");
Imports IronPdf
' Cryptographically sign an existing PDF in 1 line of code!
Call (New IronPDF.Signing.PdfSignature("Iron.p12", "123456")).SignPdfFile("any.pdf")
'''*** Advanced example for more control ****
' Step 1. Create a PDF
Dim Renderer = New IronPdf.ChromePdfRenderer()
Dim doc = Renderer.RenderHtmlAsPDF("<h1>Testing 2048 bit digital security</h1>")
' Step 2. Create a Signature.
' You may create a .pfx or .p12 PDF signing certificate using Adobe Acrobat Reader.
Dim signature = New IronPDF.Signing.PdfSignature("Iron.pfx", "123456")
' Step 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png")
'Step 4. Sign the PDF with the PDFSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature)
'Step 4. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf")
PDFium.NET 無法數位簽署 PDF 文件。
IronPDF 可免費用於開發簡單的應用程式,並可隨時獲取商業用途授權。它提供單一專案許可證、單一開發者許可證、代理商和跨國組織許可證。 它還提供SaaS和OEM重新發行授權和支援。
所有 IronPDF 授權均提供 30 天退款保證,以及一年軟體支援和升級服務。 最重要的是,這是一個永久授權(一次性購買). Lite套裝可用。 IronPDF 產品絕對沒有任何經常性費用。 有關可用許可證的更多詳細信息,請參見IronPDF 授權頁面.
PDFium.NET 提供永久授權。 您可以永久使用這個支援的SDK版本與您的註冊金鑰。 然而,該金鑰僅適用於某些特定的 SDK 版本,這些版本取決於許可證購買或續約的日期。 您可以免費安裝任何新產品版本,條件是該版本在您購買之前或購買後一年內發布。 PDFium.NET 也提供三種不同的授權套件:
單一開發者許可專為為多個客戶工作的單一開發者和自由職業者設計。
您可以造訪PDFium.NET 購買頁面查看完整定價詳情。
IronPDF 庫是一個易於使用的庫,用於創建 PDF 文件,且不需要任何複雜的 API。內建的 chromium 引擎允許像素完美的 HTML 到 PDF 轉換,支持的開放標準文檔類型包括 HTML、JS、CSS、JPG、PNG、GIF 和 SVG。
PDFium.NET SDK 是一個 .NET 類庫,旨在以相當實惠的價格滿足開發者最常見的需求。使用 PDFium.NET SDK,您的應用程式可以輕鬆顯示和操作 PDF 文件。 其特殊的 Page 對象編輯 API 是使這個庫特別強大的原因。
PDFium.NET 授權分為上述三個版本。 單一專案授權提供設施給單一開發者和多達三位開發者,起價分別為 $720 和 $900。 這比 IronPDF 稍微便宜一些,IronPDF 的 lite 版本以較低的價格起售。
IronPDF 以具競爭力的價格提供無限授權。相比之下,PDFium.NET 提供組織授權,允許無限數量的開發人員使用,但價格較高。相反地,IronPDF 提供的專業授權可供 10 位開發人員使用,其價格約為 PDFium.NET 相應的 10 位開發人員授權的一半。
在以上範例中,您已看到 IronPDF 使用比 PDFium.NET 更少的程式碼行數來建立和修改 PDF 文件。 這有助於減輕開發人員的工作負擔,讓他們更具生產力。IronPDF 提供多種方法將幾乎任何格式轉換為 PDF。 相較之下,PDFium.NET 只提供像是影像與文字轉換為 PDF 的幾種方法。
您現在可以購買所有Iron Software的產品庫僅需兩個的價格。 此外,有一個免費試用以測試功能。