產品比較

IronPDF與Apitron PDF Kit之間的比較

發佈 2022年12月11日
分享:

在 C# 中,處理 PDF 文件對於開發人員來說可能是一項挑戰。 在為這類文件創建內容時需要考慮許多因素,而從不同格式轉換內容為 PDF 時需要考慮的因素更多。 自動化現在是軟體開發流程的關鍵。 這些問題現在已透過建構圖書館解決,這些圖書館旨在協助讀取、寫入、創建和修改 PDF 文件,以及編輯其屬性並將其從其他格式轉換。

在這篇博客文章中,將比較兩個用於.NET和.NET Core的PDF庫。這兩個庫是:

  • IronPDF 庫
  • Apitron PDF Kit

    IronPDF 和 Apitron PDF Kit 是兩個為 .NET 和 .NET Core 提供 PDF 操作功能的庫。 它們都可以用於文件欄位的轉換和操作任務。 他們兩個也都可以創建書籤。 接下來的問題是決定哪個 C# PDF .NET 函式庫最適合我們的 .NET 專案。 這篇比較文章將幫助您在這兩個 PDF 庫之間做出決定。

    首先,讓我們來看看這兩個庫所提供的功能,然後再進行比較。

Apitron PDF Kit 庫及其功能

Apitron PDF Kit 是一個 .NET 元件,允許您以各種方式操作或轉換 PDF 文件。 您可以添加圖片、繪圖和文本,簽署文件等等。 您還可以編輯現有內容。 Apitron PDF Kit .NET 元件可用於在多平台上創建行動、桌面、網頁、Windows 和雲端應用程式。

使用這個 PDF SDK,您將能夠:

  • 提取、修改和添加圖形(文字、圖片、繪圖)
  • 拆分或合併 PDF 文件
  • 填寫或建立受密碼保護的 PDF 表單,FDF 支援
  • 建立具有可選內容群組的多層 PDF 文件(OCG)
  • 從文件添加或移除欄位
  • 使用從右至左或雙向文本來創建頁面內容
  • 檢查文件內的資源 - 定義的字體,嵌入的文件
  • 數位簽署並檢查 PDF 文件上的現有簽名

IronPDF 的主要功能

開發人員,特別是 C# 程式設計師,將會喜愛 IronPDF .NET 庫。 使用這個驚人的工具,您可以輕鬆構建一個 .NET Core PDF 處理應用程式。

IronPDF 使用 .NET Chromium 引擎來更改 HTML 頁面(在程式碼或網址形式中)到 PDF 文件。 完全不需要使用複雜的 API 來定位導航物件或從 HTML 設計 PDF。 IronPDF 支援標準網頁文件,包括 HTML、ASPX、JS、CSS 和圖片。

IronPDF 可以使用 HTML5、CSS、JS 和圖像創建。 PDF 可以輕鬆編輯、加蓋戳記,並添加頁眉和頁腳。 這也讓讀取 PDF 文字和提取圖形變得輕而易舉。

IronPDF 的突出特點包括:

  • 使用 HTML4/5、CSS 和 JavaScript 創建 PDF 文件
  • 使用自訂網路登入憑證、使用者代理、代理伺服器、Cookies、HTTP標頭和表單變數載入 URL。(啟用 HTML 登錄表單後的登錄)
  • 閱讀和填寫 PDF 表單欄位
  • 從 PDF 提取文字和圖形
  • 使用新的 HTML 內容更新 PDF 頁面
  • 創建以文字為基礎或 HTML 為基礎的頁首和頁尾
  • 合併和分離 PDF 文件內容
  • 將 ASP.NET WebForms 轉換為可列印的 PDF 文件
  • 無需 Adobe Acrobat 軟體即可列印 PDF 文件

    IronPDF 幾乎可在所有與 C# 相容的作業系統和框架中使用,包括以下內容:

  • .NET Core 2.1, 3.0, 3.1, .NET 6 和 5
  • .NET Standard 2.0 相容性用於通用兼容性
  • Azure, AWS, Docker, Linux, Windows

    其餘的文章如下:

  1. IronPDF 安裝

  2. Apitron PDF Kit 安裝

  3. 建立 PDF 文件

  4. 在 PDF 中建立頁首和頁尾

  5. 數位簽署 PDF

  6. 定價和授權

  7. 結論

1. IronPDF 安裝

下載和安裝IronPDF庫有四種方法。 如下:

  1. 使用 NuGet 套件管理器

  2. 開發者命令提示字元

  3. 直接下載 NuGet 套件

  4. 下載 IronPDF .DLL 庫

1.1. 使用 NuGet 套件管理器

若要安裝IronPDF,只需在方案總管中右鍵單擊您的專案。 這將開啟 NuGet 套件管理器。

IronPDF 與 Apitron PDF SDK .NET 的比較 - 圖 1:使用解決方案總管訪問 NuGet 套件管理器

使用方案資源管理器訪問NuGet套件管理員

選定後,瀏覽 IronPDF 套件並安裝,如下圖所示。

IronPDF 與 Apitron PDF SDK .NET 的比較 - 圖 2:使用 NuGet 套件管理器安裝 IronPDF 庫

使用 NuGet 套件管理器安裝 IronPDF 程式庫

1.2. 使用開發者命令提示字元

您也可以透過開發人員命令提示字元來安裝IronPDF。

  • 打開 開發人員命令提示字元 --- 通常位於 Visual Studio 資料夾下
  • 輸入以下命令:
Install-Package IronPdf
  • 按Enter键
  • 這將下載並安裝該套件
  • 重新載入您的專案並開始使用它

1.3. 直接下載 NuGet 套件

IronPDF 也可以通过访问安装IronPDF NuGet 套件直接訪問網站並下載軟體包。 步驟如下:

  • 導航至IronPDF NuGet 套件
  • 選擇下載套件
  • 雙擊下載的套件
  • 將安裝套件
  • 重新加載您的 Visual Studio 專案並開始使用它

    IronPDF已下載並準備使用。 不過,在此之前,我們應該安裝 Apitron PDF 庫。

2. Apitron PDF Kit 安裝

對於 .NET Core 應用程序,我們可以使用 NuGet 套件管理器安裝 Apitron,或者從Apitron PDF Kit NuGet網站直接。

  • 在 Visual Studio 中開啟 NuGet 套件,如同我們在 IronPDF 中所做的。
  • 搜索 Apitron.PDF.Kit。
  • 點擊安裝到您當前的專案中。
    IronPDF 與 Apitron PDF SDK .NET 比較 - 圖 3:Apitron PDF Kit 搜索

    Apitron PDF Kit 搜索

    您也可以使用 NuGet 套件管理器控制台來安裝 Apitron。 按照 IronPDF 中提到的「使用開發者命令提示字元」步驟,輸入以下命令:

Install-Package Apitron.PDF.Kit

按 ENTER。 它將下載並安裝 Apitron.PDF.Kit。

添加以下命名空間:

using Apitron.PDF.Kit;
using Apitron.PDF.Kit.FixedLayout.Resources;
using Apitron.PDF.Kit.FixedLayout.Resources.Fonts;
using Apitron.PDF.Kit.FlowLayout.Content;
using Apitron.PDF.Kit.Styles;
using Apitron.PDF.Kit.Styles.Appearance;
using Font = Apitron.PDF.Kit.Styles.Text.Font;
using Apitron.PDF.Kit;
using Apitron.PDF.Kit.FixedLayout.Resources;
using Apitron.PDF.Kit.FixedLayout.Resources.Fonts;
using Apitron.PDF.Kit.FlowLayout.Content;
using Apitron.PDF.Kit.Styles;
using Apitron.PDF.Kit.Styles.Appearance;
using Font = Apitron.PDF.Kit.Styles.Text.Font;
Imports Apitron.PDF.Kit
Imports Apitron.PDF.Kit.FixedLayout.Resources
Imports Apitron.PDF.Kit.FixedLayout.Resources.Fonts
Imports Apitron.PDF.Kit.FlowLayout.Content
Imports Apitron.PDF.Kit.Styles
Imports Apitron.PDF.Kit.Styles.Appearance
Imports Font = Apitron.PDF.Kit.Styles.Text.Font
VB   C#

現在,讓我們來比較 IronPDF 和 Apitron PDF。

3. 創建 PDF 文件

3.1. 使用 IronPDF

IronPDF 有多種方法可用於創建 PDF。 讓我們來看看兩個重要的。

現有的 URL 轉為 PDF

IronPDF 讓轉換任何 URL 為 PDF 變得輕鬆簡單。 以下程式碼有助於將 URL 轉換為 PDF。

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")
VB   C#

HTML 輸入字符串轉 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.png'><h1>Sample Text</h1>", @"C:\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.png'><h1>Sample Text</h1>", @"C:\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.png'><h1>Sample Text</h1>", "C:\site\assets\")
AdvancedPDF.SaveAs("html-with-assets.pdf")
VB   C#

輸出如下:

IronPDF 與 Apitron PDF SDK .NET 的比較 - 圖 4:IronPDF 從 URL 和 HTML CSS 字串生成 PDF

IronPDF 從 URL 和 HTML CSS 字串生成 PDF

3.2. 使用 Apitron PDF Kit

Apitron PDF 不提供將 URL 或 HTML 轉換為 PDF 的功能。 它允許將 PDF 轉換為 HTML。 然而,它也將 XML 檔案轉換為 PDF。 使用的 XML 檔案為:

<?xml version="1.0" encoding="utf-8"?>
<FlowDocument xmlns="Apitron.PDF.Kit.FlowLayout.v1">
  <Resources>
    <Image resourceId="logo" fileName="../../images/logo.png" />
  </Resources>
  <Styles>
    <Style selector="flowdocument">
      <Color value="Black" />
    </Style>
    <Style selector="grid">
      <InnerBorder thickness="1" />
      <InnerBorderColor value="Black" />
    </Style>
  </Styles>
  <Elements>
    <Image>
      <Properties>
        <Class value="logo" />
        <ResourceId value="logo" />
      </Properties>
    </Image>
    <TextBlock>
      <Properties>
        <Class value="header" />
        <Text value="Sample Interview Questions for Candidates" />
      </Properties>
    </TextBlock>
    <Br />
    <TextBlock>
      <Properties>
        <Class value="headerNote" />
        <Text value="To help facilitate the interview process, the Human Resources Department has compiled a list of questions that might be used during the phone and/or on-campus interviews. Some of the questions deal with the same content, but are phrased differently while other questions may not pertain to a specific discipline; however all of the questions are unbiased and appropriate to ask. We hope you'll find this helpful." />
      </Properties>
    </TextBlock>
  </Elements>
  <Properties>
    <Margin value="30,20,30,20" />
  </Properties>
</FlowDocument>
XML

將此 XML 模板轉換為 PDF 的代碼如下:

using (Stream stream = File.OpenRead("C:\\PLACE YOUR EXACT PATH HERE\\template.xml"), outputStream = File.Create("fromTemplate.pdf"))
{
    ResourceManager resourceManager = new ResourceManager();

    FlowDocument doc = FlowDocument.LoadFromXml(stream, resourceManager);

    doc.Write(outputStream, resourceManager);
}
using (Stream stream = File.OpenRead("C:\\PLACE YOUR EXACT PATH HERE\\template.xml"), outputStream = File.Create("fromTemplate.pdf"))
{
    ResourceManager resourceManager = new ResourceManager();

    FlowDocument doc = FlowDocument.LoadFromXml(stream, resourceManager);

    doc.Write(outputStream, resourceManager);
}
Using stream As Stream = File.OpenRead("C:\PLACE YOUR EXACT PATH HERE\template.xml"), outputStream As Stream = File.Create("fromTemplate.pdf")
	Dim resourceManager As New ResourceManager()

	Dim doc As FlowDocument = FlowDocument.LoadFromXml(stream, resourceManager)

	doc.Write(outputStream, resourceManager)
End Using
VB   C#

輸出如下:

IronPDF與Apitron PDF SDK .NET的比較 - 圖5:Apitron PDF文檔

Apitron PDF 文件

如果我們比較 IronPDF 和 Apitron 的輸出,我們可以清楚地看到 IronPDF 使用 HTML 渲染且不對圖像大小進行縮放來創建令人驚艷的文件。另一方面,Apitron 會產生與 IronPDF 類似的輸出,但前提是 XML 文件已經註冊樣式。

4. 為 PDF 文件添加頁首和頁尾

4.1. 使用 IronPDF

使用 IronPDF 添加頁首和頁尾相當簡單。 IronPDF 允許您添加頁碼和分頁符號,附加封面、邊距等。

以下是添加頁眉和頁腳的代碼:

var Renderer = new ChromePdfRenderer();

// Add a header
Renderer.RenderingOptions.FirstPageNumber = 1; // use 2 if a cover page  will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = true;
Renderer.RenderingOptions.TextHeader.CenterText = "This is the header text";
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica;
Renderer.RenderingOptions.TextHeader.FontSize = 12;
Renderer.RenderingOptions.MarginTop = 25; //create 25mm space for header

// Add a footer too
Renderer.RenderingOptions.TextFooter.DrawDividerLine = true;
Renderer.RenderingOptions.TextFooter.Font = IronPdf.Font.FontTypes.Arial;
Renderer.RenderingOptions.TextFooter.FontSize = 12;
Renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}";
Renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}";
Renderer.RenderingOptions.MarginTop = 25; //create 25mm space for footer

using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>This is header and footer generated pdf file</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
var Renderer = new ChromePdfRenderer();

// Add a header
Renderer.RenderingOptions.FirstPageNumber = 1; // use 2 if a cover page  will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = true;
Renderer.RenderingOptions.TextHeader.CenterText = "This is the header text";
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica;
Renderer.RenderingOptions.TextHeader.FontSize = 12;
Renderer.RenderingOptions.MarginTop = 25; //create 25mm space for header

// Add a footer too
Renderer.RenderingOptions.TextFooter.DrawDividerLine = true;
Renderer.RenderingOptions.TextFooter.Font = IronPdf.Font.FontTypes.Arial;
Renderer.RenderingOptions.TextFooter.FontSize = 12;
Renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}";
Renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}";
Renderer.RenderingOptions.MarginTop = 25; //create 25mm space for footer

using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>This is header and footer generated pdf file</h1>", @"C:\site\assets\");
AdvancedPDF.SaveAs("html-with-assets.pdf");
Dim Renderer = New ChromePdfRenderer()

' Add a header
Renderer.RenderingOptions.FirstPageNumber = 1 ' use 2 if a cover page  will be appended
Renderer.RenderingOptions.TextHeader.DrawDividerLine = True
Renderer.RenderingOptions.TextHeader.CenterText = "This is the header text"
Renderer.RenderingOptions.TextHeader.Font = IronPdf.Font.FontTypes.Helvetica
Renderer.RenderingOptions.TextHeader.FontSize = 12
Renderer.RenderingOptions.MarginTop = 25 'create 25mm space for header

' Add a footer too
Renderer.RenderingOptions.TextFooter.DrawDividerLine = True
Renderer.RenderingOptions.TextFooter.Font = IronPdf.Font.FontTypes.Arial
Renderer.RenderingOptions.TextFooter.FontSize = 12
Renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}"
Renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}"
Renderer.RenderingOptions.MarginTop = 25 'create 25mm space for footer

Dim AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='logo.png'><h1>This is header and footer generated pdf file</h1>", "C:\site\assets\")
AdvancedPDF.SaveAs("html-with-assets.pdf")
VB   C#

輸出如下:

IronPDF與Apitron PDF SDK .NET的比較 - 圖6:IronPDF頁眉和頁腳

IronPDF 頁首和頁尾

4.2. 使用 Apitron PDF Kit

Apitron PDF Kit 將 XML 結構格式的內容轉換為 PDF 來創建 PDF。 在 Apitron PDF Fit 中,可以使用 PageHeaderPageFooter 屬性來添加頁眉和頁腳。 執行此操作的程式碼如下:

// register doc's resources first
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"));

// create document
FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};

// register styles
doc.StyleManager.RegisterStyle(".pageHeader",new Style(){Font = new Font(StandardFonts.TimesBold, 20)});
doc.StyleManager.RegisterStyle(".pageFooter",new Style(){Align = Align.Right});
doc.StyleManager.RegisterStyle("hr",new Style(){Height = 2, Margin = new Thickness(0,5,0,5)});
doc.StyleManager.RegisterStyle(".content",new Style(){Align = Align.Left, Display = Display.InlineBlock});

// fill the header section
doc.PageHeader.Class = "pageHeader";
doc.PageHeader.Add(new Image("logo"){Width = 100, Height = 50});
doc.PageHeader.Add(new TextBlock("This document is intended for internal use only"){TextIndent = 20});
doc.PageHeader.Add(new Hr());

// fill the footer section
doc.PageFooter.Class = "pageFooter";
doc.PageFooter.Add(new Hr());
doc.PageFooter.Add(new TextBlock((ctx)=>string.Format("Page {0} from&nbsp;",ctx.CurrentPage+1)));
doc.PageFooter.Add(new PageCount(3){Display = Display.Inline});

// add pages
for (int i = 0; i < 2; ++i)
{
    doc.Add(new TextBlock("This is header and footer generation pdf file.") {Class = "content"});
    doc.Add(new PageBreak());
}

// generate PDF
using (Stream stream = File.Create("out.pdf"))
{
    doc.Write(stream, resourceManager);
}

Process.Start("out.pdf");
// register doc's resources first
ResourceManager resourceManager = new ResourceManager();
resourceManager.RegisterResource(new Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"));

// create document
FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};

// register styles
doc.StyleManager.RegisterStyle(".pageHeader",new Style(){Font = new Font(StandardFonts.TimesBold, 20)});
doc.StyleManager.RegisterStyle(".pageFooter",new Style(){Align = Align.Right});
doc.StyleManager.RegisterStyle("hr",new Style(){Height = 2, Margin = new Thickness(0,5,0,5)});
doc.StyleManager.RegisterStyle(".content",new Style(){Align = Align.Left, Display = Display.InlineBlock});

// fill the header section
doc.PageHeader.Class = "pageHeader";
doc.PageHeader.Add(new Image("logo"){Width = 100, Height = 50});
doc.PageHeader.Add(new TextBlock("This document is intended for internal use only"){TextIndent = 20});
doc.PageHeader.Add(new Hr());

// fill the footer section
doc.PageFooter.Class = "pageFooter";
doc.PageFooter.Add(new Hr());
doc.PageFooter.Add(new TextBlock((ctx)=>string.Format("Page {0} from&nbsp;",ctx.CurrentPage+1)));
doc.PageFooter.Add(new PageCount(3){Display = Display.Inline});

// add pages
for (int i = 0; i < 2; ++i)
{
    doc.Add(new TextBlock("This is header and footer generation pdf file.") {Class = "content"});
    doc.Add(new PageBreak());
}

// generate PDF
using (Stream stream = File.Create("out.pdf"))
{
    doc.Write(stream, resourceManager);
}

Process.Start("out.pdf");
' register doc's resources first
Dim resourceManager As New ResourceManager()
resourceManager.RegisterResource(New Apitron.PDF.Kit.FixedLayout.Resources.XObjects.Image("logo","../../data/logo.png"))

' create document
Dim doc As New FlowDocument() With {.Margin = New Thickness(10)}

' register styles
doc.StyleManager.RegisterStyle(".pageHeader",New Style() With {.Font = New Font(StandardFonts.TimesBold, 20)})
doc.StyleManager.RegisterStyle(".pageFooter",New Style() With {.Align = Align.Right})
doc.StyleManager.RegisterStyle("hr",New Style() With {
	.Height = 2,
	.Margin = New Thickness(0,5,0,5)
})
doc.StyleManager.RegisterStyle(".content",New Style() With {
	.Align = Align.Left,
	.Display = Display.InlineBlock
})

' fill the header section
doc.PageHeader.Class = "pageHeader"
doc.PageHeader.Add(New Image("logo") With {
	.Width = 100,
	.Height = 50
})
doc.PageHeader.Add(New TextBlock("This document is intended for internal use only") With {.TextIndent = 20})
doc.PageHeader.Add(New Hr())

' fill the footer section
doc.PageFooter.Class = "pageFooter"
doc.PageFooter.Add(New Hr())
doc.PageFooter.Add(New TextBlock(Function(ctx) String.Format("Page {0} from&nbsp;",ctx.CurrentPage+1)))
doc.PageFooter.Add(New PageCount(3) With {.Display = Display.Inline})

' add pages
For i As Integer = 0 To 1
	doc.Add(New TextBlock("This is header and footer generation pdf file.") With {.Class = "content"})
	doc.Add(New PageBreak())
Next i

' generate PDF
Using stream As Stream = File.Create("out.pdf")
	doc.Write(stream, resourceManager)
End Using

Process.Start("out.pdf")
VB   C#

輸出如下:

IronPDF 與 Apitron PDF SDK .NET 的比較 - 圖7:Apitron 頁首和頁尾

Apitron 頁首和頁尾

5. 數位簽署 PDF

5.1. 使用IronPDF

PDF 處理功能中最重要的之一是能夠以數位方式簽署 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 *****/

// 1. Create a PDF
var Renderer = new IronPdf.ChromePdfRenderer();
var doc = Renderer.RenderHtmlAsPdf("<h1>Testing 2048 bit digital security</h1>");

// 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");

// 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png");

// 4. Sign the PDF with the PdfSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature);

// 5. 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 *****/

// 1. Create a PDF
var Renderer = new IronPdf.ChromePdfRenderer();
var doc = Renderer.RenderHtmlAsPdf("<h1>Testing 2048 bit digital security</h1>");

// 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");

// 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png");

// 4. Sign the PDF with the PdfSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature);

// 5. 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 ****

' 1. Create a PDF
Dim Renderer = New IronPdf.ChromePdfRenderer()
Dim doc = Renderer.RenderHtmlAsPdf("<h1>Testing 2048 bit digital security</h1>")

' 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")

' 3. Handwritten signature graphic
signature.LoadSignatureImageFromFile("handwriting.png")

' 4. Sign the PDF with the PdfSignature. Multiple signing certificates may be used
doc.SignPdfWithDigitalSignature(signature)

' 5. The PDF is not signed until saved to file, stream or byte array.
doc.SaveAs("signed.pdf")
VB   C#

5.2 使用 Apitron PDF Kit

使用 Apitron PDF Kit 在 PDF 上蓋上簽名是一個既耗時又技術性的過程。

static void Main(string [] args)
{
    string fileName = "signedTwice.pdf";

    using (Stream stream = File.Create(fileName))
   {
        FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};
        doc.Add(new TextBlock("Signed using Apitron PDF Kit for .NET"));
        doc.Write(stream,new ResourceManager());
   }

    // save
    Sign(fileName, "../../data/certs/JohnDoe.pfx", "password", "../../data/images/signatureImage.png", new Boundary(10, 750, 110, 800));
}

// Implementation of Sign Method
private static void Sign(string pathToDocument, string pathToCertificate, string password, string pathToSignatureImage, Boundary signatureViewLocation)
{
    // open existing document and sign once
    using (Stream inputStream = new FileStream(pathToDocument, FileMode.Open, FileAccess.ReadWrite))
    {
        using (FixedDocument doc = new FixedDocument(inputStream))
        {
            string imageResourceId = Guid.NewGuid().ToString("N");
            string signatureFieldId = Guid.NewGuid().ToString("N");

            // register signature image resource
            doc.ResourceManager.RegisterResource(new Image(imageResourceId, pathToSignatureImage));

            // create first signature field and initialize it using a stored certificate
            SignatureField signatureField = new SignatureField(signatureFieldId);
            using (Stream signatureDataStream = File.OpenRead(pathToCertificate))
            {
                signatureField.Signature = Signature.Create(new Pkcs12Store(signatureDataStream,password));
            }

            // add signature fields to the document
            doc.AcroForm.Fields.Add(signatureField);

            // create first signature view using the image resource
            SignatureFieldView signatureView = new SignatureFieldView(signatureField, signatureViewLocation);
            signatureView.ViewSettings.Graphic = Graphic.Image;
            signatureView.ViewSettings.GraphicResourceID = imageResourceId;
            signatureView.ViewSettings.Description = Description.None;

            // add views to page annotations collection
            doc.Pages [0].Annotations.Add(signatureView);

            // save as incremental update
            doc.Save();
        }
    }
}
static void Main(string [] args)
{
    string fileName = "signedTwice.pdf";

    using (Stream stream = File.Create(fileName))
   {
        FlowDocument doc = new FlowDocument(){Margin = new Thickness(10)};
        doc.Add(new TextBlock("Signed using Apitron PDF Kit for .NET"));
        doc.Write(stream,new ResourceManager());
   }

    // save
    Sign(fileName, "../../data/certs/JohnDoe.pfx", "password", "../../data/images/signatureImage.png", new Boundary(10, 750, 110, 800));
}

// Implementation of Sign Method
private static void Sign(string pathToDocument, string pathToCertificate, string password, string pathToSignatureImage, Boundary signatureViewLocation)
{
    // open existing document and sign once
    using (Stream inputStream = new FileStream(pathToDocument, FileMode.Open, FileAccess.ReadWrite))
    {
        using (FixedDocument doc = new FixedDocument(inputStream))
        {
            string imageResourceId = Guid.NewGuid().ToString("N");
            string signatureFieldId = Guid.NewGuid().ToString("N");

            // register signature image resource
            doc.ResourceManager.RegisterResource(new Image(imageResourceId, pathToSignatureImage));

            // create first signature field and initialize it using a stored certificate
            SignatureField signatureField = new SignatureField(signatureFieldId);
            using (Stream signatureDataStream = File.OpenRead(pathToCertificate))
            {
                signatureField.Signature = Signature.Create(new Pkcs12Store(signatureDataStream,password));
            }

            // add signature fields to the document
            doc.AcroForm.Fields.Add(signatureField);

            // create first signature view using the image resource
            SignatureFieldView signatureView = new SignatureFieldView(signatureField, signatureViewLocation);
            signatureView.ViewSettings.Graphic = Graphic.Image;
            signatureView.ViewSettings.GraphicResourceID = imageResourceId;
            signatureView.ViewSettings.Description = Description.None;

            // add views to page annotations collection
            doc.Pages [0].Annotations.Add(signatureView);

            // save as incremental update
            doc.Save();
        }
    }
}
Shared Sub Main(ByVal args() As String)
	Dim fileName As String = "signedTwice.pdf"

	Using stream As Stream = File.Create(fileName)
		Dim doc As New FlowDocument() With {.Margin = New Thickness(10)}
		doc.Add(New TextBlock("Signed using Apitron PDF Kit for .NET"))
		doc.Write(stream,New ResourceManager())
	End Using

	' save
	Sign(fileName, "../../data/certs/JohnDoe.pfx", "password", "../../data/images/signatureImage.png", New Boundary(10, 750, 110, 800))
End Sub

' Implementation of Sign Method
Private Shared Sub Sign(ByVal pathToDocument As String, ByVal pathToCertificate As String, ByVal password As String, ByVal pathToSignatureImage As String, ByVal signatureViewLocation As Boundary)
	' open existing document and sign once
	Using inputStream As Stream = New FileStream(pathToDocument, FileMode.Open, FileAccess.ReadWrite)
		Using doc As New FixedDocument(inputStream)
			Dim imageResourceId As String = Guid.NewGuid().ToString("N")
			Dim signatureFieldId As String = Guid.NewGuid().ToString("N")

			' register signature image resource
			doc.ResourceManager.RegisterResource(New Image(imageResourceId, pathToSignatureImage))

			' create first signature field and initialize it using a stored certificate
			Dim signatureField As New SignatureField(signatureFieldId)
			Using signatureDataStream As Stream = File.OpenRead(pathToCertificate)
				signatureField.Signature = Signature.Create(New Pkcs12Store(signatureDataStream,password))
			End Using

			' add signature fields to the document
			doc.AcroForm.Fields.Add(signatureField)

			' create first signature view using the image resource
			Dim signatureView As New SignatureFieldView(signatureField, signatureViewLocation)
			signatureView.ViewSettings.Graphic = Graphic.Image
			signatureView.ViewSettings.GraphicResourceID = imageResourceId
			signatureView.ViewSettings.Description = Description.None

			' add views to page annotations collection
			doc.Pages (0).Annotations.Add(signatureView)

			' save as incremental update
			doc.Save()
		End Using
	End Using
End Sub
VB   C#

對於這些庫,輸出幾乎相同。 您可以清楚地看到,IronPDF在操作PDF內容方面更簡單且更方便。 輸出 PDF 已使用證書簽名,並在上面打印簽名。

6. 價格和授權

IronPDF 價格和授權

IronPDF 是一個 C# 庫,開發時可免費使用,並隨時可取得商業使用授權。單一開發者、代理商、多國組織以及 SaaS 和 OEM 重新分發的專案授權都可取得。 所有授權均提供30天退款保證、一年支援與升級、開發/測試/生產有效性,以及永久授權。(一次性購買).

Lite 套件的價格為 $749,無需經常性費用。 更多詳細資訊和選擇最佳授權的協助,請參閱IronPDF 產品授權頁面.

IronPDF 與 Apitron PDF SDK .NET 的比較 - 圖 8:IronPDF 許可證

IronPDF 授權

Apitron PDF Kit 價格和授權

目前有兩種授權計畫在使用-現代計畫和傳統計畫。 如果您已經擁有許可證,那麼舊的許可證方案會在您的許可證到期前繼續有效。 之後,您需要聯繫客戶支援以進行過渡。 如果您是新客戶,現代授權方案才適用於您。

在現代方案下,有三個授權等級:

  • 評估 - 三個月的評估期以使用功能完整的產品。 只需從 NuGet 下載套件並開始開發。
  • 社群 - 在您的非商業項目中免費使用全功能產品。 需要批准。
  • 商業 - 任何在上面未描述的使用情況。 定價取決於使用模式。

    如需購買的更多詳細信息,您可以聯繫Apitron銷售代表.

結論

IronPDF庫可以從HTML、JS、CSS、JPG、PNG、GIF和SVG等文件類型創建像素完美的PDF。 Chromium 引擎有助於將 HTML 文件或 URL 呈現為完美的 PDF 輸出。

Apitron 讓您使用固定佈局 API 來創建 PDF,實現與 100% PDF 規範相容。 作為一種類似於HTML和CSS的風格驅動內容生成方法,此固定版面API為您提供在幾分鐘內創建精美報告、賬單、目錄等的能力。 它還支持建立 XML 模板。

Apitron PDF 的授權價格不在他們的網站上提供。您需要聯繫支持以根據您的使用情況獲取報價。 另一方面,IronPDF 在其網站上展示了非常清晰的授權套餐。這使得 IronPDF 從競爭對手中脫穎而出,並讓用戶能夠根據需求明智地選擇。

使用 IronPDF,您可以比使用 Apitron PDF 更輕鬆地處理 PDF 文件。 IronPDF 允許使用者在處理複雜的 PDF 任務時編寫較少的代碼行。 IronPDF 提供多種方法從多種文件類型生成 PDF,而 Apitron 只能將 XML 文件轉換為 PDF 文件。 與Apitron相比,IronPDF在不添加任何技術選項的情況下即可實現完美輸出。

所有 Iron Software 的客戶都可以選擇以兩個產品的價格購買該公司五個產品中的全部。 嘗試IronPDF 提供 30 天免費試用以測試其完整功能。 購買完整套裝的 Iron Software 產品在 IronSoftware.com.

< 上一頁
Telerik HTML 轉 PDF 生成器 與 IronPDF
下一個 >
IronPDF 與 GroupDocs 的比較

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >