產品比較

iTextSharp C# HTML 轉 PDF 的 .NET Core 替代方案

發佈 2024年10月23日
分享:

IronPDF 和iText 7 (前稱為iTextSharp)均提供生成、操作和在 .NET 和 .NET Core 中列印 PDF.

哪個C# PDF程式庫最適合您的 .NET 專案的是哪一個? 本文的目標是幫助讀者做出正確且明智的決定。

IronPDF 是一個傑出的 .NET PDF 庫,讓開發人員能夠輕鬆地創建、修改和互動處理 PDF 文件。 它支持各種 .NET 環境,包括 .NET Core、.NET 8、7、6 和 Framework,具有高度的多功能性。IronPDF 的主要功能包括 HTML 轉換為 PDF、合併 PDF、加密和電子簽名。 文件使用者友好,技術支援強大。

iTextSharp 是一個強大的 .NET 平台 PDF 庫,最初源自 iText。(基於 Java 的). 它提供企業級解決方案來創建和操作 PDF,並可在開源下使用。(AGPL)和商業授權。 iTextSharp 核心庫提供高度的靈活性,允許開發人員從頭開始創建 PDF、管理表單、應用數字簽名、增加 PDF 功能等。

跨平台相容性

IronPDF 是:

  • .NET 優先
  • 公開商業化並已公佈定價
  • 專注於從 HTML 渲染 PDF,讓開發人員無需學習 PDF 的工作原理。
  • 對於務實的程式設計師來說,這是一個完成工作的絕佳選擇。

    iText(iTextSharp)是:

  • Java優先
  • 非常開源。 我們可以聯絡他們,詢問關於非嚴格開源 AGLP 專案使用的報價。
  • 專注於使用基於 PDF 內部運作方式的程式化 API 來呈現 PDF。
  • 非常適合用於免費和學術項目

    IronPDF支持廣泛的平台和環境,確保在各種系統中無縫整合和部署:

    iTextSharp已存在至少 6 年,基於名為 iText 的開源 Java 代碼庫,並且仍然帶有一些 Java 的風格。 最初學習 Java 的開發者可能會覺得這個庫很熟悉。

    IronPDF 是一個 .NET 為主的資料庫,其 API 旨在於 Visual Studio 中易於使用。 .NET已經存在了將近20年,不斷成長和擴展,開啟了許多可能性,而IronPDF正是為了利用這些可能性而設計的。 它允許我們在 .NET 框架專案中創建和操作 PDF 文件。 您可以下載 IronPDF 作為一款適用於 iTextSharp 使用者的替代 PDF 函式庫.

  • .NET Core(8, 7, 6, 5, 和 3.1+)
  • .NET Standard(2.0+)
  • .NET Framework(4.6.2+)
  • 應用環境: IronPDF 適用於 Windows、Linux、Mac、Docker、Azure 和 AWS 等應用環境。
  • IDEs: 支援使用 Microsoft Visual Studio 和 JetBrains Rider & ReSharper 等 IDEs。
  • 作業系統和處理器: 支援多種不同的作業系統和處理器,包括 Windows、Mac、Linux、x64、x86、ARM

iTextSharp:

  • .NET 版本:支持 .NET Core(2.x, 3.x).NET 框架(4.6.1+),.NET 5+。
  • 應用環境:運行於 Windows、macOS、Linux 和 Docker。
  • 開源:在 AGPL 授權下提供。

關鍵功能比較:IronPDF vs. iTextSharp

IronPDF和iTextSharp都提供了一系列功能和工具,可用於處理PDF文件; 接下來的這一部分將著重於深入瞭解這些功能,以及這兩個庫在執行不同PDF相關任務時的比較。

IronPDF

  • HTML 轉 PDF 轉換:支持 HTML、CSS、JavaScript 和圖像。
  • PDF 文件操作:分割並合併文件,修改格式並編輯現有的 PDF 文件
  • 安全:PDF 加密與解密。
  • 編輯:添加註釋、書籤和大綱。
  • 模板:套用頁首、頁尾和頁碼。
  • 水印:輕鬆將文字和圖像水印應用於PDF文件; 利用其 HTML/CSS 的使用來全面控制流程。
  • PDF 加蓋: 使用 IronPDF 在您的 PDF 文件上加蓋圖像和文字。

    欲了解 IronPDF 所提供的廣泛功能的更多資訊,請造訪IronPDF 功能頁面.

iTextSharp:

  • PDF 創建:支持從頭開始創建 PDF 文件。
  • 表單:建立和編輯 PDF 表單。
  • 數位簽章:簽署 PDF 文件。
  • 壓縮:優化 PDF 文件大小。
  • 內容擷取:從PDF中擷取文字和圖像。
  • 開源:在 AGPL 授權下提供。
  • 自訂性:高度定制化以滿足進階使用案例。

IronPDF 與 iTextSharp 之間的 PDF 功能特性比較

HTML 轉 PDF

轉換將 HTML 內容轉換為 PDF是一項在許多不同辦公室和工作空間中進行的非常簡單的任務。 以下是 IronPDF 和 iText 在處理此過程時的程式碼範例比較。

IronPDF

using IronPdf;

// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");

// Advanced Example with HTML Assets
// Load external html assets: images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
using IronPdf;

// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");

// Advanced Example with HTML Assets
// Load external html assets: images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
Imports IronPdf

' Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = True

' Instantiate Renderer
Dim renderer = New ChromePdfRenderer()

' Create a PDF from an HTML string using C#
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")

' Advanced Example with HTML Assets
' 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 myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", "C:\site\assets\")
myAdvancedPdf.SaveAs("html-with-assets.pdf")
VB   C#

iTextSharp

using iText.Html2pdf;

static void Main(string[] args)
  {
    using (FileStream htmlSource = File.Open("input.html", FileMode.Open))
    using (FileStream pdfDest = File.Open("output.pdf", FileMode.Create))
    {
        ConverterProperties converterProperties = new ConverterProperties();
        HtmlConverter.ConvertToPdf(htmlSource, pdfDest, converterProperties);
    }
  }
using iText.Html2pdf;

static void Main(string[] args)
  {
    using (FileStream htmlSource = File.Open("input.html", FileMode.Open))
    using (FileStream pdfDest = File.Open("output.pdf", FileMode.Create))
    {
        ConverterProperties converterProperties = new ConverterProperties();
        HtmlConverter.ConvertToPdf(htmlSource, pdfDest, converterProperties);
    }
  }
Imports iText.Html2pdf

Shared Sub Main(ByVal args() As String)
	Using htmlSource As FileStream = File.Open("input.html", FileMode.Open)
	Using pdfDest As FileStream = File.Open("output.pdf", FileMode.Create)
		Dim converterProperties As New ConverterProperties()
		HtmlConverter.ConvertToPdf(htmlSource, pdfDest, converterProperties)
	End Using
	End Using
End Sub
VB   C#

在將 HTML 轉換為 PDF 時,IronPDF 提供了一個簡潔且方便的工具來執行此任務。 利用 ChromePdfRenderer 將 HTML 內容轉換為 PDF,IronPDF 在為用戶提供像素完美的 PDF 文件方面表現出色。 用戶可以直接從 HTML 字串建立 PDF,如第一個範例所示,或在高級範例中藉由可選的基準路徑包括外部資產,如圖像。 另一方面,iTextSharp 使用 HtmlConverter 來轉換 HTML 文件,但該過程需要更多的設置。

加密 PDF 文件

加密在許多工作場所中,PDF文件的加密和解密是至關重要的。 要輕鬆處理此任務,必須擁有一個可以方便執行的工具。 在下面的程式碼中,我們將看到iTextSharp和IronPDF如何處理PDF的加密。

IronPDF

using IronPdf;
using System;

// Open an Encrypted File, alternatively create a new PDF from Html
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;

// Edit file security settings
// The following code makes a PDF read only and will disallow copy & paste and printing
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;

// change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
using IronPdf;
using System;

// Open an Encrypted File, alternatively create a new PDF from Html
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;

// Edit file security settings
// The following code makes a PDF read only and will disallow copy & paste and printing
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;

// change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
Imports IronPdf
Imports System

' Open an Encrypted File, alternatively create a new PDF from Html
Private pdf = PdfDocument.FromFile("encrypted.pdf", "password")

' Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto"
pdf.MetaData.Keywords = "SEO, Friendly"
pdf.MetaData.ModifiedDate = DateTime.Now

' Edit file security settings
' The following code makes a PDF read only and will disallow copy & paste and printing
pdf.SecuritySettings.RemovePasswordsAndEncryption()
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key")
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserFormData = False
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights

' change or set the document encryption password
pdf.Password = "my-password"
pdf.SaveAs("secured.pdf")
VB   C#

iTextSharp

using System;
using System.IO;
using System.Text;
using iText.Kernel.Pdf;

public class EncryptPdf
    {
        public static readonly String DEST = "results/sandbox/security/encrypt_pdf.pdf";
        public static readonly String SRC = "../../../resources/pdfs/hello.pdf";

        public static readonly String OWNER_PASSWORD = "World";
        public static readonly String USER_PASSWORD = "Hello";

        public static void Main(String[] args)
        {
            FileInfo file = new FileInfo(DEST);
            file.Directory.Create();

            new EncryptPdf().ManipulatePdf(DEST);
        }

        protected void ManipulatePdf(String dest)
        {
            PdfDocument document = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest,
                new WriterProperties().SetStandardEncryption(
                    Encoding.UTF8.GetBytes(USER_PASSWORD),
                    Encoding.UTF8.GetBytes(OWNER_PASSWORD),
                    EncryptionConstants.ALLOW_PRINTING,
                    EncryptionConstants.ENCRYPTION_AES_128 
 EncryptionConstants.DO_NOT_ENCRYPT_METADATA
                )));
            document.Close();
        }
    }
using System;
using System.IO;
using System.Text;
using iText.Kernel.Pdf;

public class EncryptPdf
    {
        public static readonly String DEST = "results/sandbox/security/encrypt_pdf.pdf";
        public static readonly String SRC = "../../../resources/pdfs/hello.pdf";

        public static readonly String OWNER_PASSWORD = "World";
        public static readonly String USER_PASSWORD = "Hello";

        public static void Main(String[] args)
        {
            FileInfo file = new FileInfo(DEST);
            file.Directory.Create();

            new EncryptPdf().ManipulatePdf(DEST);
        }

        protected void ManipulatePdf(String dest)
        {
            PdfDocument document = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest,
                new WriterProperties().SetStandardEncryption(
                    Encoding.UTF8.GetBytes(USER_PASSWORD),
                    Encoding.UTF8.GetBytes(OWNER_PASSWORD),
                    EncryptionConstants.ALLOW_PRINTING,
                    EncryptionConstants.ENCRYPTION_AES_128 
 EncryptionConstants.DO_NOT_ENCRYPT_METADATA
                )));
            document.Close();
        }
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

IronPDF 為使用者提供了簡單的方法來加密 PDF 文件,同時也讓使用者在過程中擁有充足的控制,包括編輯元數據及調整安全設置,例如將文件設為唯讀或限制使用者動作,如複製和貼上。 另一方面,iTextSharp 提供更細緻的控制,但需要額外的配置,例如指定加密標準和權限。

編輯 PDF 內容

偶爾在處理機密或私人信息時,可能需要編輯PDF文件部分。以下範例展示了如何使用IronPDF對比iTextSharp消除文本。

IronPDF

using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("novel.pdf");

// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");

pdf.SaveAs("redacted.pdf");
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("novel.pdf");

// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");

pdf.SaveAs("redacted.pdf");
Imports IronPdf

Private pdf As PdfDocument = PdfDocument.FromFile("novel.pdf")

' Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are")

pdf.SaveAs("redacted.pdf")
VB   C#

iTextSharp

using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using iText.Kernel.Colors;

string src = "input.pdf";
string dest = "output_redacted.pdf";

using (PdfReader reader = new PdfReader(src))
            {
                using (PdfWriter writer = new PdfWriter(dest))
                {
                    using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
                    {
                        // Iterate through each page
                        for (int pageNum = 1; pageNum <= pdfDoc.GetNumberOfPages(); pageNum++)
                        {
                            PdfPage page = pdfDoc.GetPage(pageNum);
                            PdfCanvas canvas = new PdfCanvas(page);
                            Rectangle[] rectanglesToRedact = { new Rectangle(100, 100, 200, 50) }; // Example: Define rectangles to redact

                            // Overlay black rectangles to simulate redaction
                            foreach (Rectangle rect in rectanglesToRedact)
                            {
                                canvas.SetFillColor(ColorConstants.BLACK)
                                    .Rectangle(rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight())
                                    .Fill();
                            }
                        }
                    }
                }
using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using iText.Kernel.Colors;

string src = "input.pdf";
string dest = "output_redacted.pdf";

using (PdfReader reader = new PdfReader(src))
            {
                using (PdfWriter writer = new PdfWriter(dest))
                {
                    using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
                    {
                        // Iterate through each page
                        for (int pageNum = 1; pageNum <= pdfDoc.GetNumberOfPages(); pageNum++)
                        {
                            PdfPage page = pdfDoc.GetPage(pageNum);
                            PdfCanvas canvas = new PdfCanvas(page);
                            Rectangle[] rectanglesToRedact = { new Rectangle(100, 100, 200, 50) }; // Example: Define rectangles to redact

                            // Overlay black rectangles to simulate redaction
                            foreach (Rectangle rect in rectanglesToRedact)
                            {
                                canvas.SetFillColor(ColorConstants.BLACK)
                                    .Rectangle(rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight())
                                    .Fill();
                            }
                        }
                    }
                }
Imports System
Imports System.IO
Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.Layout.Element
Imports iText.Layout.Properties
Imports iText.Kernel.Colors

Private src As String = "input.pdf"
Private dest As String = "output_redacted.pdf"

Using reader As New PdfReader(src)
				Using writer As New PdfWriter(dest)
					Using pdfDoc As New PdfDocument(reader, writer)
						' Iterate through each page
						Dim pageNum As Integer = 1
						Do While pageNum <= pdfDoc.GetNumberOfPages()
							Dim page As PdfPage = pdfDoc.GetPage(pageNum)
							Dim canvas As New PdfCanvas(page)
							Dim rectanglesToRedact() As Rectangle = { New Rectangle(100, 100, 200, 50) } ' Example: Define rectangles to redact

							' Overlay black rectangles to simulate redaction
							For Each rect As Rectangle In rectanglesToRedact
								canvas.SetFillColor(ColorConstants.BLACK).Rectangle(rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight()).Fill()
							Next rect
							pageNum += 1
						Loop
					End Using
				End Using
VB   C#

IronPDF 的修訂工具精簡且易於使用,只需幾行程式碼即可精簡修訂過程。 這有助於提高 PDF 編輯任務的效率,並為用戶提供輕鬆保護其敏感和私人數據的方式。

另一方面,iTextSharp 缺乏內建的編輯功能,您需要手動在想要編輯的內容上繪製黑色矩形。 然而,這種方法可能會使矩形下的文字變得可存取,允許用戶複製貼上隱藏的資料,因此無法提供真正的刪除。

簽署 PDF 文件

能夠標誌將數位文件(例如 PDF 檔案)自動化處理可能會節省時間。 以下程式碼片段比較 IronPDFiTextSharp 如何處理數位簽章。

IronPDF

using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);

// Create PdfSignature object
var sig = new PdfSignature(cert);

// Sign PDF document
PdfDocument pdf = PdfDocument.FromFile("document.pdf");
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);

// Create PdfSignature object
var sig = new PdfSignature(cert);

// Sign PDF document
PdfDocument pdf = PdfDocument.FromFile("document.pdf");
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates

' Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
Private cert As New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)

' Create PdfSignature object
Private sig = New PdfSignature(cert)

' Sign PDF document
Private pdf As PdfDocument = PdfDocument.FromFile("document.pdf")
pdf.Sign(sig)
pdf.SaveAs("signed.pdf")
VB   C#

iTextSharp

using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Signatures;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.X509;

class Program
{
    static void Main(string[] args)
    {
        string src = "input.pdf";
        string dest = "output_signed.pdf";
        string pfxFile = "your_certificate.pfx";
        string pfxPassword = "your_password";

        try
        {
            // Load your certificate
            Pkcs12Store ks = new Pkcs12Store(new FileStream(pfxFile, FileMode.Open), pfxPassword.ToCharArray());
            string alias = null;
            foreach (string al in ks.Aliases)
            {
                if (ks.IsKeyEntry(al))
                {
                    alias = al;
                    break;
                }
            }
            ICipherParameters pk = ks.GetKey(alias).Key;
            X509CertificateEntry[] chain = ks.GetCertificateChain(alias);
            X509Certificate2 cert = new X509Certificate2(chain[0].Certificate.GetEncoded());

            // Create output PDF with signed content
            using (PdfReader reader = new PdfReader(src))
            {
                using (PdfWriter writer = new PdfWriter(dest))
                {
                    using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
                    {
                        // Create the signer
                        PdfSigner signer = new PdfSigner(pdfDoc, writer, new StampingProperties().UseAppendMode());

                        // Configure signature appearance
                        PdfSignatureAppearance appearance = signer.GetSignatureAppearance();
                        appearance.SetReason("Digital Signature");
                        appearance.SetLocation("Your Location");
                        appearance.SetContact("Your Contact");

                        // Create signature
                        IExternalSignature pks = new PrivateKeySignature(pk, "SHA-256");
                        signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
                    }
                }
            }
            Console.WriteLine($"PDF digitally signed successfully: {dest}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error signing PDF: {ex.Message}");
        }
    }
}
using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Signatures;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.X509;

class Program
{
    static void Main(string[] args)
    {
        string src = "input.pdf";
        string dest = "output_signed.pdf";
        string pfxFile = "your_certificate.pfx";
        string pfxPassword = "your_password";

        try
        {
            // Load your certificate
            Pkcs12Store ks = new Pkcs12Store(new FileStream(pfxFile, FileMode.Open), pfxPassword.ToCharArray());
            string alias = null;
            foreach (string al in ks.Aliases)
            {
                if (ks.IsKeyEntry(al))
                {
                    alias = al;
                    break;
                }
            }
            ICipherParameters pk = ks.GetKey(alias).Key;
            X509CertificateEntry[] chain = ks.GetCertificateChain(alias);
            X509Certificate2 cert = new X509Certificate2(chain[0].Certificate.GetEncoded());

            // Create output PDF with signed content
            using (PdfReader reader = new PdfReader(src))
            {
                using (PdfWriter writer = new PdfWriter(dest))
                {
                    using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
                    {
                        // Create the signer
                        PdfSigner signer = new PdfSigner(pdfDoc, writer, new StampingProperties().UseAppendMode());

                        // Configure signature appearance
                        PdfSignatureAppearance appearance = signer.GetSignatureAppearance();
                        appearance.SetReason("Digital Signature");
                        appearance.SetLocation("Your Location");
                        appearance.SetContact("Your Contact");

                        // Create signature
                        IExternalSignature pks = new PrivateKeySignature(pk, "SHA-256");
                        signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
                    }
                }
            }
            Console.WriteLine($"PDF digitally signed successfully: {dest}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error signing PDF: {ex.Message}");
        }
    }
}
Imports System
Imports System.IO
Imports iText.Kernel.Pdf
Imports iText.Signatures
Imports Org.BouncyCastle.Crypto
Imports Org.BouncyCastle.Pkcs
Imports Org.BouncyCastle.X509

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim src As String = "input.pdf"
		Dim dest As String = "output_signed.pdf"
		Dim pfxFile As String = "your_certificate.pfx"
		Dim pfxPassword As String = "your_password"

		Try
			' Load your certificate
			Dim ks As New Pkcs12Store(New FileStream(pfxFile, FileMode.Open), pfxPassword.ToCharArray())
			Dim [alias] As String = Nothing
			For Each al As String In ks.Aliases
				If ks.IsKeyEntry(al) Then
					[alias] = al
					Exit For
				End If
			Next al
			Dim pk As ICipherParameters = ks.GetKey([alias]).Key
			Dim chain() As X509CertificateEntry = ks.GetCertificateChain([alias])
			Dim cert As New X509Certificate2(chain(0).Certificate.GetEncoded())

			' Create output PDF with signed content
			Using reader As New PdfReader(src)
				Using writer As New PdfWriter(dest)
					Using pdfDoc As New PdfDocument(reader, writer)
						' Create the signer
						Dim signer As New PdfSigner(pdfDoc, writer, (New StampingProperties()).UseAppendMode())

						' Configure signature appearance
						Dim appearance As PdfSignatureAppearance = signer.GetSignatureAppearance()
						appearance.SetReason("Digital Signature")
						appearance.SetLocation("Your Location")
						appearance.SetContact("Your Contact")

						' Create signature
						Dim pks As IExternalSignature = New PrivateKeySignature(pk, "SHA-256")
						signer.SignDetached(pks, chain, Nothing, Nothing, Nothing, 0, PdfSigner.CryptoStandard.CMS)
					End Using
				End Using
			End Using
			Console.WriteLine($"PDF digitally signed successfully: {dest}")
		Catch ex As Exception
			Console.WriteLine($"Error signing PDF: {ex.Message}")
		End Try
	End Sub
End Class
VB   C#

在對 PDF 文件進行數位簽名時,IronPDF 提供了一個精簡但功能強大的工具來完成此過程。 其簡單性使流程能夠快速進行,為任何開發人員節省時間,以滿足他們的簽署需求。 相較之下,iTextSharp需要更多的設置,並涉及額外的步驟來處理數位簽章,使其更為複雜,但對進階使用者來說可能有更高的靈活性。

將浮水印應用於 PDF 文件

添加和自訂的能力浮水印通過軟體處理 PDF 可以大大幫助保密、版權保護、品牌塑造或任何涉及敏感資訊的任務。 以下是 IronPDF 和 iTextSharp 如何將浮水印應用於 PDF 文件的比較。

IronPDF

using IronPdf;

// Stamps a Watermark onto a new or existing PDF
var renderer = new ChromePdfRenderer();

var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
using IronPdf;

// Stamps a Watermark onto a new or existing PDF
var renderer = new ChromePdfRenderer();

var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
Imports IronPdf

' Stamps a Watermark onto a new or existing PDF
Private renderer = New ChromePdfRenderer()

Private pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center)
pdf.SaveAs("C:\Path\To\Watermarked.pdf")
VB   C#

iTextSharp

using iText.IO.Font;
using iText.IO.Font.Constants;
using iText.Kernel.Colors;
using iText.Kernel.Font;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Kernel.Pdf.Extgstate;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;

public class TransparentWatermark 
    {
        public static readonly String DEST = "results/sandbox/stamper/transparent_watermark.pdf";
        public static readonly String SRC = "../../../resources/pdfs/hero.pdf";

        public static void Main(String[] args) 
        {
            FileInfo file = new FileInfo(DEST);
            file.Directory.Create();

            new TransparentWatermark().ManipulatePdf(DEST);
        }

        protected void ManipulatePdf(String dest) 
        {
            PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
            PdfCanvas under = new PdfCanvas(pdfDoc.GetFirstPage().NewContentStreamBefore(), new PdfResources(), pdfDoc);
            PdfFont font = PdfFontFactory.CreateFont(FontProgramFactory.CreateFont(StandardFonts.HELVETICA));
            Paragraph paragraph = new Paragraph("This watermark is added UNDER the existing content")
                    .SetFont(font)
                    .SetFontSize(15);

            Canvas canvasWatermark1 = new Canvas(under, pdfDoc.GetDefaultPageSize())
                    .ShowTextAligned(paragraph, 297, 550, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
            canvasWatermark1.Close();
            PdfCanvas over = new PdfCanvas(pdfDoc.GetFirstPage());
            over.SetFillColor(ColorConstants.BLACK);
            paragraph = new Paragraph("This watermark is added ON TOP OF the existing content")
                    .SetFont(font)
                    .SetFontSize(15);

            Canvas canvasWatermark2 = new Canvas(over, pdfDoc.GetDefaultPageSize())
                    .ShowTextAligned(paragraph, 297, 500, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
            canvasWatermark2.Close();
            paragraph = new Paragraph("This TRANSPARENT watermark is added ON TOP OF the existing content")
                    .SetFont(font)
                    .SetFontSize(15);
            over.SaveState();

            // Creating a dictionary that maps resource names to graphics state parameter dictionaries
            PdfExtGState gs1 = new PdfExtGState();
            gs1.SetFillOpacity(0.5f);
            over.SetExtGState(gs1);
            Canvas canvasWatermark3 = new Canvas(over, pdfDoc.GetDefaultPageSize())
                    .ShowTextAligned(paragraph, 297, 450, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
            canvasWatermark3.Close();
            over.RestoreState();

            pdfDoc.Close();
        }
    }
using iText.IO.Font;
using iText.IO.Font.Constants;
using iText.Kernel.Colors;
using iText.Kernel.Font;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Kernel.Pdf.Extgstate;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;

public class TransparentWatermark 
    {
        public static readonly String DEST = "results/sandbox/stamper/transparent_watermark.pdf";
        public static readonly String SRC = "../../../resources/pdfs/hero.pdf";

        public static void Main(String[] args) 
        {
            FileInfo file = new FileInfo(DEST);
            file.Directory.Create();

            new TransparentWatermark().ManipulatePdf(DEST);
        }

        protected void ManipulatePdf(String dest) 
        {
            PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
            PdfCanvas under = new PdfCanvas(pdfDoc.GetFirstPage().NewContentStreamBefore(), new PdfResources(), pdfDoc);
            PdfFont font = PdfFontFactory.CreateFont(FontProgramFactory.CreateFont(StandardFonts.HELVETICA));
            Paragraph paragraph = new Paragraph("This watermark is added UNDER the existing content")
                    .SetFont(font)
                    .SetFontSize(15);

            Canvas canvasWatermark1 = new Canvas(under, pdfDoc.GetDefaultPageSize())
                    .ShowTextAligned(paragraph, 297, 550, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
            canvasWatermark1.Close();
            PdfCanvas over = new PdfCanvas(pdfDoc.GetFirstPage());
            over.SetFillColor(ColorConstants.BLACK);
            paragraph = new Paragraph("This watermark is added ON TOP OF the existing content")
                    .SetFont(font)
                    .SetFontSize(15);

            Canvas canvasWatermark2 = new Canvas(over, pdfDoc.GetDefaultPageSize())
                    .ShowTextAligned(paragraph, 297, 500, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
            canvasWatermark2.Close();
            paragraph = new Paragraph("This TRANSPARENT watermark is added ON TOP OF the existing content")
                    .SetFont(font)
                    .SetFontSize(15);
            over.SaveState();

            // Creating a dictionary that maps resource names to graphics state parameter dictionaries
            PdfExtGState gs1 = new PdfExtGState();
            gs1.SetFillOpacity(0.5f);
            over.SetExtGState(gs1);
            Canvas canvasWatermark3 = new Canvas(over, pdfDoc.GetDefaultPageSize())
                    .ShowTextAligned(paragraph, 297, 450, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
            canvasWatermark3.Close();
            over.RestoreState();

            pdfDoc.Close();
        }
    }
Imports iText.IO.Font
Imports iText.IO.Font.Constants
Imports iText.Kernel.Colors
Imports iText.Kernel.Font
Imports iText.Kernel.Pdf
Imports iText.Kernel.Pdf.Canvas
Imports iText.Kernel.Pdf.Extgstate
Imports iText.Layout
Imports iText.Layout.Element
Imports iText.Layout.Properties

Public Class TransparentWatermark
		Public Shared ReadOnly DEST As String = "results/sandbox/stamper/transparent_watermark.pdf"
		Public Shared ReadOnly SRC As String = "../../../resources/pdfs/hero.pdf"

		Public Shared Sub Main(ByVal args() As String)
			Dim file As New FileInfo(DEST)
			file.Directory.Create()

			Call (New TransparentWatermark()).ManipulatePdf(DEST)
		End Sub

		Protected Sub ManipulatePdf(ByVal dest As String)
			Dim pdfDoc As New PdfDocument(New PdfReader(SRC), New PdfWriter(dest))
			Dim under As New PdfCanvas(pdfDoc.GetFirstPage().NewContentStreamBefore(), New PdfResources(), pdfDoc)
			Dim font As PdfFont = PdfFontFactory.CreateFont(FontProgramFactory.CreateFont(StandardFonts.HELVETICA))
			Dim paragraph As Paragraph = (New Paragraph("This watermark is added UNDER the existing content")).SetFont(font).SetFontSize(15)

			Dim canvasWatermark1 As Canvas = (New Canvas(under, pdfDoc.GetDefaultPageSize())).ShowTextAligned(paragraph, 297, 550, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0)
			canvasWatermark1.Close()
			Dim over As New PdfCanvas(pdfDoc.GetFirstPage())
			over.SetFillColor(ColorConstants.BLACK)
			paragraph = (New Paragraph("This watermark is added ON TOP OF the existing content")).SetFont(font).SetFontSize(15)

			Dim canvasWatermark2 As Canvas = (New Canvas(over, pdfDoc.GetDefaultPageSize())).ShowTextAligned(paragraph, 297, 500, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0)
			canvasWatermark2.Close()
			paragraph = (New Paragraph("This TRANSPARENT watermark is added ON TOP OF the existing content")).SetFont(font).SetFontSize(15)
			over.SaveState()

			' Creating a dictionary that maps resource names to graphics state parameter dictionaries
			Dim gs1 As New PdfExtGState()
			gs1.SetFillOpacity(0.5F)
			over.SetExtGState(gs1)
			Dim canvasWatermark3 As Canvas = (New Canvas(over, pdfDoc.GetDefaultPageSize())).ShowTextAligned(paragraph, 297, 450, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0)
			canvasWatermark3.Close()
			over.RestoreState()

			pdfDoc.Close()
		End Sub
End Class
VB   C#

IronPDF 簡單直觀的 API 允許用戶快速地對 PDF 文件套用自訂浮水印,同時讓他們在整個過程中擁有完全的控制權。 其利用 HTML/CSS 進一步簡化了過程,同時不失去對自訂的任何控制。 iTextSharp 對於在 PDF 添加水印的方法需要更多的人工操作來完成任務,這可能會減慢過程。

在 PDF 上加上圖像和文字標記

有時需要將 PDF 頁面已加章與內容一樣,類似於需要將浮水印應用於其 PDF 文件的方式。 讓我們看看 IronPDFiTextSharp 的比較:

IronPDF

using IronPdf;
using IronPdf.Editing;

ChromePdfRenderer renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>");

// Create text stamper
TextStamper textStamper = new TextStamper()
{
    Text = "Text Stamper!",
    FontFamily = "Bungee Spice",
    UseGoogleFont = true,
    FontSize = 30,
    IsBold = true,
    IsItalic = true,
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the text stamper
pdf.ApplyStamp(textStamper);
pdf.SaveAs("stampText.pdf");

// Create image stamper
ImageStamper imageStamper = new ImageStamper(new Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg"))
{
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0);
pdf.SaveAs("stampImage.pdf");
using IronPdf;
using IronPdf.Editing;

ChromePdfRenderer renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>");

// Create text stamper
TextStamper textStamper = new TextStamper()
{
    Text = "Text Stamper!",
    FontFamily = "Bungee Spice",
    UseGoogleFont = true,
    FontSize = 30,
    IsBold = true,
    IsItalic = true,
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the text stamper
pdf.ApplyStamp(textStamper);
pdf.SaveAs("stampText.pdf");

// Create image stamper
ImageStamper imageStamper = new ImageStamper(new Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg"))
{
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0);
pdf.SaveAs("stampImage.pdf");
Imports IronPdf
Imports IronPdf.Editing

Private renderer As New ChromePdfRenderer()

Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>")

' Create text stamper
Private textStamper As New TextStamper() With {
	.Text = "Text Stamper!",
	.FontFamily = "Bungee Spice",
	.UseGoogleFont = True,
	.FontSize = 30,
	.IsBold = True,
	.IsItalic = True,
	.VerticalAlignment = VerticalAlignment.Top
}

' Stamp the text stamper
pdf.ApplyStamp(textStamper)
pdf.SaveAs("stampText.pdf")

' Create image stamper
Dim imageStamper As New ImageStamper(New Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg")) With {.VerticalAlignment = VerticalAlignment.Top}

' Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0)
pdf.SaveAs("stampImage.pdf")
VB   C#

iTextSharp

using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;

public void StampPDF(string inputPdfPath, string outputPdfPath, string stampText)
{
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputPdfPath), new PdfWriter(outputPdfPath));

    var document = new Document(pdfDoc);
    ...
}
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;

public void StampPDF(string inputPdfPath, string outputPdfPath, string stampText)
{
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputPdfPath), new PdfWriter(outputPdfPath));

    var document = new Document(pdfDoc);
    ...
}
Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.Layout.Element

Public Sub StampPDF(ByVal inputPdfPath As String, ByVal outputPdfPath As String, ByVal stampText As String)
	Dim pdfDoc As New PdfDocument(New PdfReader(inputPdfPath), New PdfWriter(outputPdfPath))

	Dim document As New Document(pdfDoc)
	'...
End Sub
VB   C#

通過快速瀏覽代碼,您可以看到 IronPDF 是務實的,基於普通終端用戶的需求。

iText是一個較低層次的庫,專注於繪圖API,我們可以在頁面上添加物件、形狀和文字。

iTextSharp.dll 使用主要的程式化模型來渲染 PDF。 使用 iTextSharp PDF 程式庫時,每段 PDF 文本、圖形、表格或線條都會“繪製”到 PDF 上。 API 顯得很低層次,並專注於 PDF 文件標準。 此模型允許精確控制,但可能需要開發人員了解一些有關 PDF 的運作方式。 緊密匹配現有設計風格或網絡資產可能需要一些迭代和閱讀iTextSharp 文件ation. 遵循其傳統,方法論和程式介面具有獨特的 Java 風格。

相較之下,IronPDF 使用完整的嵌入式網頁瀏覽器渲染器來將 HTML 轉換為 PDF. 以下簡短(1 行和 2 行) C# 轉換範例:HTML 轉 PDF開發人員可以從現有或新的 HTML、影像和 CSS 生成 PDF。 這使開發人員能夠與現有的網頁資產緊密合作,並在專案期間與設計師同時進行工作。 iText 確實包含 C# .NET 的HTML to PDF 功能,但這似乎並不是該庫的主要特點。

繼續閱讀,以了解更多有關IronPDF和iTextSharp幫助開發人員實現以下目標的不同方式的比較詳細資訊:

-從現有的網址創建PDF

-從 HTML 輸入字串建立 PDF 文件

-將 ASPX 頁面轉換為 PDF

-將 XML 轉換為 PDF

  • 實時數據(圖表)

1. 授權

授權選項也是開發專案中的一個重要因素。 iTextSharp 根據 AGPL 許可協議開放源代碼。 當在 AGLP 下授權時,任何使用包含 iTextSharp 的應用程式任何部分的人員(甚至在公司网络或互联网上)可能有權獲得應用程式完整原始碼的完整副本。 這非常適合學術工作。 如果我們希望在商業應用中使用iTextSharp,最好的做法是聯繫iText並且請他們報價 iText 商業使用的價格.

IronPDF 是開發免費使用,然後可以授權用於商業部署以公開發布的合理價格,起價為 $749。

IronPDF 和 iTextSharp

這就是這兩個庫的比較:

IronPDFiTextSharp
通過內建的完整網絡瀏覽器將HTML轉換為PDF通過pdfHTML附加元件將基本HTML轉換為PDF
渲染焦點:嵌入式網頁瀏覽器渲染重點:程式化繪圖模型
IronPDF具有明確的授權,並且公佈了價格。AGPL! 商業用途價格未公布。
易於使用 .NET 首設計進行編碼基於 Java API
不適用於學術作業和課程 非常適合學術作業和研究

主要差異

使用 IronPDF 從 HTML 生成 PDF

IronPDF 使 .NET 和 .NET Core 開發人員能夠在 C#、F# 和 VB.NET 中輕鬆生成、合併、拆分、編輯和提取 PDF 內容,適用於 .NET Core 和 .NET Framework,以及從 HTML、ASPX、CSS、JS 和圖像文件生成 PDF 文件.

它利用嵌入式網頁瀏覽器將 HTML 轉換為 PDF。 這使開發者能夠從 HTML、圖片和 CSS 生成 PDF,並與現有的網頁資產緊密協作,也可以在項目中與設計師同時進行工作。

2. IronPDF 功能

IronPDF 非常注重開發人員的生產力。 該庫將許多常見的複雜 PDF 程式碼任務簡化為方便的 C# 方法,以提取文本和圖像、簽署 PDF、使用新 HTML 編輯 PDF 等,而開發人員無需研究 PDF 文件標準即可了解如何實現最佳效果。

  • 從 HTML、圖像和 ASPX 文件生成 PDF 文檔
  • 閱讀 PDF 文字
  • 從PDF中提取數據和圖像
  • 合併PDF文件
  • 拆分PDFs
  • 操作 PDF

    . iTextSharp 文件特性

    iTextSharp.dll主要使用程式化模型來生成PDF,並擁有強大的PDF操作API,這些API功能強大且緊密遵循PDF標準。

  • AGLP嚴格開源許可證
  • 程式化繪圖模型
  • 編輯和閱讀PDFs
  • 穩固的 PDF 操作功能
  • 基於 Java 庫

    讓我們通過創建一個使用這兩個庫的範例項目來進行比較:


    範例專案

    建立一個ASP.NET專案

    請遵循以下步驟來創建一個 ASP.NET 網站:

  1. 打開 Visual Studio

  2. 點擊文件 > 新建項目

  3. 在專案類型列表框中選擇 Visual C# 下的 Web

  4. 選擇 ASP.NET 網頁應用程式
    New Project related to 2. IronPDF 功能

    圖 1新專案

    • 點擊確定
    • 在下一個畫面上,如圖2所示選擇Web Forms。
      Web Form related to 2. IronPDF 功能

      圖2網頁表單

  • 點擊確定

    現在我們有東西可以處理了。 讓我們安裝 IronPDF。


    開始使用

3. IronPDF 函式庫安裝

為了使用IronPDF,您首先需要安裝它。(免費). 有兩個選擇:

  • NuGet
  • 下載這個庫

    讓我們仔細看看。

3.1. 使用 NuGet 安裝

有三種方法可以安裝 IronPDF NuGet 套件:

  1. Visual Studio

  2. 開發者命令提示字元

  3. 直接下載 NuGet 套件

    讓我們一個一個來做。

3.2. Visual Studio

Visual Studio 提供了 NuGet 套件管理器,用於在您的專案中安裝 NuGet 套件。 您可以透過專案選單存取,或在方案總管中右鍵點擊您的專案。 這兩個選項如下圖 3 和圖 4 所示。

Project Menu related to 3.2. Visual Studio

圖3專案選單

Solution Explorer related to 3.2. Visual Studio

圖4在解決方案總管中右鍵單擊

在你從任一選項點擊管理 NuGet 套件之後,瀏覽 IronPDF 套件並按照圖 5 所示進行安裝。

Install Ironpdf Nuget Package related to 3.2. Visual Studio

圖 5安裝 IronPDF NuGet 套件

3.3. 開發者命令提示字元

以下步驟將打開開發者命令提示字元並安裝 IronPDF NuGet 套件

  1. 搜尋你的 開發者命令提示字元——通常在你的 Visual Studio 資料夾下

  2. 請輸入以下命令:PM > Install-Package IronPdf

  3. 按Enter键

  4. 將安裝套件

  5. 重新載入您的 Visual Studio 專案

3.4. 直接下載 NuGet 套件

若要下載 NuGet 套件:

  1. 導航至https://www.nuget.org/packages/IronPdf/

  2. 點擊下載套件

  3. 下載套件後,雙擊它

  4. 重新載入您的 Visual Studio 專案

3.5. 下載 .DLL 函式庫

安裝IronPDF的第二種方法是透過直接下載.

Download Ironpdf Library related to 3.5. 下載 .DLL 函式庫

圖6下載IronPDF資料庫

在您的項目中引用庫,請按照以下步驟操作:

  1. 在方案總管中右鍵單擊方案

  2. 選擇參考文獻

  3. 瀏覽 IronPDF.dll 庫

  4. 點擊確定

    現在您已設定完成,我們可以在完成 iTextSharp 設定後開始使用 IronPDF 庫中的精彩功能。

    使用 NuGet 安裝 iTextSharp

    有三種方式來安裝 iTextSharp NuGet 套件,它們是:

Visual Studio

  • 開發者命令提示字元
  • 直接下載 NuGet 套件

    讓我們一個一個來做。

    在 Visual Studio 中,搜尋 iText 並安裝相關的套件,如下所示。

    Itext related to 3.5. 下載 .DLL 函式庫

    圖7iText

    或者,在開發者命令提示字元中(如前所示,輸入以下命令)

  • PM > Install-Package itext7

    或者,下載iText 7直接從他們的網站。

    現在您已經創建了必要的專案,讓我們在代碼中比較這兩個庫。


    比較代碼

4. 從現有的 URL 建立 PDF

以下程式碼下載網頁並將其轉換為 PDF 文件。

4.1. IronPDF 網站到 PDF

以下程式碼使用IronPDF直接從網站地址建立PDF文件。 自訂頁首和頁尾也包括在內。

/**
IronPDF URL to PDF
anchor-ironpdf-website-to-pdf
**/
private void ExistingWebURL()
{
    // Create a PDF from any existing web page
    var Renderer = new IronPdf.ChromePdfRenderer();

    // Create a PDF from an existing HTML
    Renderer.RenderingOptions.MarginTop = 50;  //millimetres
    Renderer.RenderingOptions.MarginBottom = 50;
    Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
    Renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        CenterText = "{pdf-title}",
        DrawDividerLine = true,
        FontSize = 16
    };
    Renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        LeftText = "{date} {time}",
        RightText = "Page {page} of {total-pages}",
        DrawDividerLine = true,
        FontSize = 14
    };

    Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

    Renderer.RenderingOptions.EnableJavaScript = true;
    Renderer.RenderingOptions.RenderDelay = 500; //milliseconds

    using var PDF = Renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Portable_Document_Format");

    PDF.SaveAs("wikipedia.pdf");
}
/**
IronPDF URL to PDF
anchor-ironpdf-website-to-pdf
**/
private void ExistingWebURL()
{
    // Create a PDF from any existing web page
    var Renderer = new IronPdf.ChromePdfRenderer();

    // Create a PDF from an existing HTML
    Renderer.RenderingOptions.MarginTop = 50;  //millimetres
    Renderer.RenderingOptions.MarginBottom = 50;
    Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
    Renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        CenterText = "{pdf-title}",
        DrawDividerLine = true,
        FontSize = 16
    };
    Renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        LeftText = "{date} {time}",
        RightText = "Page {page} of {total-pages}",
        DrawDividerLine = true,
        FontSize = 14
    };

    Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

    Renderer.RenderingOptions.EnableJavaScript = true;
    Renderer.RenderingOptions.RenderDelay = 500; //milliseconds

    using var PDF = Renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Portable_Document_Format");

    PDF.SaveAs("wikipedia.pdf");
}
'''
'''IronPDF URL to PDF
'''anchor-ironpdf-website-to-pdf
'''*
Private Sub ExistingWebURL()
	' Create a PDF from any existing web page
	Dim Renderer = New IronPdf.ChromePdfRenderer()

	' Create a PDF from an existing HTML
	Renderer.RenderingOptions.MarginTop = 50 'millimetres
	Renderer.RenderingOptions.MarginBottom = 50
	Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
	Renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
		.CenterText = "{pdf-title}",
		.DrawDividerLine = True,
		.FontSize = 16
	}
	Renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
		.LeftText = "{date} {time}",
		.RightText = "Page {page} of {total-pages}",
		.DrawDividerLine = True,
		.FontSize = 14
	}

	Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print

	Renderer.RenderingOptions.EnableJavaScript = True
	Renderer.RenderingOptions.RenderDelay = 500 'milliseconds

	Dim PDF = Renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Portable_Document_Format")

	PDF.SaveAs("wikipedia.pdf")
End Sub
VB   C#

IronPDF 可以幫助您以非常靈活且可自訂的方式將文字或圖片添加到 PDF。 它讓您完全掌控。 對於熟悉 HTML/CSS 的開發人員來說,這個 API 容易理解和使用。 iTextSharp 使用其圖像和文字蓋章工具,讓用戶對 PDF 文件中顯示的內容擁有更多的控制權,儘管這個過程最終可能會更手動一些。

將 DOCX 轉換為 PDF

有時,您可能需要將 PDF 從一種格式轉換為另一種格式。 在此情況下,我們正在查看DOCX轉PDF轉換並比較 IronPDF 和 iTextSharp 處理此過程的不同方式。

IronPDF

using IronPdf;

// Instantiate Renderer
DocxToPdfRenderer renderer = new DocxToPdfRenderer();

// Render from DOCX file
PdfDocument pdf = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx");

// Save the PDF
pdf.SaveAs("pdfFromDocx.pdf");
using IronPdf;

// Instantiate Renderer
DocxToPdfRenderer renderer = new DocxToPdfRenderer();

// Render from DOCX file
PdfDocument pdf = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx");

// Save the PDF
pdf.SaveAs("pdfFromDocx.pdf");
Imports IronPdf

' Instantiate Renderer
Private renderer As New DocxToPdfRenderer()

' Render from DOCX file
Private pdf As PdfDocument = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx")

' Save the PDF
pdf.SaveAs("pdfFromDocx.pdf")
VB   C#

iTextSharp

不幸的是,iTextSharp 不提供內建的 DOCX 轉 PDF 轉換功能,開發人員必須依賴如 Aspose.Words 等外部庫來完成此任務。

IronPDF 為開發人員提供了一個簡單明瞭的工具,用於處理 DOCX 到 PDF 的轉換任務,使 DOCX 文件能輕鬆轉換為 PDF 格式,且不需要外部程式庫。 另一方面,iTextSharp 需要依賴外部庫以執行此任務。

程式範例比較摘要

Itextsharp 1 related to 程式範例比較摘要

如需更詳細的範例,請造訪IronPDF 範例.

定價和授權:IronPDF 與 iTextSharp Library 之比較

IronPDF 價格和授權

IronPDF擁有不同的等級和額外功能可供購買許可證。 開發人員還可以購買IronSuite可以讓您以兩個產品的價格使用Iron Software的所有產品。 如果您還沒有準備好購買許可證,IronPDF 提供一個免費試用持續30天。

  • 永久授權: 提供多種永久授權類型,根據您的團隊規模、專案需求和地點數量選擇。 每種授權類型均提供電子郵件支援。
  • Lite License(輕量授權):此授權費用為 $749,支援一位開發者、一個地點和一個專案。

    使用這段程式碼,我們已將老虎維基百科轉換網頁轉PDF與這兩個函式庫。

  • 專業授權: 此授權適合較大的團隊,支持十位開發人員、十個地點和十個項目,價格為 $2,999。它提供與先前等級相同的聯繫支持渠道,還提供屏幕共享支持。
  • 免版稅再分發: IronPDF 的許可證還提供免版稅再分發保險,額外收費 $1,999。
  • 不間斷的產品支援: IronPDF 提供持續的產品更新、安全功能升級以及來自其工程團隊的支援,價格為每年 999 美元,或一次性購買 1,999 美元以獲得 5 年保障。
  • IronSuite:只需 1,498 美元,即可使用包括 IronPDF、IronOCR、IronWord、IronXL、IronBarcode、IronQR、IronZIP、IronPrint 和 IronWebScraper 在內的所有 Iron Software 產品。

    Itextsharp 2 related to IronPDF 價格和授權

iTextSharp 授權

  • AGPL 授權: iTextSharp 在 AGPL 下可免費使用(Affero通用公共许可证). 此授權要求任何使用 iTextSharp 的軟體在重新分發時必須在相同授權下作為開源。
  • 商業授權: 對於不符合 AGPL 條款的項目,iTextSharp 提供商業授權,允許在專有軟件中使用。 此授權的定價基於報價模式,並根據使用情況和項目範圍而有所不同。

文件和支援:IronPDF 與 iText

IronPDF

  • 全面文件:涵蓋所有功能的廣泛且使用者友好的文件。
  • 24/5 支援:提供全天候工程師支援。
  • 影片教程:逐步影片指南可在 YouTube 上觀看。
  • 社群論壇:參與活躍的社群以獲得額外支援。
  • 定期更新:每月產品更新,以確保提供最新功能和安全補丁。

iTextSharp

  • 文件: iTextSharp 提供了涵盖其主要功能的詳細文件。
  • 示例和教程: 提供各種教程和代碼示例,幫助開發人員入門。
  • GitHub: 開發人員可以提交問題或錯誤到 iTextSharp GitHub 儲存庫,並與 iTextSharp 社群互動以獲得支援。
  • 更新: 提供定期更新以改進功能和解決錯誤。

    如需有關 IronPDF 文件和支援的更多詳細資訊,請造訪IronPDF 文件檔案和該Iron Software YouTube 頻道.

結論

兩者IronPDF和iTextSharp都是.NET專案中進行PDF操作的可靠選擇。 IronPDF 以其直觀的平台整合以及 HTML 轉 PDF 轉換和先進的安全選項等功能而著稱。 iTextSharp 雖然源自於開源 iText 庫,但在 AGPL 和商業許可下提供了一套強大且靈活的工具組,非常適合需要開源靈活性或嚴格許可合規性的專案。

選擇合適的工具取決於您的專案授權需求、技術支援需求以及特定功能需求。 無論您偏好 IronPDF 的簡單性和全面支持,還是 iTextSharp 的開源穩定性,這兩個庫都為開發人員提供了充足的資源,以增強其應用程式中的 PDF 工作流程。


立即在您的專案中使用IronPDF,並享受免費試用。

第一步:
green arrow pointer

< 上一頁
IronPDF 和 EvoPdf:比較
下一個 >
Syncfusion PDF Viewer 與 HTML 轉 PDF 的比較

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

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