产品比较

iTextSharp C# HTML 转换为 PDF 的 .NET Core 替代方案

发布 2024年十月23日
分享:

IronPDF 和iText 7 (旧称 iTextSharp)这两款工具都能够生成、操作和使用.NET、Java、Python 或 Node js。在 .NET 和 .NET Core 中打印 PDF.

其中C# PDF 库最适合您的 .NET 项目? 本文旨在帮助读者做出正确、明智的决定。

IronPDF for .NET 是一个著名的 .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 的工作原理
  • 对于想完成工作的务实型编码员来说,这是一个不错的选择。

    文本(iTextSharp)是:

  • Java 第一
  • 非常开源。 除严格的开放源码 AGLP 项目外,我们可以向他们询价。
  • 重点介绍如何使用基于 PDF 内部工作方式的编程 API 渲染 PDF
  • 免费和学术项目的最佳选择

    IronPDF支持多种平台和环境,确保在各种系统中无缝集成和部署:

    iTextSharpiText 是基于名为 iText 的开源 Java 代码库开发的,已经有至少 6 年的历史,目前仍带有一些 Java 的味道。 初次学习 Java 的开发人员可能会对这个库感到熟悉。

    IronPDF for .NET是一个.NET优先库,其API是围绕在Visual Studio中的易用性而设计的。 .NET 已经存在了近 20 年,不断发展壮大,开辟了许多可能性,而 IronPDF 正是为了利用这些可能性而设计的。 它允许我们在 .NET Framework 项目中创建和操作 PDF 文档。 您可以将 IronPDF 下载为供 iTextSharp 用户使用的备用 PDF 库.

    • .NET Core(8、7、6、5 和 3.1+)

    • .NET标准(2.0+)
  • .NET 框架(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 Framework(4.6.1+).NET 5+。
  • 应用环境:可在 Windows、macOS、Linux 和 Docker 上运行。
  • 开源:根据AGPL许可证提供。

主要功能比较:IronPDF 与 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 文件的部分内容。以下示例演示了与 iTextSharp 相比,如何使用 IronPDF 编辑文本。

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 文档. 遵循其传统,该方法论和编程接口具有明显的Java风格。

相比之下,IronPDF 使用完整的嵌入式网页浏览器渲染器来将 HTML 转换为 PDF. 以下是简短的(单线和双线) 用于HTML到PDF转换的C#代码示例,开发人员可以从现有或新的HTML、图像和CSS生成PDF。 这样,开发人员就能与现有的网络资产密切合作,并在项目期间与设计师并行工作。 iText 包含 C# .NET 的HTML 转 PDF功能,尽管这似乎不是该库的主打功能。

请继续阅读,了解有关 IronPDF 和 iTextSharp 帮助开发人员实现以下目标的不同方式的更多比较细节:

1.许可

许可选项也是开发者项目中的一个重要因素。 iTextSharp 根据 AGPL 许可协议开放源代码。 当根据AGLP授权时,任何使用包含iTextSharp的应用程序的任何部分的人(甚至跨越公司网络或互联网)可能有权获得该应用程序全部源代码的完整副本。 这对学术工作来说是极好的。 如果我们希望在商业应用程序中使用 iTextSharp,最好的做法是联系 iText 和向他们索取 iText 商业用途的报价.

IronPDF 是免费开发,然后可以获得商业部署许可公开发布的合理价格,起价为 $749。

IronPDF 和 iTextSharp

这是这两个库的比较方式:

IronPDFiTextSharp
通过完整的内置网络浏览器将 HTML 转换为 PDF通过 pdfHTML 附加组件将基本 HTML 转换为 PDF
渲染重点:嵌入式网络浏览器渲染重点:程序化绘图模型
IronPDF 有明确的许可证和公布的价格AGPL!未公布商业用途定价。
采用 .NET First 设计,易于编码基于 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 文档
  • 分割 PDF
  • 操作 PDF

    . iTextSharp 文档功能

    "(《世界人权宣言》)iTextSharp.dll主要使用编程模型来渲染 PDF,它拥有先进的 PDF 操作 API,功能强大且严格遵循 PDF 标准。

  • AGLP 严格的开源许可
  • 计划绘图模型
  • 编辑和阅读 PDF 文件
  • 强大的 PDF 操作功能
  • 基于 Java 库

    让我们利用这两个库创建一个示例项目进行比较:


    项目示例

    创建 ASP.NET 项目

    利用以下步骤创建 ASP.NET 网站:

  1. 打开 Visual Studio

  2. 单击文件 > 新项目

  3. 在项目类型列表框中选择 Visual C# 下的 Web

  4. 选择 ASP.NET 网络应用程序
    New Project related to 2.IronPDF 功能

    图 1 - 新项目

    • 点击确定
    • 在下一个屏幕中,选择 Web 表单,如图 2 下方所示
      Web Form related to 2.IronPDF 功能

      图 2 - 网络表格

  • 点击确定

    现在我们有办法了。 让我们安装 IronPDF。


    入门

3. IronPDF 库安装

要使用 IronPDF,首先需要安装它(免费的). 有两种选择:

  • NuGet
  • 下载图书馆

    让我们仔细看看。

3.1.使用 NuGet 安装

安装 IronPDF NuGet 软件包有三种方法:

1.Visual Studio

  1. 开发人员命令提示符

  2. 直接下载 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 > 安装软件包 IronPDF

  3. 按回车键

  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. 点击确定

    设置完成后,我们就可以开始使用 IronPDF 库中的超强功能了。

    使用 NuGet 安装 iTextSharp

    有三种方法安装 iTextSharp NuGet 包,它们是:

    • Visual Studio
    • 开发人员命令提示符
    • 直接下载 NuGet 软件包

    让我们一个一个来。

    对于 Visual Studio,请搜索 iText 并安装相关软件包,如下图所示。

    Itext related to 使用 NuGet 安装 iTextSharp

    图 7 - iText

    或者,在开发人员命令提示符中(如前所示,输入以下命令)

  • PM > 安装软件包 itext7

    或下载iText 7直接从其网站获取。

    现在您已经创建了必要的项目,让我们在代码中比较一下这两个库。


    代码对比

4.从现有 URL 创建 PDF

以下代码下载网页并将其转换为 PDF 文档。

4.1.IronPDF Website to 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 上添加文本或图片; 它让您完全掌控。 操作 API 非常简单易懂,特别是对于熟悉 HTML/CSS 的开发者来说。 iTextSharp利用其图像和文本戳记工具,让用户对其 PDF 文件上显示的内容有更多的控制权,不过这一过程最终可能需要更多的手动操作。

将DOCX转换为PDF

有时候,您可能需要将PDF文件从一种格式转换为另一种格式。 In this case, we looking at 在这种情况下,我们正在查看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 库的比较

IronPDF 定价和许可

IronPDF拥有不同级别和购买许可证的附加功能。 开发者也可以购买Iron Suite这让您可以以两个产品的价格访问Iron Software的所有产品。 如果您尚未准备购买许可证,IronPDF提供了一种免费试用持续30天。

  • 永久许可证: 根据您团队的规模、项目需求和地点数量提供一系列永久许可证。 每种许可类型都包括电子邮件支持。
  • Lite License:此许可证价格为749美元,支持一个开发者、一个地点和一个项目。

    通过这个代码段,我们将 Tiger Wikipedia 转变成了.NET、Java、Python 或 Node js。网页到 PDF这两个图书馆。

  • 专业许可证: 此许可证适用于较大的团队,支持10名开发者、10个位置和10个项目,价格为2999美元。它提供与之前等级相同的联系支持渠道,但也提供屏幕共享支持。
  • 免版税重新分发: IronPDF 的许可还提供额外 $1,999 的免版税重新分发覆盖。
  • 持续不断的产品支持: IronPDF为用户提供持续的产品更新、安全功能升级以及他们工程团队的支持,费用为每年999美元或一次性支付1999美元,享受5年的服务。
  • IronSuite:花费 $1,498,您将获得所有Iron Software产品的访问权,包括IronPDF、IronOCR、IronWord、IronXL、IronBarcode、IronQR、IronZIP、IronPrint和IronWebScraper。

    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 查看器 HTML 转 PDF 比较

准备开始了吗? 版本: 2024.12 刚刚发布

免费NuGet下载 总下载量: 11,781,565 查看许可证 >