Ein Vergleich zwischen IronPDF und iText7
Full Comparison
Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Itext on pricing, HTML support, and licensing.
Ein anständiges und einfaches Tool zur Manipulation von PDFs kann viele Aufgaben und Prozesse, die mit der Erstellung und Bearbeitung von PDF-Dokumenten verbunden sind, optimieren. Im .NET-Ökosystem gibt es zwei beliebte Bibliotheken – IronPDF und iText – die die PDF-Generierung ohne Adobe-Abhängigkeiten ermöglichen. Sie bieten beide eine Vielzahl an Funktionen wie Erstellen, Bearbeiten, Konvertieren usw., aber dieser Artikel konzentriert sich auf den Vergleich dieser Bibliotheken anhand von drei Kriterien: die angebotenen Funktionen, die Qualität der von ihnen bereitgestellten Dokumentation und die Preisgestaltung, die diese Unternehmen für die Nutzung ihrer Produkte wählen.
Überblick über IronPDF und iText
IronPDF ist eine prominente .NET-PDF-Bibliothek, die es Programmierern ermöglicht, PDF-Dokumente einfach zu erstellen, zu ändern und mit ihnen zu interagieren. Sie kann in verschiedenen .NET-Umgebungen verwendet werden, einschließlich Core, 8, 7, 6 und Framework, was sie sehr flexibel für verschiedene Entwicklungsanforderungen macht. Die Hauptmerkmale von IronPDF sind eine reiche Funktionspalette, wie die HTML-zu-PDF-Konvertierung, die Möglichkeit, PDFs zu verbinden, PDF-Verschlüsselung und die Anwendung digitaler Signaturen, um nur einige zu nennen. Die Dokumentation ist so geschrieben, dass Benutzer sie ohne Schwierigkeiten verstehen können, während die Bibliothek selbst über einen starken technischen Support verfügt.
iText ist eine der beliebtesten PDF-Bibliotheken, die sowohl für Java als auch .NET (C#) verfügbar ist. iText Core 8 bietet eine Unternehmenslösung zur programmierbaren Erstellung und Manipulation von PDF-Dateien. iText bietet Unterstützung für viele verschiedene Funktionen und wird sowohl unter Open-Source- (AGPL) als auch kommerziellen Lizenzen veröffentlicht. Das bedeutet, dass es dank seiner Vielseitigkeit eine breite Palette von Anwendungsfällen bei digitalen Transformationsprojekten abdecken kann.
Plattformübergreifende Kompatibilität
IronPDF und iText sind mit verschiedenen Plattformen kompatibel; sie können PDFs auf vielen verschiedenen Systemen und innerhalb des .NET-Frameworks verarbeiten. Wir werden die unterstützten Frameworks und Plattformen für jedes Produkt unten vergleichen.
IronPDF:
IronPDF Overview of Supported Platforms unterstützt eine Vielzahl von Plattformen und Umgebungen und sorgt für nahtlose Integration und Bereitstellung in verschiedenen Systemen:
-
.NET-Versionen:
- .NET Core (8, 7, 6, 5 und 3.1+)
- .NET Standard (2.0+)
- .NET Framework (4.6.2+)
-
App-Umgebungen: IronPDF funktioniert in App-Umgebungen wie Windows, Linux, Mac, Docker, Azure und AWS.
-
IDEs: Funktioniert mit IDEs wie Microsoft Visual Studio, JetBrains Rider und ReSharper.
- Betriebssysteme und Prozessoren: Unterstützt mehrere verschiedene Betriebssysteme & Prozessoren einschließlich Windows, Mac, Linux, x64, x86, ARM.
iText
-
.NET-Versionen:
- .NET Core (2.x, 3.x)
- .NET Framework (4.6.1+)
- .NET 5+
-
App-Umgebungen: iText unterstützt eine Reihe von App-Umgebungen, dank seiner Unterstützung für sowohl Java als auch .NET (C#), diese beinhalten Windows, Mac, Linux und Docker.
- Betriebssysteme: Läuft auf Windows, macOS und Linux-Betriebssystemen.
Vergleich der wichtigsten Funktionen: IronPDF vs. iText
IronPDF Key Feature List und iText bieten beide eine Reihe von Funktionen und Werkzeugen zur Arbeit mit PDF-Dateien. Der Fokus dieses nächsten Abschnitts liegt darauf, einige dieser Funktionen genauer zu untersuchen und zu sehen, wie die beiden Bibliotheken im Hinblick auf die Durchführung verschiedener PDF-bezogener Aufgaben abschneiden.
IronPDF
-
HTML-zu-PDF-Konvertierung: Unterstützt HTML, CSS, JavaScript und Bilder.
-
PDF-Datei-Manipulation: Dokumente aufteilen und zusammenführen, Formatierung ändern und bestehende PDF-Dokumente bearbeiten.
-
Sicherheit: PDF-Verschlüsselung und -Entschlüsselung.
-
Bearbeitung: Hinzufügen von Anmerkungen, Lesezeichen und Inhaltsverzeichnissen.
-
Vorlagen: Kopf- und Fußzeilen sowie Seitenzahlen anwenden.
-
Wasserzeichen: Einfach Text- und Bildwasserzeichen zu PDF-Dateien hinzufügen; volle Kontrolle mit HTML/CSS gewinnen.
- PDF-Stempel: Bilder und Text auf Ihre PDF-Dokumente stempeln, indem Sie IronPDF verwenden.
Für weitere Informationen über das umfangreiche Funktionsangebot von IronPDF besuchen Sie die IronPDF-Funktionsseite.
iText
-
PDF-Erstellung: Unterstützt das Erstellen von PDF-Dokumenten von Grund auf.
-
Formulare: Erstellen und Bearbeiten von PDF-Formularen.
-
Digitale Signaturen: Signieren von PDF-Dokumenten.
-
Komprimierung: Optimierung der PDF-Dateigrößen.
-
Inhaltextraktion: Extrahieren von Text und Bildern aus PDFs.
-
Open Source: Verfügbar unter AGPL-Lizenz.
- Anpassungsfähigkeit: Hoher Grad an Anpassung für fortgeschrittene Anwendungsfälle.
Vergleich der PDF-Funktionsmerkmale zwischen IronPDF und iText
HTML-zu-PDF-Konvertierung
Die HTML-Inhalte mit IronPDF in PDFs umwandeln ist eine Aufgabe, die in vielen verschiedenen Büros und Arbeitsbereichen durchgeführt wird. Unten finden Sie Codebeispiele, die zeigen, wie IronPDF und iText diesen Prozess angehen.
IronPDF
using IronPdf;
// Configure security settings
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.
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
using IronPdf;
// Configure security settings
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.
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
Imports IronPdf
' Configure security settings
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.
Dim myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", "C:\site\assets\")
myAdvancedPdf.SaveAs("html-with-assets.pdf")
iText
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
Bei der Konvertierung von HTML in PDF bietet IronPDF ein prägnantes und praktisches Tool für diese Aufgabe. Indem der ChromePdfRenderer verwendet wird, um HTML-Inhalte in PDFs zu konvertieren, zeichnet sich IronPDF bei der Bereitstellung von pixelgenauen PDF-Dokumenten für Benutzer aus. Benutzer können PDFs direkt aus HTML-Strings erstellen oder externe Assets wie Bilder mit einem optionalen Basispfad einbinden, wie im fortgeschrittenen Beispiel gezeigt. iText hingegen nimmt mit seiner HtmlConverter-Klasse einen grundlegenden Ansatz für die Erstellung von PDF-Dokumenten aus einer HTML-Datei.
PDF-Dateien verschlüsseln
Das Verschlüsseln von PDF-Dateien mit IronPDF und die Entschlüsselung sind in vielen Arbeitsumgebungen von entscheidender Bedeutung. Unten werden wir sehen, wie iText und IronPDF die Verschlüsselung von PDFs angehen.
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
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
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
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")
iText
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();
}
}
Imports System
Imports System.IO
Imports System.Text
Imports iText.Kernel.Pdf
Public Class EncryptPdf
Public Shared ReadOnly DEST As String = "results/sandbox/security/encrypt_pdf.pdf"
Public Shared ReadOnly SRC As String = "../../../resources/pdfs/hello.pdf"
Public Shared ReadOnly OWNER_PASSWORD As String = "World"
Public Shared ReadOnly USER_PASSWORD As String = "Hello"
Public Shared Sub Main(ByVal args() As String)
Dim file As New FileInfo(DEST)
file.Directory.Create()
Call (New EncryptPdf()).ManipulatePdf(DEST)
End Sub
Protected Sub ManipulatePdf(ByVal dest As String)
Dim document As 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 Or EncryptionConstants.DO_NOT_ENCRYPT_METADATA)))
document.Close()
End Sub
End Class
IronPDF bietet Benutzern eine einfache Möglichkeit, PDF-Dateien zu verschlüsseln und gleichzeitig viel Kontrolle zu geben, wie das Bearbeiten von Metadaten und das Anpassen von Sicherheitseinstellungen, wie das Erstellen von Dokumenten, die nur gelesen werden können, oder das Einschränken von Benutzeraktionen wie Kopieren und Einfügen. Andererseits verwendet iText eine niedrigere und längere Methode, bei der die PDF-Verschlüsselung während der Dokumentenerstellung angewendet wird, indem Eigentümer- und Benutzerpasswörter sowie Berechtigungen wie Druckrechte unter Verwendung von Verschlüsselungsstandards wie AES-128 angegeben werden.
PDF-Inhalt umwandeln
Gelegentlich kann es erforderlich sein, Text in PDF mit IronPDF Teile einer PDF-Datei zu redigieren, während man mit vertraulichen oder privaten Informationen umgeht. Die untenstehenden Codebeispiele zeigen, wie Sie mit IronPDF Text redigieren können, im Vergleich zu iText.
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")
iText
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) }; // 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) }; // 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) } ' 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
End Using
IronPDF's Redaktionswerkzeug ist knapp und einfach zu verwenden, es braucht nur wenige Zeilen Code, um den Redaktionsprozess zu rationalisieren. Dies hilft, die Effizienz bei PDF-Redaktionsaufgaben zu steigern und gibt Benutzern eine einfache Möglichkeit, ihre sensiblen und privaten Daten sicher zu halten. iText bietet hingegen kein integriertes Redaktionswerkzeug im gleichen Sinne wie IronPDF. Es kann jedoch weiterhin sensible Daten mithilfe der oben gezeigten Methode abdecken, um über Inhalte hinweg zu zeichnen, die Benutzer redigieren möchten. Dies kann zu potenziellen Problemen führen, da diese Rechtecke den Text nicht tatsächlich entfernen oder ordnungsgemäß redigieren, was bedeutet, dass andere Menschen möglicherweise die redigierten Daten kopieren und einfügen könnten.
PDF-Dokumente signieren
Die Möglichkeit, PDF-Dokumente digital mit IronPDF zu signieren, kann Zeit sparen, insbesondere wenn es ein automatisierter Prozess ist. Hier sind einige Codebeispiele, die zeigen, wie sich IronPDF von iText unterscheidet, wenn es um die Durchführung der digitalen Signierung von Dokumenten geht.
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")
iText
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
Beim digitalen Signieren von PDF-Dateien bietet IronPDF ein prägnantes, aber leistungsstarkes Tool, um diesen Prozess abzuschließen. Die Einfachheit ermöglicht es, den Prozess schnell durchzuführen und spart Entwicklern Zeit, die es für ihre Signieranforderungen implementiert haben. iText erfordert einen längeren, komplexeren Prozess, um digitale Signaturen auf PDF-Dateien anzuwenden. Während ihre Fähigkeit, verschiedene Schnittstellenoptionen und Schlüssel zu verwenden, den Benutzern mehr Kontrolle bietet, könnte die Komplexität dieses Tools den Gebrauch behindern.
Wasserzeichen auf PDF-Dokumente anwenden
Die Fähigkeit, Wasserzeichen auf PDFs mit IronPDF hinzuzufügen und zu personalisieren, kann sehr bei der Wahrung von Vertraulichkeit, Urheberrechtsschutz, Branding oder bei jeder Aufgabe im Zusammenhang mit vertraulichen Informationen helfen. Im Folgenden finden Sie einen Vergleich, wie IronPDF und iText Wasserzeichen auf PDF-Dateien anwenden.
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")
iText
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();
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();
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()
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
IronPDF's einfache und intuitive API ermöglicht es Benutzern, benutzerdefinierte Wasserzeichen schnell auf ihre PDF-Dateien anzuwenden und die volle Kontrolle über den Prozess zu erhalten. Durch die Verwendung von HTML/CSS wird der Prozess weiter vereinfacht, ohne die Anpassungskontrolle zu verlieren. iText's Ansatz, Wasserzeichen zu PDFs hinzuzufügen, erfordert mehr manuelle Arbeit, was den Prozess potenziell verlangsamen kann.
Bilder und Text in eine PDF-Datei einfügen
Es gibt Zeiten, in denen PDF-Seiten ähnlich wie bei der Aufnahme von Wasserzeichen mit Text oder Bildern gestempelt werden müssen. Wir werden nun vergleichen, wie IronPDF und iText Inhalte auf ein PDF-Dokument stempeln.
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")
iText
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));
Document doc = new Document(pdfDoc);
// Add stamp (text) to each page
int numPages = pdfDoc.GetNumberOfPages();
for (int i = 1; i <= numPages; i++)
{
doc.ShowTextAligned(new Paragraph(stampText),
36, 36, i, iText.Layout.Properties.TextAlignment.LEFT,
iText.Layout.Properties.VerticalAlignment.TOP, 0);
}
doc.Close();
}
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));
Document doc = new Document(pdfDoc);
// Add stamp (text) to each page
int numPages = pdfDoc.GetNumberOfPages();
for (int i = 1; i <= numPages; i++)
{
doc.ShowTextAligned(new Paragraph(stampText),
36, 36, i, iText.Layout.Properties.TextAlignment.LEFT,
iText.Layout.Properties.VerticalAlignment.TOP, 0);
}
doc.Close();
}
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 doc As New Document(pdfDoc)
' Add stamp (text) to each page
Dim numPages As Integer = pdfDoc.GetNumberOfPages()
For i As Integer = 1 To numPages
doc.ShowTextAligned(New Paragraph(stampText), 36, 36, i, iText.Layout.Properties.TextAlignment.LEFT, iText.Layout.Properties.VerticalAlignment.TOP, 0)
Next i
doc.Close()
End Sub
IronPDF kann Ihnen helfen, Text oder Bilder auf PDFs auf eine vielseitige und anpassbare Weise hinzuzufügen und bietet Ihnen die volle Kontrolle. Seine API ist einfach zu verstehen und zu bearbeiten, insbesondere für Entwickler, die mit HTML/CSS vertraut sind. iText verwendet seine Bild- und Textstempelwerkzeuge, um den Benutzern mehr Kontrolle über den Inhalt zu geben, der in ihren PDF-Dateien angezeigt wird, obwohl der Prozess letztendlich manueller sein kann.
DOCX in PDF umwandeln
Manchmal muss man PDFs von einem Format in ein anderes konvertieren. In diesem Fall betrachten wir die DOCX-zu-PDF-Konvertierung mit IronPDF und wie IronPDF und iText diesen Prozess unterschiedlich handhaben.
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")
iText
iText kann von sich aus keine DOCX-zu-PDF-Konvertierung durchführen; stattdessen verlässt es sich auf externe Bibliotheken wie DocX oder Aspose.Words.
IronPDF stellt Entwicklern ein unkompliziertes und prägnantes Tool zur Verfügung, um DOCX-zu-PDF-Konvertierungsaufgaben zu bewältigen, was es einfach macht, DOCX-Dateien in PDF-Format zu konvertieren, ohne auf externe Bibliotheken angewiesen zu sein. iText hingegen verlässt sich auf externe Bibliotheken, um diese Aufgabe auszuführen.
Zusammenfassung des Vergleichs der Codebeispiele

Für detailliertere Beispiele besuchen Sie IronPDF-Beispiele zur Erstellung von PDFs aus HTML.
Unterstützung von Bootstrap und Modern CSS Framework
Ein kritisches Thema, das oft bei realer Entwicklung auftritt, ist, wie gut jede Bibliothek moderne CSS-Frameworks verarbeitet. Mit Bootstrap, Tailwind CSS und Foundation als Grundlage der meisten modernen Webanwendungen kann die Framework-Kompatibilität den Entwicklungsworkflow und die Ausgabequalität erheblich beeinflussen.
IronPDF: Vollständige Unterstützung moderner Frameworks
Die Chrome-Rendering-Engine von IronPDF bietet vollständige, produktionsreife Unterstützung für alle modernen CSS-Frameworks:
- Bootstrap 5: Native Flexbox- und CSS Grid-Unterstützung für alle Layouts
- Tailwind CSS: Vollständige Unterstützung für Utility-First-Frameworks
- Modernes CSS3: Transformationen, Animationen, benutzerdefinierte Eigenschaften und erweiterte Selektoren
- Framework-Validierung: Die Bootstrap-Startseite und die Bootstrap-Vorlagen werden erfolgreich gerendert.
Codebeispiel: Bootstrap-Fortschrittsanzeigen
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapProgressBars = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h2 class='mb-4'>Project Progress Dashboard</h2>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Backend Development</span>
<span class='text-success fw-bold'>85%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar progress-bar-striped bg-success' role='progressbar'
style='width: 85%' aria-valuenow='85' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Frontend UI</span>
<span class='text-warning fw-bold'>60%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar progress-bar-animated bg-warning' role='progressbar'
style='width: 60%' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Testing & QA</span>
<span class='text-info fw-bold'>40%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar bg-info' role='progressbar'
style='width: 40%' aria-valuenow='40' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapProgressBars);
pdf.SaveAs("project-progress.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapProgressBars = @"
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h2 class='mb-4'>Project Progress Dashboard</h2>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Backend Development</span>
<span class='text-success fw-bold'>85%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar progress-bar-striped bg-success' role='progressbar'
style='width: 85%' aria-valuenow='85' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Frontend UI</span>
<span class='text-warning fw-bold'>60%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar progress-bar-animated bg-warning' role='progressbar'
style='width: 60%' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Testing & QA</span>
<span class='text-info fw-bold'>40%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar bg-info' role='progressbar'
style='width: 40%' aria-valuenow='40' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapProgressBars);
pdf.SaveAs("project-progress.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim bootstrapProgressBars As String = "
<!DOCTYPE html>
<html>
<head>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container my-5'>
<h2 class='mb-4'>Project Progress Dashboard</h2>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Backend Development</span>
<span class='text-success fw-bold'>85%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar progress-bar-striped bg-success' role='progressbar'
style='width: 85%' aria-valuenow='85' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Frontend UI</span>
<span class='text-warning fw-bold'>60%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar progress-bar-animated bg-warning' role='progressbar'
style='width: 60%' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
<div class='mb-4'>
<div class='d-flex justify-content-between mb-1'>
<span>Testing & QA</span>
<span class='text-info fw-bold'>40%</span>
</div>
<div class='progress' style='height: 25px;'>
<div class='progress-bar bg-info' role='progressbar'
style='width: 40%' aria-valuenow='40' aria-valuemin='0' aria-valuemax='100'>
</div>
</div>
</div>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(bootstrapProgressBars)
pdf.SaveAs("project-progress.pdf")
iText7: Eingeschränkte Framework-Unterstützung
iText7 verwendet einen benutzerdefinierten HTML-zu-PDF-Konverter (pdfHTML) mit erheblichen Einschränkungen für moderne CSS-Frameworks:
- Keine JavaScript Ausführung: Dynamische Bootstrap-Komponenten können nicht verarbeitet werden.
- Eingeschränkte Flexbox-Unterstützung: Bootstrap 4+-Layouts werden oft nicht korrekt dargestellt (Version 7.1.15 bietet nur teilweise Unterstützung).
- CSS Grid wird nicht unterstützt: Moderne, rasterbasierte Layouts funktionieren nicht.
- Manuelle Vorverarbeitung erforderlich: Komplexe Layouts benötigen externe Tools wie Selenium oder Puppeteer.
Laut der offiziellen iText-Dokumentation wird Entwicklern geraten:
- Vermeiden Sie komplexe CSS-Layouts einschließlich Flexbox
- Verwenden Sie auf Tabellen basierende Layouts anstelle moderner Rastersysteme
- Bootstrap-Komponenten auf einfaches HTML zu vereinfachen
- Gründliche Tests durchzuführen, da die Framework-Kompatibilität begrenzt ist
Auswirkungen in der Praxis: Wenn Ihre Anwendung Bootstrap für ihre Benutzeroberfläche verwendet und Sie PDF-Exporte benötigen, die zu Ihrem Webdesign passen, erfordert iText7 entweder eine umfassende HTML/CSS-Neugestaltung für die PDF-Generierung oder die Integration mit externen Browser-Automatisierungstools, was die Komplexität und die Entwicklungszeit erheblich erhöht.
Weitere umfassende Informationen zur CSS-Framework-Kompatibilität finden Sie im Leitfaden zu Bootstrap & Flexbox CSS.
Preisgestaltung und Lizenzierung: IronPDF vs. iText Library
IronPDF Preise und Lizenzierung
IronPDF-Lizenzierungsoptionen bieten verschiedene Ebenen und zusätzliche Funktionen für den Kauf einer Lizenz. Entwickler können auch [Iron Suite](Iron Suite) kaufen, um auf alle Produkte von Iron Software zum Preis von zwei zuzugreifen. Wenn Sie noch nicht bereit sind, eine Lizenz zu kaufen, stellt IronPDF eine kostenlose Testversion zur Verfügung, die 30 Tage dauert.
-
Unbefristete Lizenzen: Angebot einer Reihe von unbefristeten Lizenzen je nach Teamgröße, Projektanforderungen und Anzahl der Standorte. Jeder Lizenztyp kommt mit E-Mail-Support.
-
Lite License: Diese Lizenz unterstützt einen Entwickler, einen Standort und ein Projekt.
-
Plus Lizenz: Diese Lizenz unterstützt drei Entwickler, drei Standorte und drei Projekte und kostet $1,499. Die Plus-Lizenz bietet Chat-, Telefon- und E-Mail-Support.
-
Professional Lizenz: Geeignet für größere Teams, die zehn Entwickler, zehn Standorte und zehn Projekte für $2,999 unterstützen. Es bietet dieselben Support-Kanäle wie die vorherigen Stufen, zusätzlich Bildschirmteilen-Support.
-
Lizenzgebührenfreie Weiterverbreitung: Die Lizenz von IronPDF bietet auch eine lizenzgebührenfreie Weiterverbreitungsabdeckung für eine zusätzliche $2,999.
-
Unterbrechungsfreier Produktsupport: Erhalten Sie fortlaufende Produktaktualisierungen, Upgrades der Sicherheitsfunktionen und Unterstützung vom Entwicklungsteam für $1,499/Jahr oder einen einmaligen Kauf von $2,999 für eine 5-jährige Abdeckung.
- Iron Suite: Für $1,498 erhalten Sie Zugriff auf alle Iron Software Produkte, einschließlich IronPDF, IronOCR, IronWord, IronXL, IronBarcode, IronQR, IronZIP, IronPrint und IronWebscraper.

iText-Lizenzierung
-
AGPL-Lizenz: Die iText Core-Bibliothek ist quelloffen und Benutzern kostenlos verfügbar. Um iText unter diesem Lizenzmodell zu verwenden, müssen Benutzer dessen Bedingungen einhalten, und alle Änderungen, die an iText unter dieser Lizenz vorgenommen werden, müssen ebenfalls unter dem AGPL-Lizenzmodell veröffentlicht werden.
- Kommerzielle Lizenz: iText bietet ein kommerzielles Lizenzmodell für Entwickler an, deren Projekte nicht mit den AGPL-Bedingungen übereinstimmen, und die Preisgestaltung basiert auf Angeboten.
Dokumentation und Unterstützung: IronPDF vs. iText
IronPDF
-
Umfassende Dokumentation: Umfangreiche und benutzerfreundliche Dokumentation, die alle Funktionen abdeckt.
-
24/5 Support: Aktiver Ingenieurssupport ist verfügbar.
-
Videoanleitungen: Schritt-für-Schritt-Videoanleitungen sind auf YouTube verfügbar.
-
Community-Forum: Engagierte Community für zusätzlichen Support.
- Regelmäßige Updates: Monatliche Produktaktualisierungen mit den neuesten Funktionen und Sicherheitskorrekturen.
iText
-
Dokumentation: Umfassende Dokumentation, die die iText-Softwarefunktionen abdeckt.
-
Beispiele und Tutorials: Tutorials und Codebeispiele zu verschiedenen Funktionen.
-
GitHub: Entwickler können alle Probleme oder Bugs im iText GitHub-Repository einreichen und mit der iText-Gruppe kommunizieren.
- Updates: iText bietet regelmäßige Aktualisierungen und Verbesserungen.
Für weitere Details zur IronPDF-Dokumentation und -Support besuchen Sie IronPDF-Dokumentation und den Iron Software YouTube-Kanal.
Abschluss
Im Bereich der Werkzeuge zur PDF-Manipulation für .NET bieten sowohl IronPDF als auch iText robuste Fähigkeiten, die auf verschiedene Entwicklungsanforderungen zugeschnitten sind. IronPDF zeichnet sich durch seine einfache Integration über Plattformen wie .NET Core, Framework und Standard hinaus, alongside umfassende Funktionen wie HTML-zu-PDF-Konvertierung und erweiterte Sicherheitsoptionen, aus. iText hingegen, bekannt für sein Java-Erbe, bietet leistungsstarke Tools zur PDF-Erstellung und -manipulation unter sowohl Open-Source- als auch kommerziellen Lizenzen an, wobei der Schwerpunkt auf Vielseitigkeit und Anpassung liegt.
Die Wahl zwischen diesen Werkzeugen hängt letztendlich von den Projektanforderungen, den Lizenzierungspräferenzen und dem benötigten technischen Support ab. Ob Sie sich für die Einfachheit und Flexibilität von IronPDF oder das umfangreiche Funktionsset der quelloffenen PDF-Bibliothek iText entscheiden, Entwickler haben reichlich Ressourcen zur Hand, um PDF-Workflows in ihren Anwendungen effektiv zu verbessern.
Sie können die 30-tägige kostenlose Testversion ausprobieren, um die verfügbaren Funktionen zu testen.
Häufig gestellte Fragen
Wie kann ich HTML in PDF in C# konvertieren?
Sie können die RenderHtmlAsPdf-Methode von IronPDF verwenden, um HTML-Strings in PDFs zu konvertieren. Sie können auch HTML-Dateien mit RenderHtmlFileAsPdf in PDFs konvertieren.
Was sind die Hauptunterschiede zwischen IronPDF und iText?
IronPDF wird für seine Benutzerfreundlichkeit, umfassende Dokumentation und starken technischen Support gelobt, was es zu einer benutzerfreundlichen Option für Entwickler macht. iText, obwohl robust, erfordert oft mehr manuellen Aufwand und ist unter Open-Source (AGPL) und kommerziellen Lizenzen verfügbar.
Welche Lizenzierungsoptionen gibt es für PDF-Bibliotheken?
IronPDF bietet verschiedene permanente Lizenzen und eine gebührenfreie Option an, während iText eine kostenlose AGPL-Lizenz mit einer kommerziellen Option für Projekte bietet, die nicht mit AGPL konform sind.
Welche PDF-Bibliothek bietet besseren Support für Entwickler?
IronPDF liefert umfassende Dokumentation, 24/5 Ingenieursupport und ein aktives Community-Forum, um sicherzustellen, dass Entwickler Zugang zu aktuellen Ressourcen und Unterstützung haben.
Ist IronPDF mit verschiedenen .NET-Umgebungen kompatibel?
Ja, IronPDF ist mit .NET Core, .NET Standard und .NET Framework kompatibel und funktioniert in Umgebungen wie Windows, Linux, Mac, Docker, Azure und AWS.
Wie behandelt IronPDF die Verschlüsselung von PDFs?
IronPDF bietet eine einfache API zur Verschlüsselung von PDFs, die es Benutzern ermöglicht, Metadaten zu bearbeiten und Sicherheitseinstellungen einfach anzupassen, um Dokumentensicherheit und Konformität zu gewährleisten.
Kann IronPDF DOCX zu PDF konvertieren?
Ja, IronPDF übertrifft sich in der DOCX-zu-PDF-Konvertierung und bietet einen direkten und effizienten Prozess ohne externe Bibliotheken, wodurch Dokumentenkonvertierungsaufgaben innerhalb von Anwendungen vereinfacht werden.
Welche Funktionen machen IronPDF für die HTML-zu-PDF-Konvertierung bemerkenswert?
IronPDF nutzt einen ChromePdfRenderer für die HTML-zu-PDF-Konvertierung, der eine einfache Integration von HTML, CSS und JavaScript ermöglicht, um eine präzise Darstellung von Webinhalten in PDFs sicherzustellen.
Wie vergleichen sich IronPDF und iText in Bezug auf plattformübergreifende Kompatibilität?
Beide Bibliotheken unterstützen mehrere Betriebssysteme und Umgebungen, aber IronPDF bietet eine nahtlosere Erfahrung für Aufgaben wie HTML-zu-PDF-Konvertierung und PDF-Verschlüsselung.
Welche Hauptmerkmale bietet IronPDF?
IronPDF bietet Funktionen wie HTML-zu-PDF-Konvertierung, PDF-Dateimanipulation, Verschlüsselung und Entschlüsselung, Bearbeitungsmöglichkeiten, Wasserzeichen, PDF-Stempeln und digitale Signierung.



