Ir para o conteúdo do rodapé
COMPARAçãO DE PRODUTOS
Uma comparação entre HTML e PDF no IronPDF e no iText7.

Uma comparação entre IronPDF e iText7

Full Comparison

Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Itext on pricing, HTML support, and licensing.

View Full Comparison

Uma ferramenta simples e eficiente para manipular PDFs pode agilizar muitas tarefas e processos envolvidos na criação e edição de documentos PDF. No ecossistema .NET , existem duas bibliotecas populares – IronPDF e iText – que permitem a geração de PDFs sem qualquer dependência da Adobe. Ambas oferecem uma variedade de recursos, como criação, edição, conversão etc., mas este artigo se concentrará em comparar essas bibliotecas com base em três critérios: os recursos que elas oferecem, a qualidade da documentação fornecida e as políticas de preços adotadas por essas empresas para o uso de seus produtos.

Visão geral do IronPDF e do iText

IronPDF é uma biblioteca .NET de PDF de grande destaque que permite aos programadores criar, modificar e interagir com documentos PDF de forma fácil. Ele pode ser usado em diferentes ambientes .NET , incluindo Core, 8, 7, 6 e Framework, o que o torna altamente flexível para diversas necessidades de desenvolvimento. A principal característica do IronPDF é seu conjunto abrangente de funcionalidades, como conversão de HTML para PDF, capacidade de mesclar PDFs, criptografia de PDF e aplicação de assinaturas digitais, entre outras. A documentação é escrita de forma que os usuários possam entendê-la sem dificuldades, e a própria biblioteca conta com um sólido suporte técnico.

iText é uma das bibliotecas de PDF mais populares disponíveis for Java, bem como for .NET (C#). O iText Core 8 oferece uma solução programável de nível empresarial para criar e manipular arquivos PDF. O iText oferece suporte a diversos recursos e é distribuído sob licenças de código aberto (AGPL) e licenças comerciais. Isso significa que, graças à sua versatilidade, ela é capaz de abranger uma ampla gama de casos de uso durante projetos de transformação digital.

Compatibilidade entre plataformas

IronPDF e iText são compatíveis com diversas plataformas; Eles podem processar PDFs em diversos sistemas diferentes e dentro da .NET Framework. A seguir, compararemos as estruturas e plataformas suportadas para cada produto.

IronPDF:

Visão geral das plataformas suportadas IronPDF oferece suporte a uma ampla gama de plataformas e ambientes, garantindo integração e implantação perfeitas em diversos sistemas.

  • Versões do .NET :

    • .NET Core (8, 7, 6, 5 e 3.1+)
    • .NET Standard (2.0+)
    • .NET Framework (4.6.2 ou superior)
  • Ambientes de aplicativos: O IronPDF funciona em diversos ambientes de aplicativos, incluindo Windows, Linux, Mac, Docker, Azure e AWS.

  • IDEs: Funciona com IDEs como Microsoft Visual Studio, JetBrains Rider e ReSharper.

  • Sistemas Operacionais e Processadores: Suporta diversos sistemas operacionais e processadores, incluindo Windows, Mac, Linux, x64, x86 e ARM.

iText

  • Versões do .NET :

    • .NET Core (2.x, 3.x)
    • .NET Framework (4.6.1+)
    • .NET 5+
  • Ambientes de aplicativos: O iText oferece suporte a uma variedade de ambientes de aplicativos, graças ao seu suporte for Java e .NET (C#), incluindo Windows, Mac, Linux e Docker.

  • SO: Funciona nos sistemas operacionais Windows, macOS e Linux.

Comparação das principais funcionalidades: IronPDF vs. iText

A lista de principais recursos do IronPDF e do iText oferece uma variedade de funcionalidades e ferramentas para trabalhar com arquivos PDF. O objetivo da próxima seção será examinar algumas dessas funcionalidades mais detalhadamente e comparar as duas bibliotecas na execução de diferentes tarefas relacionadas a PDFs.

IronPDF

  • Conversão de HTML para PDF: Suporta HTML, CSS, JavaScript e imagens.

  • Manipulação de arquivos PDF: Dividir e mesclar documentos, alterar a formatação e editar documentos PDF existentes.

  • Segurança: Criptografia e descriptografia de PDF.

  • Edição: Adicione anotações, marcadores e esquemas.

  • Modelos: Aplique cabeçalhos, rodapés e números de página.

  • Marca d'água: Aplique facilmente marcas d'água de texto e imagem a arquivos PDF; Obtenha controle total usando HTML/CSS.

  • Carimbo em PDF: Carimbe imagens e texto em seus documentos PDF usando o IronPDF.

Para obter mais informações sobre o extenso conjunto de recursos que o IronPDF oferece, visite a página de recursos do IronPDF .

iText

  • Criação de PDF: Permite criar documentos PDF do zero.

  • Formulários: Crie e edite formulários em PDF.

  • Assinaturas digitais: Assine documentos PDF.

  • Compressão: Otimize o tamanho dos arquivos PDF.

  • Extração de conteúdo: Extrair texto e imagens de PDFs.

  • Código aberto: Disponível sob a licença AGPL.

  • Personalização: Alto nível de personalização para casos de uso avançados.

Comparação das funcionalidades de PDF entre IronPDF e iText

Conversão de HTML para PDF

Converter conteúdo HTML em PDF usando o IronPDF é uma tarefa realizada em muitos escritórios e espaços de trabalho diferentes. Abaixo estão exemplos de código comparando como o IronPDF e o iText abordam esse processo.

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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Ao converter HTML para PDF, o IronPDF oferece uma ferramenta concisa e prática para essa tarefa. Utilizando o ChromePdfRenderer para converter conteúdo HTML em PDFs, o IronPDF se destaca por fornecer aos usuários documentos PDF com qualidade impecável. Os usuários podem criar PDFs diretamente a partir de strings HTML ou incluir recursos externos, como imagens, com um caminho base opcional, conforme demonstrado no exemplo avançado. O iText , por outro lado, adota uma abordagem básica, utilizando sua classe HtmlConverter para criar documentos PDF a partir de um arquivo HTML.

Criptografando arquivos PDF

A criptografia e a descriptografia de arquivos PDF com o IronPDF são essenciais em muitos ambientes de trabalho. A seguir, veremos como o iText e o IronPDF lidam com a criptografia de PDFs.

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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

O IronPDF oferece aos usuários uma maneira simples de criptografar arquivos PDF, ao mesmo tempo que lhes proporciona bastante controle, como editar metadados e ajustar configurações de segurança, como tornar os documentos somente leitura ou restringir ações do usuário, como copiar e colar. Por outro lado, o iText emprega um método mais complexo e demorado, no qual a criptografia de PDF é aplicada durante a criação do documento, especificando senhas de proprietário e usuário, juntamente com permissões como direitos de impressão, utilizando padrões de criptografia como o AES-128.

Redigir conteúdo do PDF

Ocasionalmente, ao lidar com informações confidenciais ou privadas, pode ser necessário ocultar texto em PDFs usando o IronPDF . Os exemplos de código abaixo demonstram como você pode ocultar texto usando o IronPDF em comparação com o 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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

A ferramenta de redação do IronPDF é concisa e fácil de usar, necessitando apenas de algumas linhas de código para agilizar o processo de redação. Isso ajuda a aumentar a eficiência nas tarefas de redação de PDFs e oferece aos usuários uma maneira fácil de manter seus dados confidenciais e privados em segurança. O iText , por outro lado, não oferece uma ferramenta de redação integrada da mesma forma que o IronPDF. No entanto, ainda é possível cobrir dados sensíveis usando o método mostrado acima para sobrepor o conteúdo que os usuários desejam ocultar. Isso pode levar a potenciais problemas, já que esses retângulos não removem ou ocultam o texto corretamente, o que significa que outras pessoas podem copiar e colar os dados que estão sendo ocultados.

Assinar documentos em PDF

A capacidade de assinar digitalmente documentos PDF com o IronPDF pode economizar tempo, especialmente ao automatizar o processo. Aqui estão alguns trechos de código comparando como o IronPDF difere do iText em termos de assinatura digital de documentos.

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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Ao aplicar assinaturas digitais a arquivos PDF, o IronPDF apresenta uma ferramenta concisa, porém poderosa, para concluir esse processo. Sua simplicidade permite que o processo seja realizado rapidamente, economizando tempo para qualquer desenvolvedor que o implemente para suas necessidades de assinatura. O iText exige um processo mais longo e complexo para aplicar assinaturas digitais a arquivos PDF. Embora a possibilidade de usar diferentes opções de interface e teclas ofereça mais controle ao usuário, a complexidade de como essa ferramenta executa essa tarefa pode dificultar seu uso.

Aplicando marcas d'água a documentos PDF

A capacidade de adicionar e personalizar marcas d'água em PDFs com o IronPDF pode ser de grande ajuda para garantir a confidencialidade, proteger direitos autorais, reforçar a identidade visual da marca ou realizar qualquer tarefa que envolva informações sensíveis. A seguir, uma comparação de como o IronPDF e o iText aplicam marcas d'água a arquivos 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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

A API fácil e intuitiva do IronPDF permite que os usuários apliquem marcas d'água personalizadas aos seus arquivos PDF rapidamente, concedendo controle total sobre o processo. O uso de HTML/CSS simplifica ainda mais o processo sem perder o controle da personalização. A abordagem do iText para adicionar marcas d'água a PDFs exige mais trabalho manual, o que pode tornar o processo mais lento.

Inserir imagens e texto em um PDF

Há momentos em que as páginas de um PDF precisam ser personalizadas com texto ou imagens , de forma semelhante à aplicação de marcas d'água em arquivos PDF. Agora vamos comparar como o IronPDF e o iText realizam a inserção de conteúdo em um documento PDF.

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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

O IronPDF permite adicionar texto ou imagens a PDFs de forma versátil e personalizável, oferecendo controle total. Sua API é fácil de entender e usar, especialmente para desenvolvedores familiarizados com HTML/CSS. O iText utiliza suas ferramentas de inserção de imagens e texto para dar aos usuários mais controle sobre o conteúdo exibido em seus arquivos PDF, embora o processo possa acabar sendo mais manual.

Converter DOCX para PDF

Às vezes, você pode precisar converter PDFs de um formato para outro. Neste caso, estamos analisando a conversão de DOCX para PDF com o IronPDF e como o IronPDF e o iText lidam com esse processo de maneiras diferentes.

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")
$vbLabelText   $csharpLabel

iText

O iText, por si só, não consegue lidar com a conversão de DOCX para PDF; Em vez disso, depende de bibliotecas externas como DocX ou Aspose.Words.

O IronPDF oferece aos desenvolvedores uma ferramenta simples e concisa para lidar com tarefas de conversão de DOCX para PDF, facilitando a conversão de arquivos DOCX para o formato PDF sem a necessidade de bibliotecas externas. O iText , por outro lado, depende de bibliotecas externas para realizar essa tarefa.

Resumo da comparação dos exemplos de código

iText C# HTML para PDF Alternatives

Para exemplos mais detalhados, visite Exemplos do IronPDF de criação de PDFs a partir de HTML .

Suporte para Bootstrap e frameworks CSS modernos

Uma consideração crítica que frequentemente surge durante o desenvolvimento em situações reais é o quão bem cada biblioteca lida com os frameworks CSS modernos. Com Bootstrap, Tailwind CSS e Foundation formando a base da maioria das aplicações web contemporâneas, a compatibilidade entre frameworks pode impactar significativamente seu fluxo de trabalho de desenvolvimento e a qualidade do resultado.

IronPDF: Suporte completo ao framework moderno

O mecanismo de renderização Chrome do IronPDF oferece suporte completo e pronto para produção a todas as estruturas CSS modernas:

  • Bootstrap 5: Suporte nativo a flexbox e CSS Grid para todos os layouts
  • Tailwind CSS: Suporte completo para frameworks com foco em utilidade. CSS3 moderno: transformações, animações, propriedades personalizadas e seletores avançados.
  • Validação do framework: Renderiza com sucesso a página inicial do Bootstrap e os templates do Bootstrap.

Exemplo de código: Indicadores de progresso do Bootstrap

using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrap ProgressBars = @"
<!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 bootstrap ProgressBars = @"
<!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")
$vbLabelText   $csharpLabel

iText7: Suporte limitado ao framework

O iText7 utiliza um conversor personalizado de HTML para PDF (pdfHTML) com limitações significativas para frameworks CSS modernos:

  • Sem execução de JavaScript : Não é possível lidar com componentes Bootstrap dinâmicos.
  • Suporte limitado ao Flexbox: layouts do Bootstrap 4+ frequentemente não são renderizados corretamente (a versão 7.1.15 possui suporte parcial).
  • CSS Grid não suportado: layouts modernos baseados em grade não funcionarão
  • Pré-processamento manual necessário: Layouts complexos precisam de ferramentas externas como Selenium ou Puppeteer.

De acordo com a documentação oficial do iText , recomenda-se que os desenvolvedores:

  1. Evite layouts CSS complexos, incluindo flexbox.
  2. Utilize layouts baseados em tabelas em vez de sistemas de grade modernos.
  3. Simplifique os componentes do Bootstrap para HTML básico.
  4. Teste minuciosamente, pois a compatibilidade com a estrutura é limitada.

Impacto no mundo real: Se o seu aplicativo usa Bootstrap para a interface do usuário e você precisa de exportações em PDF que correspondam ao design da sua web, o iText7 exige uma reformulação significativa de HTML/CSS para a geração de PDFs ou a integração com ferramentas externas de automação de navegador, aumentando consideravelmente a complexidade e o tempo de desenvolvimento.

Para obter informações completas sobre a compatibilidade de frameworks CSS, consulte o Guia de CSS do Bootstrap e Flexbox .

Preços e licenciamento: IronPDF vs. iText Library

Preços e licenciamento do IronPDF

As opções de licenciamento do IronPDF oferecem vários níveis e recursos adicionais para a compra de uma licença. Os desenvolvedores também podem adquirir o Iron Suite , que dá acesso a todos os produtos da Iron Software pelo preço de dois. Se você ainda não está pronto para comprar uma licença, o IronPDF oferece uma versão de avaliação gratuita com duração de 30 dias.

  • Licenças perpétuas: Oferecemos uma variedade de licenças perpétuas, dependendo do tamanho da sua equipe, das necessidades do projeto e do número de locais. Cada tipo de licença inclui suporte por e-mail.

  • Licença Lite: Esta licença é válida para um desenvolvedor, um local e um projeto.

  • Licença Plus: Suporta três desenvolvedores, três locais e três projetos, custa $1,199. A licença Plus oferece suporte por chat, telefone e e-mail.

  • Licença Profissional: Adequada para equipes maiores, suportando dez desenvolvedores, dez locais e dez projetos para $2,399. Oferece os mesmos canais de suporte ao cliente que os planos anteriores, mas também oferece suporte para compartilhamento de tela.

  • Redistribuição livre de royalties: O licenciamento do IronPDF também oferece cobertura de redistribuição livre de royalties por um adicional $2,399.

  • Suporte ininterrupto ao produto: Acesse atualizações contínuas do produto, atualizações de recursos de segurança e suporte da equipe de engenharia por $1,199/ano ou por uma compra única de $2,399 para cobertura de 5 anos.

  • Iron Suite: Por $1,498, você terá acesso a todos os produtos da Iron Software , incluindo IronPDF, IronOCR, IronWord, IronXL, IronBarcode, IronQR, IronZIP, IronPrint e IronWebScraper.

 Comparação de Licenciamento do IronPDF

Licenciamento iText

  • Licença AGPL: A biblioteca iText Core é de código aberto e está disponível gratuitamente para os usuários. Para usar o iText sob este modelo de licenciamento, os usuários devem cumprir seus termos, e quaisquer modificações feitas no iText sob esta licença também devem ser liberadas sob o modelo de licenciamento AGPL.

  • Licença Comercial: A iText oferece um modelo de licenciamento comercial para desenvolvedores cujos projetos não estejam em conformidade com os termos da AGPL, e o preço é baseado em orçamentos.

Documentação e suporte: IronPDF vs. iText

IronPDF

  • Documentação completa: Documentação extensa e fácil de usar, abrangendo todos os recursos.

  • Suporte 24 horas por dia, 5 dias por semana: Suporte técnico ativo disponível.

  • Tutoriais em vídeo: Guias em vídeo passo a passo estão disponíveis no YouTube.

  • Fórum da Comunidade: Comunidade engajada para apoio adicional.

  • Atualizações regulares: Atualizações mensais do produto com os recursos mais recentes e correções de segurança.

iText

  • Documentação: Documentação detalhada que abrange os recursos do software iText.

  • Exemplos e tutoriais: Tutoriais e exemplos de código para diversas funcionalidades.

  • GitHub: Os desenvolvedores podem enviar quaisquer problemas ou bugs para o repositório do iText no GitHub e se comunicar com o grupo iText.

  • Atualizações: O iText oferece atualizações e melhorias regulares.

Para obter mais detalhes sobre a documentação e o suporte do IronPDF , visite a página de Documentação do IronPDF e o canal da Iron Software no YouTube .

Conclusão

No âmbito das ferramentas de manipulação de PDF for .NET, tanto o IronPDF quanto o iText oferecem recursos robustos, adaptados a diversas necessidades de desenvolvimento. O IronPDF se destaca pela sua integração direta em plataformas como .NET Core, Framework e Standard, além de recursos abrangentes como conversão de HTML para PDF e opções avançadas de segurança. Por outro lado, o iText, conhecido por sua herança em Java, oferece ferramentas poderosas de geração e manipulação de PDFs, tanto em licenças de código aberto quanto comerciais, enfatizando a versatilidade e a personalização.

A escolha entre essas ferramentas depende, em última análise, dos requisitos do projeto, das preferências de licenciamento e do nível de suporte técnico necessário. Quer opte pela simplicidade e flexibilidade do IronPDF ou pelo extenso conjunto de recursos da biblioteca PDF de código aberto iText, os desenvolvedores têm amplos recursos para otimizar os fluxos de trabalho de PDF em seus aplicativos.

Você pode experimentar o teste gratuito de 30 dias para conferir os recursos disponíveis.

ObserveiText é uma marca registrada de seu respectivo proprietário. Este site não é afiliado, endossado ou patrocinado pela iText. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.

Perguntas frequentes

Como posso converter HTML para PDF em C#?

Você pode usar o método RenderHtmlAsPdf do IronPDF para converter strings HTML em PDFs. Você também pode converter arquivos HTML em PDFs usando o RenderHtmlFileAsPdf .

Quais são as principais diferenças entre o IronPDF e o iText?

O IronPDF é elogiado pela sua facilidade de uso, documentação abrangente e forte suporte técnico, tornando-o uma opção amigável para desenvolvedores. O iText, embora robusto, geralmente exige mais esforço manual e está disponível sob licenças de código aberto (AGPL) e comerciais.

Quais opções de licenciamento estão disponíveis para bibliotecas de PDF?

A IronPDF oferece várias licenças perpétuas e uma opção livre de royalties, enquanto o iText fornece uma licença AGPL gratuita com uma opção comercial para projetos que não estejam em conformidade com a AGPL.

Qual biblioteca de PDF oferece melhor suporte para desenvolvedores?

O IronPDF oferece documentação completa, suporte técnico 24 horas por dia, 5 dias por semana, e um fórum ativo da comunidade, garantindo que os desenvolvedores tenham acesso a recursos e assistência atualizados.

O IronPDF é compatível com diferentes ambientes .NET?

Sim, o IronPDF é compatível com .NET Core, .NET Standard e .NET Framework, e funciona em ambientes como Windows, Linux, Mac, Docker, Azure e AWS.

Como o IronPDF lida com a criptografia de PDFs?

O IronPDF oferece uma API simples para criptografar PDFs, permitindo que os usuários editem metadados e ajustem as configurações de segurança facilmente, garantindo a segurança e a conformidade dos documentos.

O IronPDF consegue converter arquivos DOCX para PDF?

Sim, o IronPDF se destaca na conversão de DOCX para PDF, oferecendo um processo direto e eficiente sem a necessidade de bibliotecas externas, simplificando as tarefas de conversão de documentos dentro dos aplicativos.

Quais são as características que fazem o IronPDF se destacar na conversão de HTML para PDF?

O IronPDF utiliza um ChromePdfRenderer para conversão de HTML em PDF, permitindo fácil integração de HTML, CSS e JavaScript, garantindo a renderização precisa do conteúdo da web em PDFs.

Como o IronPDF e o iText se comparam em termos de compatibilidade entre plataformas?

Ambas as bibliotecas são compatíveis com vários sistemas operacionais e ambientes, mas o IronPDF oferece uma experiência mais simplificada para tarefas como conversão de HTML para PDF e criptografia de PDF.

Quais são as principais funcionalidades oferecidas pelo IronPDF?

O IronPDF oferece recursos como conversão de HTML para PDF, manipulação de arquivos PDF, criptografia e descriptografia, edição, marca d'água, carimbo digital em PDF e assinatura digital.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

A PHP Error was encountered

Severity: Warning

Message: sprintf(): Too few arguments

Filename: competitors/dialog_competitor_banner.php

Line Number: 111

Backtrace:

File: /var/www/ironpdf.com/application/views/products/competitors/dialog_competitor_banner.php
Line: 111
Function: sprintf

File: /var/www/ironpdf.com/application/views/products/blog/main_post.php
Line: 196
Function: view

File: /var/www/ironpdf.com/application/views/products/blog/blog_post.php
Line: 24
Function: include

File: /var/www/ironpdf.com/application/views/products/blog/index.php
Line: 83
Function: include

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 88
Function: view

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 552
Function: view

File: /var/www/ironpdf.com/application/controllers/Products/Blog.php
Line: 77
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

iText Logo

Cansado de renovações caras e atualizações de produtos desatualizadas?

IronPDF Logo

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim