USANDO O CONJUNTO DE FERRO

Guia de 2025: Melhores bibliotecas C# para PDF (Gratuitas primeiro, pagas quando necessário)

Quando a maioria das pessoas pensa no PDF (Formato de Documento Portátil), elas pensam em um arquivo cheio de informações. E eles estão certos, pois atualmente, PDFs são o formato de arquivo mais comumente usado para compartilhar informações e se tornaram um padrão. Mas quando programadores visualizam os PDFs, eles não veem apenas informações; eles analisam o formato, o tipo de conteúdo e outros aspectos técnicos dele.

Ao criar arquivos PDF programaticamente, manter a estrutura do conteúdo é a tarefa mais importante. E não é uma tarefa tão simples quanto parece, porque, quando dizemos conteúdo, não significa apenas texto, inclui imagens, gráficos, áudio e até vídeos. Além disso, editar PDFs programaticamente é uma exigência comum agora.

Na era da IA, queremos ter controle total sobre os PDFs. Às vezes, precisamos redigir texto devido a alguma política, proteger os PDFs para garantir a segurança dos arquivos sensíveis, extrair dados para processamento ou gerar relatórios dinamicamente. Há muitos casos de uso para esses processos. Esses são problemas comuns enfrentados por desenvolvedores ao processar arquivos PDF programaticamente:

  1. Como manter um layout formatado para um documento PDF ao lidar com todos os tipos de mídia como conteúdo

  2. Extraindo texto na ordem correta, especialmente se houver texto em colunas

  3. Restrições de memória ao processar documentos PDF com muitas páginas

  4. Manipulação de formulários é um problema importante enfrentado por desenvolvedores

  5. Conversão de arquivos PDF para outros tipos de documentos adequados

Para facilitar essa tarefa, as bibliotecas de PDF entram em cena. Neste artigo, discutiremos várias bibliotecas de PDF para C# como IronPDF e Aspose.PDF, e seus modelos de precificação. Vamos mergulhar em casos de uso práticos e entender como essas bibliotecas tornam a criação e manipulação de PDF programaticamente fácil e pronta para produção em poucos passos.

1. IronPDF: Biblioteca de PDF em C

IronPDF é uma biblioteca abrangente de PDF for .NET que os desenvolvedores podem usar para criar, editar documentos PDF, converter documentos PDF para qualquer outro formato e realizar muitas outras operações com PDF. Ela usa uma memória muito mínima ao processar grandes arquivos PDF. Ela funciona inteiramente em sua máquina local, então você não depende do processamento em nível de servidor para trabalhar com ela.

Esta biblioteca é compatível com as versões mais recentes do .NET Framework, e sua integração com os projetos .NET é muito suave. Você só precisa executar o seguinte comando no Gerenciador de Pacotes NuGet, e IronPDF estará pronto para uso no projeto:

Install-Package IronPDF

Você não precisa instalar nenhuma outra biblioteca, pois ela é totalmente independente de dependências externas. Quando você instala esta biblioteca, ela instala automaticamente todas as dependências necessárias de uma vez.

A característica mais importante do IronPDF é sua capacidade de converter HTML para PDF com precisão de pixels. IronPDF oferece vários métodos para criar documentos PDF a partir de conteúdo HTML. Você pode converter uma string HTML, um arquivo HTML ou um URL diretamente para PDF. Ele também suporta CSS e JavaScript para garantir que os documentos PDF gerados reflitam com precisão a renderização HTML original.

Além das operações básicas, IronPDF suporta formulários PDF, criptografia em todos os níveis, e adição de assinaturas digitais. Você pode extrair imagens e texto de arquivos PDF. Você também pode adicionar cabeçalhos e rodapés de texto ou HTML, mesclar e dividir PDFs, modificar vários segmentos de texto, e localizar e substituir texto. IronPDF não só suporta a criação de PDFs a partir de HTML, mas também suporta a conversão para PDF a partir de arquivos DOCX, RTF, MD e de imagem. Esta biblioteca é muito leve e muito eficiente para gerenciamento de memória (Menos de 10MB de memória necessários para operações básicas). O IronPDF acompanha seus marcos em relação à estabilidade e desempenho, que você pode acessar aqui.

O IronPDF oferece múltiplos níveis de suporte. Você pode entrar em contato com os engenheiros via chat ao vivo, criação de tickets ou e-mail. A equipe de suporte está disponível 24/7. O IronPDF também possui tutoriais detalhados e documentação que cobrem quase todos os tópicos que você pode precisar entender ou ter dúvidas.

O IronPDF é uma biblioteca pronta para produção que foi testada, otimizada e confiada por muitas empresas conhecidas para seus produtos ao vivo. Isso a torna uma das melhores bibliotecas de PDF para usar em seus projetos para operações de PDF. Vamos dar uma olhada nos exemplos de código da biblioteca IronPDF.

Exemplos de Código

Converter HTML para PDF

using IronPdf;
var renderer = new ChromePdfRenderer();

// 1. HTML String to PDF
var pdf1 = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf1.SaveAs("html-string.pdf");

// 2. HTML String with Assets (Images, CSS, JS)
var pdf2 = renderer.RenderHtmlAsPdf(
    "<img src='logo.png'><link rel='stylesheet' href='style.css'>",
    @"C:\assets\"
);
pdf2.SaveAs("html-with-assets.pdf");

// 3. HTML File to PDF
var pdf3 = renderer.RenderHtmlFileAsPdf("example.html");
pdf3.SaveAs("html-file.pdf");

// 4. URL to PDF
var pdf4 = renderer.RenderUrlAsPdf("https://ironpdf.com");
pdf4.SaveAs("url.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();

// 1. HTML String to PDF
var pdf1 = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf1.SaveAs("html-string.pdf");

// 2. HTML String with Assets (Images, CSS, JS)
var pdf2 = renderer.RenderHtmlAsPdf(
    "<img src='logo.png'><link rel='stylesheet' href='style.css'>",
    @"C:\assets\"
);
pdf2.SaveAs("html-with-assets.pdf");

// 3. HTML File to PDF
var pdf3 = renderer.RenderHtmlFileAsPdf("example.html");
pdf3.SaveAs("html-file.pdf");

// 4. URL to PDF
var pdf4 = renderer.RenderUrlAsPdf("https://ironpdf.com");
pdf4.SaveAs("url.pdf");
$vbLabelText   $csharpLabel

Extrair texto e imagens de PDFs

using IronPdf;
using IronSoftware.Drawing;
using System.Collections.Generic;

// Load PDF document
var pdf = PdfDocument.FromFile("sample.pdf");

// 1. Extract All Text
string allText = pdf.ExtractAllText();

// 2. Extract Text from Specific Page
string pageText = pdf.ExtractTextFromPage(0); 

// 3. Extract Text from Multiple Pages
for (int i = 0; i < pdf.PageCount; i++)
{
    string text = pdf.ExtractTextFromPage(i);
    Console.WriteLine($"Page {i + 1}: {text}");
}

// 4. Extract All Images
var allImages = pdf.ExtractAllImages();
foreach (var image in allImages)
{
    image.SaveAs($"image_{allImages.IndexOf(image)}.png");
}

// 5. Extract Images from Specific Page
List<AnyBitmap> pageImages = pdf.ExtractBitmapsFromPage(0);

// 6. Extract Raw Images (as byte arrays)
var rawImages = pdf.ExtractAllRawImages();
for (int i = 0; i < rawImages.Count; i++)
{
    System.IO.File.WriteAllBytes($"raw_image_{i}.png", rawImages[i]);
}

// 7. Extract Both Text & Images from Each Page
for (int i = 0; i < pdf.PageCount; i++)
{
    string text = pdf.ExtractTextFromPage(i);
    List<AnyBitmap> images = pdf.ExtractBitmapsFromPage(i);

    Console.WriteLine($"Page {i + 1}: {text}");
    Console.WriteLine($"Found {images.Count} images");
}
using IronPdf;
using IronSoftware.Drawing;
using System.Collections.Generic;

// Load PDF document
var pdf = PdfDocument.FromFile("sample.pdf");

// 1. Extract All Text
string allText = pdf.ExtractAllText();

// 2. Extract Text from Specific Page
string pageText = pdf.ExtractTextFromPage(0); 

// 3. Extract Text from Multiple Pages
for (int i = 0; i < pdf.PageCount; i++)
{
    string text = pdf.ExtractTextFromPage(i);
    Console.WriteLine($"Page {i + 1}: {text}");
}

// 4. Extract All Images
var allImages = pdf.ExtractAllImages();
foreach (var image in allImages)
{
    image.SaveAs($"image_{allImages.IndexOf(image)}.png");
}

// 5. Extract Images from Specific Page
List<AnyBitmap> pageImages = pdf.ExtractBitmapsFromPage(0);

// 6. Extract Raw Images (as byte arrays)
var rawImages = pdf.ExtractAllRawImages();
for (int i = 0; i < rawImages.Count; i++)
{
    System.IO.File.WriteAllBytes($"raw_image_{i}.png", rawImages[i]);
}

// 7. Extract Both Text & Images from Each Page
for (int i = 0; i < pdf.PageCount; i++)
{
    string text = pdf.ExtractTextFromPage(i);
    List<AnyBitmap> images = pdf.ExtractBitmapsFromPage(i);

    Console.WriteLine($"Page {i + 1}: {text}");
    Console.WriteLine($"Found {images.Count} images");
}
$vbLabelText   $csharpLabel

Editar documentos PDF: Cabeçalhos e Rodapés

using IronPdf;
using System;
var renderer = new ChromePdfRenderer();

// 1. Add Footer with Page Numbers
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<center><i>{page} of {total-pages}</i></center>",
    MaxHeight = 15, // mm
    DrawDividerLine = true
};
renderer.RenderingOptions.MarginBottom = 25;

// 2. Add Header with Logo
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<img src='logo.png'>",
    MaxHeight = 20, // mm
    BaseUrl = new Uri(@"C:\assets\images\").AbsoluteUri
};
renderer.RenderingOptions.MarginTop = 25;

// 3. Render HTML to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Document Title</h1><p>Content...</p>");
pdf.SaveAs("output.pdf");
using IronPdf;
using System;
var renderer = new ChromePdfRenderer();

// 1. Add Footer with Page Numbers
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<center><i>{page} of {total-pages}</i></center>",
    MaxHeight = 15, // mm
    DrawDividerLine = true
};
renderer.RenderingOptions.MarginBottom = 25;

// 2. Add Header with Logo
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<img src='logo.png'>",
    MaxHeight = 20, // mm
    BaseUrl = new Uri(@"C:\assets\images\").AbsoluteUri
};
renderer.RenderingOptions.MarginTop = 25;

// 3. Render HTML to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Document Title</h1><p>Content...</p>");
pdf.SaveAs("output.pdf");
$vbLabelText   $csharpLabel

Manipulação de formulários

using IronPdf;

// Load existing PDF with form fields
var pdf = PdfDocument.FromFile("EditableForm.pdf");

// Fill text fields
pdf.Form.FindFormField("firstname").Value = "John";
pdf.Form.FindFormField("lastname").Value = "Smith";
pdf.Form.FindFormField("email").Value = "john.smith@example.com";

// Fill radio button
pdf.Form.FindFormField("gender").Value = "Male";

// Fill dropdown/combobox
pdf.Form.FindFormField("country").Value = "USA";

// Fill checkbox ("Yes" to check, "No" to uncheck)
pdf.Form.FindFormField("subscribe").Value = "Yes";

// Fill textarea (use \r\n for line breaks)
pdf.Form.FindFormField("comments").Value = "This is a comment.\r\nSecond line here.";

// Save filled form
pdf.SaveAs("FilledForm.pdf");
using IronPdf;

// Load existing PDF with form fields
var pdf = PdfDocument.FromFile("EditableForm.pdf");

// Fill text fields
pdf.Form.FindFormField("firstname").Value = "John";
pdf.Form.FindFormField("lastname").Value = "Smith";
pdf.Form.FindFormField("email").Value = "john.smith@example.com";

// Fill radio button
pdf.Form.FindFormField("gender").Value = "Male";

// Fill dropdown/combobox
pdf.Form.FindFormField("country").Value = "USA";

// Fill checkbox ("Yes" to check, "No" to uncheck)
pdf.Form.FindFormField("subscribe").Value = "Yes";

// Fill textarea (use \r\n for line breaks)
pdf.Form.FindFormField("comments").Value = "This is a comment.\r\nSecond line here.";

// Save filled form
pdf.SaveAs("FilledForm.pdf");
$vbLabelText   $csharpLabel

Como você pode ver nos exemplos acima, você pode realizar qualquer operação em um arquivo PDF com apenas algumas linhas usando o IronPDF. É muito simples e direto. Os nomes dos métodos são fáceis de entender e implementar.

Licença

O IronPDF é gratuito para uso com fins de desenvolvimento, e você também pode baixar o teste gratuito. Mas para produção, você precisará comprar uma licença para o IronPDF. O modelo de licenciamento do IronPDF é flexível, pois oferece dois tipos de licenças:

  1. Licença por Assinatura

  2. Licença Perpétua

A Licença por Assinatura custará $59/mês (cobrada anualmente), que inclui 1 desenvolvedor, 1 projeto e 15.000 chamadas de API por ano. Chamadas de API adicionais custam $0,03 cada após a sua cota ser excedida.

A Licença Perpétua começa em $1,999 e possui múltiplas opções, que você pode escolher de acordo com suas necessidades. A melhor parte desta licença é que é um pagamento único. Você não precisa pagar novamente para usar o IronPDF.

Csharp Pdf Libraries Tool 1 related to Licença

2. Aspose.PDF for .NET

Aspose.PDF é também uma biblioteca PDF em C# desenvolvida pela Aspose como parte da sua suíte de bibliotecas .NET, amplamente usada comercialmente para tarefas relacionadas a PDFs, como criar relatórios complexos, documentos sensíveis, personalizar documentos PDF, entre outros. É uma das bibliotecas de PDF mais comumente usadas para C#. Também oferece suporte ao .NET Framework mais recente.

O Aspose.PDF pode criar documentos PDF não apenas a partir do conteúdo HTML, mas também suporta a extração de dados de arquivos XML para preencher os dados reais em vez de criar arquivos estáticos. Este recurso é muito útil para criar relatórios complexos. Semelhante ao IronPDF, você pode adicionar texto, imagens, gráficos e muitos outros tipos de conteúdo em arquivos PDF. O Aspose.PDF também oferece incorporações de assinaturas digitais, manipulação de anotações, cabeçalhos e rodapés, e extração de texto dos arquivos PDF. Você pode extrair os dados estruturados de um PDF. Esta biblioteca lida muito bem com edição de PDFs usando os recursos mencionados.

Além dessas vantagens da biblioteca Aspose.PDF, existem também várias desvantagens. A principal desvantagem desta biblioteca é seu preço muito alto (A partir de $1679), e seu modelo de preços é muito complexo de entender. Ao contrário do IronPDF, você tem que comprar o modelo para cada processo separadamente, como desenvolvimento e implantação. Além disso, esta biblioteca consome muitos recursos (excedendo 2GB ao gerar PDFs com mais de 400 imagens). Ela requer muita memória para lidar com as operações de PDF, e isso é realmente frustrante. Não há dúvida de que esta biblioteca é boa no que faz, mas tem uma curva de aprendizado muito íngreme. Seu código não é fácil de entender e requer uma sessão de aprendizado muito detalhada para compreender.

Exemplo de código

Gerar documentos PDF com Texto, Imagens e Tabelas

using Aspose.Pdf;
using Aspose.Pdf.Text;

using (var document = new Document())
{
    // Add page objects
    var page = document.Pages.Add();

    // Add image - requires Rectangle positioning (You can add tiff images as well)
    page.AddImage("logo.png", new Rectangle(20, 730, 120, 830));

    // Add text - requires manual positioning
    var header = new TextFragment("Company Report");
    header.TextState.Font = FontRepository.FindFont("Arial");
    header.TextState.FontSize = 24;
    header.HorizontalAlignment = HorizontalAlignment.Center;
    header.Position = new Position(130, 720);
    page.Paragraphs.Add(header);

    // Add table - extensive configuration required
    var table = new Table
    {
        ColumnWidths = "100 100 100",
        Border = new BorderInfo(BorderSide.Box, 1f, Color.Black),
        DefaultCellBorder = new BorderInfo(BorderSide.Box, 0.5f, Color.Gray),
        DefaultCellPadding = new MarginInfo(4.5, 4.5, 4.5, 4.5)
    };

    // Add header row
    var headerRow = table.Rows.Add();
    headerRow.Cells.Add("Name");
    headerRow.Cells.Add("Age");
    headerRow.Cells.Add("City");

    // Style each header cell individually
    foreach (Cell cell in headerRow.Cells)
    {
        cell.BackgroundColor = Color.LightGray;
        cell.DefaultCellTextState.FontSize = 12;
    }

    // Add data row
    var dataRow = table.Rows.Add();
    dataRow.Cells.Add("John Doe");
    dataRow.Cells.Add("30");
    dataRow.Cells.Add("New York");

    page.Paragraphs.Add(table);

    // Save document
    document.Save("Report.pdf");
}
using Aspose.Pdf;
using Aspose.Pdf.Text;

using (var document = new Document())
{
    // Add page objects
    var page = document.Pages.Add();

    // Add image - requires Rectangle positioning (You can add tiff images as well)
    page.AddImage("logo.png", new Rectangle(20, 730, 120, 830));

    // Add text - requires manual positioning
    var header = new TextFragment("Company Report");
    header.TextState.Font = FontRepository.FindFont("Arial");
    header.TextState.FontSize = 24;
    header.HorizontalAlignment = HorizontalAlignment.Center;
    header.Position = new Position(130, 720);
    page.Paragraphs.Add(header);

    // Add table - extensive configuration required
    var table = new Table
    {
        ColumnWidths = "100 100 100",
        Border = new BorderInfo(BorderSide.Box, 1f, Color.Black),
        DefaultCellBorder = new BorderInfo(BorderSide.Box, 0.5f, Color.Gray),
        DefaultCellPadding = new MarginInfo(4.5, 4.5, 4.5, 4.5)
    };

    // Add header row
    var headerRow = table.Rows.Add();
    headerRow.Cells.Add("Name");
    headerRow.Cells.Add("Age");
    headerRow.Cells.Add("City");

    // Style each header cell individually
    foreach (Cell cell in headerRow.Cells)
    {
        cell.BackgroundColor = Color.LightGray;
        cell.DefaultCellTextState.FontSize = 12;
    }

    // Add data row
    var dataRow = table.Rows.Add();
    dataRow.Cells.Add("John Doe");
    dataRow.Cells.Add("30");
    dataRow.Cells.Add("New York");

    page.Paragraphs.Add(table);

    // Save document
    document.Save("Report.pdf");
}
$vbLabelText   $csharpLabel

Você pode ver que o código requerido pelo Aspose.PDF para criar novos documentos PDF é muito complexo. Você precisa definir manualmente cada coordenada no próprio código. Você tem que estilizar manualmente cada elemento do objeto PDF, o que consome muito tempo e não é eficiente. No entanto, fornece controle granular sobre os documentos PDF.

Licença

O Aspose.PDF possui várias opções de licenciamento, mas a maioria delas é paga conforme o uso. O preço da licença começa em $1679. É muito caro em comparação com as opções de licença do IronPDF (começando em $1,999).

Csharp Pdf Libraries Tool 2 related to Licença

3. iTextSuite for .NET

iTextSuite (comumente conhecido como iText7 & iTextSharp) é o SDK para desenvolvimento de PDF oferecido pela Apryse. É uma suite abrangente que possui todas as ferramentas necessárias de que precisamos para realizar operações em PDF em aplicativos .NET. Semelhante às bibliotecas acima, você pode criar, editar, redigir, criptografar e realizar muitas outras operações em documentos PDF.

iTextSuite lida com todas as tarefas de criação e edição de PDF muito bem, seja a criação de faturas simples ou layouts complexos de relatórios relativos a módulos financeiros. Também não é pesado para o sistema e pode funcionar perfeitamente com documentos pesados. Processa documentos rapidamente e fornece o resultado sem qualquer atraso significativo.

Junto com todos esses bons recursos, também existem algumas desvantagens no iTextSuite que você deve saber antes de considerar esta biblioteca. O custo desta biblioteca é supostamente muito alto em comparação com as alternativas existentes no mercado. Seu preço original não está disponível em sua página de preços. Você precisa entrar em contato com o suporte ao cliente para obter uma cotação. Ela oferece também uma licença AGPL, mas requer que você torne seu produto código aberto ao usar o iTextSuite licenciado sob AGPL. Assim como o Aspose, também possui uma curva de aprendizado acentuada e não é amigável para iniciantes. A manipulação avançada de PDF requer um entendimento detalhado do PDF e da estrutura da biblioteca.

Exemplo de código

Criar uma Tabela de Documento PDF com Estilos e Cores

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

public void CreateStyledTable(string dest)
{
    using var writer = new PdfWriter(dest);
    using var pdf = new PdfDocument(writer);
    var document = new Document(pdf);

    // Create a 2-column table
    Table table = new Table(2, false);

    // Header cells with gray background
    Cell cell11 = new Cell(1, 1)
        .SetBackgroundColor(ColorConstants.GRAY)
        .SetTextAlignment(TextAlignment.CENTER)
        .Add(new Paragraph("State"));

    Cell cell12 = new Cell(1, 1)
        .SetBackgroundColor(ColorConstants.GRAY)
        .SetTextAlignment(TextAlignment.CENTER)
        .Add(new Paragraph("Capital"));

    // Data cells
    Cell cell21 = new Cell(1, 1)
        .SetTextAlignment(TextAlignment.CENTER)
        .Add(new Paragraph("New York"));

    Cell cell22 = new Cell(1, 1)
        .SetTextAlignment(TextAlignment.CENTER)
        .Add(new Paragraph("Albany"));

    Cell cell31 = new Cell(1, 1)
        .SetTextAlignment(TextAlignment.CENTER)
        .Add(new Paragraph("New Jersey"));

    Cell cell32 = new Cell(1, 1)
        .SetTextAlignment(TextAlignment.CENTER)
        .Add(new Paragraph("Trenton"));

    // Add all cells to table
    table.AddCell(cell11);
    table.AddCell(cell12);
    table.AddCell(cell21);
    table.AddCell(cell22);
    table.AddCell(cell31);
    table.AddCell(cell32);

    document.Add(table);
    document.Close();
}
using iText.Kernel.Colors;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;

public void CreateStyledTable(string dest)
{
    using var writer = new PdfWriter(dest);
    using var pdf = new PdfDocument(writer);
    var document = new Document(pdf);

    // Create a 2-column table
    Table table = new Table(2, false);

    // Header cells with gray background
    Cell cell11 = new Cell(1, 1)
        .SetBackgroundColor(ColorConstants.GRAY)
        .SetTextAlignment(TextAlignment.CENTER)
        .Add(new Paragraph("State"));

    Cell cell12 = new Cell(1, 1)
        .SetBackgroundColor(ColorConstants.GRAY)
        .SetTextAlignment(TextAlignment.CENTER)
        .Add(new Paragraph("Capital"));

    // Data cells
    Cell cell21 = new Cell(1, 1)
        .SetTextAlignment(TextAlignment.CENTER)
        .Add(new Paragraph("New York"));

    Cell cell22 = new Cell(1, 1)
        .SetTextAlignment(TextAlignment.CENTER)
        .Add(new Paragraph("Albany"));

    Cell cell31 = new Cell(1, 1)
        .SetTextAlignment(TextAlignment.CENTER)
        .Add(new Paragraph("New Jersey"));

    Cell cell32 = new Cell(1, 1)
        .SetTextAlignment(TextAlignment.CENTER)
        .Add(new Paragraph("Trenton"));

    // Add all cells to table
    table.AddCell(cell11);
    table.AddCell(cell12);
    table.AddCell(cell21);
    table.AddCell(cell22);
    table.AddCell(cell31);
    table.AddCell(cell32);

    document.Add(table);
    document.Close();
}
$vbLabelText   $csharpLabel

Pelo exemplo acima, você pode entender a complexidade do código para iTextSuite. Isso aumenta o tempo de desenvolvimento e a complexidade para a construção de grandes aplicações.

Licença

iTextSuite oferece dois modelos de licença. Um é comercial e o outro é uma licença AGPL. Você pode usar o iTextSuite em produção gratuitamente sob a licença AGPL, mas precisará tornar o seu produto código aberto também. Em relação à licença comercial, não há preço mencionado na página de licença. Você precisará solicitar uma cotação, ou pode entrar em contato com o suporte ao cliente.

Csharp Pdf Libraries Tool 3 related to Licença

4. PDFSharp

PDFSharp é uma solução open-source em C# para problemas em PDF que desenvolvedores enfrentam ao realizar operações em PDF programaticamente. Ele suporta as estruturas .NET mais recentes, incluindo também o .NET Core. É uma solução leve que cobre todas as necessidades básicas de um desenvolvedor em relação aos PDFs.

PDFSharp pode lidar com as operações em PDF mais comuns com facilidade. Você pode criar documentos, inserir imagens, desenhar formas e editar fontes e tamanhos de texto. Você pode colocar qualquer coisa em qualquer posição, pois o PDFSharp oferece controle total sobre o PDF.

No entanto, o PDFSharp tem certas limitações que você deve conhecer. Ele não suporta nativamente a conversão de HTML para PDF, e isso é uma grande desvantagem para os desenvolvedores, porque o HTML facilita muito o estilo e o posicionamento em PDFs. Seu desempenho é afetado quando ele precisa processar múltiplos arquivos grandes. Você não pode realizar operações complexas como criptografia e preenchimento de formulários. E não possui canais oficiais de suporte. Você conta apenas com a comunidade ou suas próprias habilidades de resolução de problemas se enfrentar qualquer problema ao trabalhar com esta biblioteca.

Exemplo de código

Criando um PDF com Múltiplos Estilos de Texto

using PdfSharp.Pdf;
using PdfSharp.Drawing;

// Create document
PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);

// Example of different font styles
XFont regularFont = new XFont("Arial", 12, XFontStyleEx.Regular);
XFont boldFont = new XFont("Arial", 12, XFontStyleEx.Bold);
XFont italicFont = new XFont("Arial", 12, XFontStyleEx.Italic);
XFont boldItalicFont = new XFont("Arial", 12, XFontStyleEx.BoldItalic);

// Position for the first text
double y = 50;
double x = 50;
double lineHeight = 20;

// Draw text in different styles - REQUIRES manual positioning
gfx.DrawString("Regular text in Arial", regularFont, XBrushes.Black, x, y);
y += lineHeight;
gfx.DrawString("Bold text in Arial", boldFont, XBrushes.Black, x, y);
y += lineHeight;
gfx.DrawString("Italic text in Arial", italicFont, XBrushes.Black, x, y);
y += lineHeight;
gfx.DrawString("Bold and Italic text in Arial", boldItalicFont, XBrushes.Black, x, y);

// Save document
document.Save("FormattedText.pdf");
using PdfSharp.Pdf;
using PdfSharp.Drawing;

// Create document
PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);

// Example of different font styles
XFont regularFont = new XFont("Arial", 12, XFontStyleEx.Regular);
XFont boldFont = new XFont("Arial", 12, XFontStyleEx.Bold);
XFont italicFont = new XFont("Arial", 12, XFontStyleEx.Italic);
XFont boldItalicFont = new XFont("Arial", 12, XFontStyleEx.BoldItalic);

// Position for the first text
double y = 50;
double x = 50;
double lineHeight = 20;

// Draw text in different styles - REQUIRES manual positioning
gfx.DrawString("Regular text in Arial", regularFont, XBrushes.Black, x, y);
y += lineHeight;
gfx.DrawString("Bold text in Arial", boldFont, XBrushes.Black, x, y);
y += lineHeight;
gfx.DrawString("Italic text in Arial", italicFont, XBrushes.Black, x, y);
y += lineHeight;
gfx.DrawString("Bold and Italic text in Arial", boldItalicFont, XBrushes.Black, x, y);

// Save document
document.Save("FormattedText.pdf");
$vbLabelText   $csharpLabel

O PDFSharp permanece uma escolha sólida para desenvolvedores que precisam de uma solução leve e gratuita para geração básica de PDF com controle preciso de posicionamento. Apenas esteja preparado para contornar suas limitações ou adicionar outras ferramentas para requisitos mais avançados.

Licença

O PDFSharp é distribuído sob a Licença MIT e é completamente gratuito para uso. Você só precisa incluir o aviso de copyright original e mencionar a licença em sua distribuição.

5. PDFPig

PDFPig é outra biblioteca de código aberto desenvolvida para desenvolvedores .NET que permite ler e extrair conteúdo de arquivos PDF. Esta biblioteca extrai a posição e o tamanho de letras individuais de documentos PDF. Ele recupera imagens, lê anotações e formulários em PDF, acessa hiperlinks e expõe documentos incorporados. Você também pode acessar os metadados do documento e visualizar a estrutura interna do PDF.

A biblioteca tem um bom desempenho em comparativos em relação a ferramentas .NET semelhantes e usa memória de forma eficiente. Ela oferece uma alternativa gratuita às opções comerciais. Recebe atualizações regulares e mantém documentação ativa no GitHub.

A biblioteca tem limitações claras que você deve conhecer. Ela não converte HTML ou outros formatos para PDF. Ela não pode gerar imagens de páginas de PDF, embora ferramentas separadas como docnet ou PDFtoImage possam preencher essa lacuna. Os formulários PDF são apenas para leitura; você não pode modificar ou adicionar valores de formulário. Para extração de tabelas, você precisa de ferramentas externas como Tabula Sharp ou Camelot Sharp. Você não pode adicionar ou editar hiperlinks ao construir documentos. Comparada a bibliotecas mais abrangentes como o IronPDF, a PDFPig oferece menos recursos e documentação menos extensa.

Exemplo de código

Extração Básica de Texto

using System;
using System.Collections.Generic;
using System.Linq;
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;

public static class Program
{
    public static void Main()
    {
        using (PdfDocument document = PdfDocument.Open(@"C:\path\to\file.pdf"))
        {
            foreach (Page page in document.GetPages())
            {
                // Extract all letters
                IReadOnlyList<Letter> letters = page.Letters;
                string text = string.Join(string.Empty, letters.Select(x => x.Value));

                // Extract words
                IEnumerable<Word> words = page.GetWords();

                // Extract images
                IEnumerable<IPdfImage> images = page.GetImages();
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;

public static class Program
{
    public static void Main()
    {
        using (PdfDocument document = PdfDocument.Open(@"C:\path\to\file.pdf"))
        {
            foreach (Page page in document.GetPages())
            {
                // Extract all letters
                IReadOnlyList<Letter> letters = page.Letters;
                string text = string.Join(string.Empty, letters.Select(x => x.Value));

                // Extract words
                IEnumerable<Word> words = page.GetWords();

                // Extract images
                IEnumerable<IPdfImage> images = page.GetImages();
            }
        }
    }
}
$vbLabelText   $csharpLabel

Licença

PDFPig é distribuído sob a Licença Apache 2.0, que só exige que você inclua o aviso de copyright original e o texto da licença em suas distribuições. Além desse requisito, você é completamente livre para usar esta biblioteca de qualquer maneira.

Conclusão

Em resumo, vamos comparar os modelos de preços e licenciamento dessas bibliotecas de PDF em C#.

IronPDF oferece planos de preços flexíveis adequados tanto para indivíduos como para empresas. É gratuito para fins de desenvolvimento e inclui um teste gratuito. Os preços são muito razoáveis, começando a partir de apenas $1,999. Com seu conjunto de recursos abrangente, excelente suporte e estabilidade pronta para produção, o IronPDF oferece o melhor valor pelo dinheiro.

Aspose.PDF segue um modelo pay-as-you-go com licenças começando em $1679, e é significativamente mais caro que as alternativas. Embora ofereça controle granular, a curva de aprendizado acentuada e os altos custos podem não se adequar a todos os orçamentos.

iTextSuite não publica preços transparentes em seu site. Você deve contatar a equipe de suporte para obter uma cotação, o que significa que o preço varia de caso a caso. Eles oferecem uma licença AGPL para uso gratuito, mas isso exige que você abra o código-fonte de todo o seu produto.

PDFSharp e PDFPig são completamente gratuitos sob as licenças MIT e Apache 2.0, respectivamente. No entanto, sua funcionalidade é limitada em comparação com as opções comerciais. PDFSharp carece de conversão de HTML para PDF e tem dificuldades com arquivos grandes, enquanto PDFPig é principalmente uma biblioteca somente leitura.

Escolher a biblioteca de PDF certa depende de suas necessidades específicas e orçamento. Se você precisa de operações básicas e tem expertise técnica, as opções de código aberto funcionam bem. No entanto, para aplicações ricas em recursos que requerem funcionalidades avançadas, suporte confiável e documentação abrangente, IronPDF destaca-se como a solução mais econômica e completa em recursos.