Tutorial e comparação de bibliotecas do SpirePDF em C# HTML para PDF
Converter HTML para PDF é um requisito fundamental para muitas aplicações .NET , desde a geração de faturas e relatórios até a criação de documentação e livros eletrônicos. Ao escolher entre IronPDF e Spire.PDF para suas necessidades de conversão de HTML para PDF, é essencial compreender seus pontos fortes, limitações e desempenho em situações reais. Esta comparação abrangente examina as capacidades de ambas as bibliotecas, ajudando você a tomar uma decisão informada para suas necessidades de geração de PDFs.
Quais são as principais diferenças entre o IronPDF e o Spire.PDF para conversão de HTML para PDF?
IronPDF é uma biblioteca .NET versátil para PDF, projetada para lidar com uma ampla gama de tarefas relacionadas a PDFs, incluindo conversão, edição, criação e leitura de arquivos PDF, entre outras. É conhecido pela facilidade de integração em aplicações .NET existentes, alto desempenho e suporte a padrões web modernos como HTML5, CSS3 e JavaScript. O mecanismo de renderização do IronPDF, baseado no Chrome, garante a geração de PDFs com perfeição de pixels a partir de conteúdo HTML.
Spire.PDF for .NET é outra poderosa biblioteca .NET para PDF que oferece um conjunto abrangente de recursos para criação e manipulação de PDFs. Ele oferece suporte a diversas funcionalidades de PDF, como extração de texto e imagem, preenchimento de formulários em PDF e assinaturas digitais. Embora abrangente em recursos, suas capacidades de conversão de HTML para PDF apresentam limitações específicas que os desenvolvedores devem levar em consideração.
| Categoria | Característica/Aspecto | IronPDF | Spire.PDF | Principal vantagem |
|---|---|---|---|---|
| **Arquitetura Central** | Filosofia de Design | APIs intuitivas e com foco na simplicidade. | Abordagem multiclasse, configuração manual | IronPDF: Desenvolvimento mais rápido |
| Complexidade da API | Métodos simples como `RenderHtmlAsPdf()` | É necessária uma abordagem multithread. | IronPDF: 70% menos código | |
| Curva de Aprendizagem | 1 a 2 dias típicos | 1 a 2 semanas normalmente | IronPDF: Adoção mais rápida | |
| **Suporte da plataforma** | Multiplataforma | Suporte nativo, sem pacotes adicionais. | Suporte limitado para Linux/macOS | IronPDF: Verdadeiramente multiplataforma |
| Versões .NET | .NET 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ | .NET Core 2.0+, Framework 2.0+ | Ambos: Amplo suporte de framework | |
| Sistemas Operacionais | Windows, Linux, macOS, nativo do Docker | Principalmente focado no Windows | IronPDF: Suporte mais amplo para sistemas operacionais | |
| **HTML para PDF** | Motor de renderização | Motor V8 totalmente cromado | Analisador HTML personalizado | IronPDF: fidelidade de navegador superior a 98% |
| Suporte a CSS3/HTML5 | Suporte completo | Limitado (apenas CSS básico) | IronPDF: Padrões modernos da web | |
| Execução de JavaScript | Suporte completo a JavaScript | Planejado, mas não implementado. | IronPDF: Conteúdo dinâmico pronto | |
| Fontes da Web | Fontes do Google, fontes do sistema | Suporte limitado a fontes | IronPDF: Flexibilidade tipográfica | |
| Velocidade de renderização | 0,8–1,2s típico | 0,5–0,8s para HTML simples | Spire: Mais rápido para HTML básico | |
| **Security & Encryption** | Níveis de criptografia | AES-256, manipuladores personalizados | Padrão AES-256 | Ambos: Padrão da indústria |
| Simplicidade da API | Classe de `SecuritySettings` única | Múltiplos métodos de segurança | IronPDF: Abordagem unificada | |
| **Manipulação de Conteúdo** | Método de Redação | Remoção de conteúdo verdadeira, API de uma linha | Sobreposição manual de retângulo | IronPDF: Pronto para conformidade |
| Marca d'água | Estilização completa baseada em HTML/CSS. | Baseado em texto com rotação | IronPDF: Marcas d'água sofisticadas | |
| **Conversão de arquivos** | DOCX para PDF | `DocxToPdfRenderer` integrado | Requer a biblioteca Spire.Doc. | IronPDF: Sem custo adicional |
| **Métricas de desempenho** | Uso de memória | 150–200 MB (mecanismo Chrome) | 80–120 MB | Spire: Menor consumo de memória |
| Suporte de rosca | Otimizado para async/await nativo | É necessário um fio STA | IronPDF: Padrões assíncronos modernos | |
| **Experiência do desenvolvedor** | Exemplos de código | Mais de 100 amostras prontas para uso | Exemplos básicos | IronPDF: Recursos abrangentes |
| Mensagens de erro | Descritivo, prático | Mensagens técnicas | IronPDF: Melhor depuração | |
| **Licensing & Pricing** | Nível inicial | Lite: $799 (1 dev, 1 project) | Developer: $1,199/year (1 dev) | IronPDF: Licença perpétua |
| Licença de Equipe | Plus: $1,199 (3 devs, 3 projects) | Site: US$ 4.599 (10 desenvolvedores) | IronPDF: Melhor valor para a equipe | |
| Opção de Suíte | Iron Suite: $1,498 (9 products) | Sem opção de suíte | IronPDF: Valor excepcional | |
| **Apoiar** | Suporte incluído | Sim, suporte técnico 24 horas por dia, 5 dias por semana. | Somente fórum (suporte pago à parte) | IronPDF: Suporte incluído |
| Canais de suporte | E-mail, chat, telefone, compartilhamento de tela | Fórum, e-mail (planos pagos) | IronPDF: Mais canais | |
| **Ideal para** | Casos de uso | Aplicativos web modernos, HTML/CSS complexo | Documentos simples, layouts básicos | Dependente do contexto |
Para obter informações mais detalhadas sobre o IronPDF, visite IronPDF .
Como se compara a compatibilidade entre plataformas entre as bibliotecas?
IronPDF
O IronPDF se destaca por sua ampla compatibilidade multiplataforma. Ele oferece suporte a uma ampla gama de ambientes dentro da .NET Framework, garantindo uma operação perfeita em diferentes plataformas. Segue abaixo um resumo da compatibilidade do IronPDF com diversas plataformas:
-
Versões do .NET :
- Totalmente escrito e compatível com C#, VB .NET e F#
- .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, como Windows, Linux, Mac, Docker, Azure e AWS.
- IDEs: Funciona com IDEs como Microsoft Visual Studio e JetBrains Rider & ReSharper.
- Sistemas Operacionais e Processadores: Suporta diversos sistemas operacionais e processadores, incluindo Windows, Mac, Linux, x64, x86 e ARM.
Para obter mais detalhes sobre a compatibilidade do IronPDF, visite a página de recursos do IronPDF .
Spire.PDF
O Spire.PDF tem suporte completo no ambiente .NET , mas, embora funcione no sistema operacional Windows, não possui o suporte nativo para Linux e macOS que o IronPDF oferece. Ao ser implementado no macOS ou no Linux, o Spire.PDF requer plugins diferentes para cada plataforma, o que pode complicar os cenários de implementação.
-
Suporte .NET :
- .NET Framework 2.0+
- .NET Core 2.0+
- Escrito em C#, com suporte para VB .NET
- Ambientes de aplicativos: O Spire.PDF funciona em diversos ambientes de aplicativos, como Windows e aplicativos ASP.NET . Ele também pode suportar Windows Forms.
Qual biblioteca oferece melhores recursos de conversão de HTML para PDF?
Funcionalidades do IronPDF
- Conversão para PDF: O IronPDF pode converter HTML em PDF . Com suporte completo aos padrões web modernos, você pode ter certeza de que o IronPDF sempre retornará PDFs perfeitos em pixels a partir do seu conteúdo HTML. O IronPDF também pode converter arquivos PDF de outros formatos, como DOCX , imagens, RTF e muito mais.
- Geração de PDF: Com o IronPDF, você pode gerar PDFs a partir de URLs, arquivos ASPX ou strings HTML.
- Recursos de segurança: Com o IronPDF, você sempre pode ter certeza de que seus arquivos PDF confidenciais estão seguros graças aos seus recursos de segurança . Use o IronPDF para criptografar seus arquivos PDF, definir senhas e permissões para seus arquivos PDF.
- Recursos de edição de PDF: Com o IronPDF , você pode processar documentos PDF existentes, editá-los e ler arquivos PDF com facilidade. O IronPDF oferece recursos de edição como adicionar cabeçalhos e rodapés , inserir texto e imagens nas páginas do PDF, adicionar marcas d'água personalizadas ao PDF, trabalhar com formulários em PDF e dividir ou mesclar arquivos PDF .
- Integração: Integra-se perfeitamente com aplicações ASP.NET e MVC.
- Suporte para versões em PDF: Compatível com as versões 1.2 a 1.7 do PDF.
Para obter uma lista completa dos recursos do IronPDF , visite Recursos do IronPDF .
Recursos do Spire.PDF
- Criação de PDFs: Crie PDFs do zero ou a partir de arquivos existentes.
- Extração de texto e imagem: Use o Spire.PDF para extrair páginas e conteúdo de PDFs.
- Manipulação de formulários PDF: Preencha e gerencie formulários em PDF.
- Conversão de PDF: Converta PDFs para outros formatos, como HTML, RTF e imagens.
- Manipulação de páginas: Insira, exclua e reordene páginas em um PDF.
- Suporte limitado a HTML: O mecanismo de conversão de HTML para PDF tem suporte limitado a CSS e JavaScript modernos. O plugin padrão baseado em Qt não suporta propriedades de quebra de página CSS nem reconhecimento de arquivos CSS externos, e a execução de JavaScript é um recurso planejado que ainda não foi totalmente implementado. Um ChromeHtmlConverter opcional está disponível para melhor renderização.
Renderização do Bootstrap e de frameworks CSS modernos
O desenvolvimento web moderno depende muito de frameworks CSS como o Bootstrap para o desenvolvimento rápido de interfaces de usuário e design responsivo. As bibliotecas de geração de PDF devem converter com precisão esses formatos para manter a qualidade profissional do documento e a consistência do design.
IronPDF: Suporte completo para Bootstrap e Tailwind
O mecanismo Chromium do IronPDF oferece suporte completo a todas as estruturas CSS modernas:
- Bootstrap 5: Suporte completo a flexbox e CSS Grid com todos os componentes responsivos. Bootstrap 4: Layouts de cartão completos, sistemas de navegação e classes utilitárias
- Tailwind CSS: Todas as classes utilitárias e modificadores responsivos
- Fundamentos: Sistemas completos de grades e componentes CSS3 moderno: Flexbox, Grid, propriedades personalizadas, animações e transformações.
Comprovado com exemplos reais: a página inicial e os modelos do Bootstrap convertem com precisão perfeita em cada pixel.
Exemplo de código: Cartões de membro da equipe com Bootstrap
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapTeam = @"
<!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'>
<h1 class='text-center mb-5'>Our Team</h1>
<div class='row row-cols-1 row-cols-md-3 g-4'>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>Jennifer Martinez</h5>
<p class='text-muted mb-3'>Chief Technology Officer</p>
<p class='card-text flex-grow-1'>Leading our technical vision and innovation strategy with over 15 years of experience in software architecture.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>David Chen</h5>
<p class='text-muted mb-3'>Head of Engineering</p>
<p class='card-text flex-grow-1'>Managing our engineering teams and ensuring product quality through rigorous testing and code review processes.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>Sarah Johnson</h5>
<p class='text-muted mb-3'>Product Manager</p>
<p class='card-text flex-grow-1'>Driving product strategy and customer satisfaction through data-driven decisions and user research.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
</div>
<div class='text-center mt-5'>
<h3>Join Our Team</h3>
<p class='text-muted mb-3'>We're always looking for talented individuals to join our growing team.</p>
<a href='#' class='btn btn-primary btn-lg'>View Open Positions</a>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapTeam);
pdf.SaveAs("team-members.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
string bootstrapTeam = @"
<!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'>
<h1 class='text-center mb-5'>Our Team</h1>
<div class='row row-cols-1 row-cols-md-3 g-4'>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>Jennifer Martinez</h5>
<p class='text-muted mb-3'>Chief Technology Officer</p>
<p class='card-text flex-grow-1'>Leading our technical vision and innovation strategy with over 15 years of experience in software architecture.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>David Chen</h5>
<p class='text-muted mb-3'>Head of Engineering</p>
<p class='card-text flex-grow-1'>Managing our engineering teams and ensuring product quality through rigorous testing and code review processes.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>Sarah Johnson</h5>
<p class='text-muted mb-3'>Product Manager</p>
<p class='card-text flex-grow-1'>Driving product strategy and customer satisfaction through data-driven decisions and user research.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
</div>
<div class='text-center mt-5'>
<h3>Join Our Team</h3>
<p class='text-muted mb-3'>We're always looking for talented individuals to join our growing team.</p>
<a href='#' class='btn btn-primary btn-lg'>View Open Positions</a>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(bootstrapTeam);
pdf.SaveAs("team-members.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim bootstrapTeam 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'>
<h1 class='text-center mb-5'>Our Team</h1>
<div class='row row-cols-1 row-cols-md-3 g-4'>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>Jennifer Martinez</h5>
<p class='text-muted mb-3'>Chief Technology Officer</p>
<p class='card-text flex-grow-1'>Leading our technical vision and innovation strategy with over 15 years of experience in software architecture.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>David Chen</h5>
<p class='text-muted mb-3'>Head of Engineering</p>
<p class='card-text flex-grow-1'>Managing our engineering teams and ensuring product quality through rigorous testing and code review processes.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
<div class='col'>
<div class='card h-100 shadow-sm text-center'>
<div class='card-body d-flex flex-column'>
<img src='https://via.placeholder.com/150' class='rounded-circle mx-auto mb-3' alt='Team member' style='width: 150px; height: 150px; object-fit: cover;'>
<h5 class='card-title'>Sarah Johnson</h5>
<p class='text-muted mb-3'>Product Manager</p>
<p class='card-text flex-grow-1'>Driving product strategy and customer satisfaction through data-driven decisions and user research.</p>
<div class='d-flex justify-content-center gap-2 mt-auto'>
<a href='#' class='btn btn-sm btn-outline-primary'>LinkedIn</a>
<a href='#' class='btn btn-sm btn-outline-secondary'>Email</a>
</div>
</div>
</div>
</div>
</div>
<div class='text-center mt-5'>
<h3>Join Our Team</h3>
<p class='text-muted mb-3'>We're always looking for talented individuals to join our growing team.</p>
<a href='#' class='btn btn-primary btn-lg'>View Open Positions</a>
</div>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(bootstrapTeam)
pdf.SaveAs("team-members.pdf")
Resultado: Uma página de equipe profissional com a grade de cartões do Bootstrap, alinhamento flexbox, imagens responsivas e componentes de botão — tudo renderizado com precisão no PDF.
Spire.PDF: Suporte limitado a HTML e frameworks modernos
O mecanismo de conversão de HTML para PDF do Spire.PDF apresenta limitações significativas para frameworks CSS modernos, conforme observado em sua própria documentação:
- Suporte limitado a CSS: Apenas CSS básico, sem recursos abrangentes de CSS3.
- Sem Flexbox: O Bootstrap 4/5 depende muito do Flexbox, que não é suportado.
- Sem CSS Grid: Sistemas de layout modernos que utilizam CSS Grid não serão renderizados corretamente.
- Limitações do JavaScript : Execução mínima de JavaScript em comparação com os navegadores modernos.
- Bootstrap 3 Maximum: Somente versões mais antigas do Bootstrap baseadas em tabelas funcionam de forma confiável.
- Layouts complexos falham: designs responsivos modernos exigem soluções alternativas complexas.
Problemas relatados por desenvolvedores com a conversão de Spire.PDF para HTML:
- As barras de navegação do Bootstrap apresentam problemas de layout.
- Os componentes de cartão com flexbox não se alinham corretamente.
- Os pontos de interrupção da grade responsiva são ignorados na saída em PDF.
- Os recursos modernos de CSS exigem reescritas manuais de CSS ou o uso de soluções alternativas.
Impacto no desenvolvimento: Aplicativos que utilizam Bootstrap 4+ ou frameworks CSS modernos enfrentam desafios significativos com o Spire.PDF. As equipes de desenvolvimento devem:
- Manter um CSS simplificado separado especificamente para a geração de PDFs (manutenção dupla)
- Faça o downgrade para o Bootstrap 3 ou abandone os frameworks completamente (limita os recursos modernos)
- Testar exaustivamente e reparar manualmente cada componente (processo demorado e que exige cuidado com os componentes).
Para projetos que exigem suporte a frameworks CSS modernos, as limitações de renderização HTML do Spire.PDF o tornam inadequado sem um grande esforço adicional de desenvolvimento e uma carga contínua de manutenção.
Para obter informações detalhadas sobre a compatibilidade com o Bootstrap, consulte o Guia de CSS do Bootstrap e Flexbox .
Como se comparam os exemplos de código para tarefas comuns em PDF?
Para ilustrar as capacidades do IronPDF e do Spire.PDF for .NET, compararemos a implementação de várias funcionalidades essenciais de PDF por meio de exemplos de código, dando a você uma ideia de como esses recursos podem ajudar em seus projetos de PDF.
Converter HTML para PDF
Exemplo do IronPDF :
using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external HTML assets: images, CSS, and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external HTML assets: images, CSS, and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
Imports IronPdf
' Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = True
' Instantiate Renderer
Dim renderer = New ChromePdfRenderer()
' Create a PDF from an HTML string using C#
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")
' Advanced Example with HTML Assets
' Load external HTML assets: images, CSS, and JavaScript.
' An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
Dim myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", "C:\site\assets\")
myAdvancedPdf.SaveAs("html-with-assets.pdf")
A classe ChromePdfRenderer no IronPDF utiliza um mecanismo completo do navegador Chrome para renderizar conteúdo HTML. Isso significa que as animações CSS3, a execução de JavaScript e as fontes web modernas são renderizadas exatamente como seriam no Chrome. O método RenderHtmlAsPdf() aceita strings HTML e caminhos base opcionais para carregar recursos externos, facilitando a conversão de documentos HTML simples e complexos. O renderizador suporta opções avançadas de renderização , incluindo tamanhos de papel personalizados, margens e configurações de atraso em JavaScript .
Exemplo em Spire.PDF:
using Spire.Pdf;
using Spire.Pdf.HtmlConverter;
using System.IO;
using System.Threading;
using System.Drawing;
namespace ConvertHtmlStringToPdfWithoutPlugin
{
class Program
{
static void Main(string[] args)
{
// Create a PdfDocument object
PdfDocument doc = new PdfDocument();
// Create a PdfPageSettings object
PdfPageSettings setting = new PdfPageSettings();
// Set page size and margins through the object
setting.Size = new SizeF(1000, 1000);
setting.Margins = new Spire.Pdf.Graphics.PdfMargins(20);
// Create a PdfHtmlLayoutFormat object
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
// Set IsWaiting property to true
htmlLayoutFormat.IsWaiting = true;
// Read HTML string from a .html file
string htmlString = File.ReadAllText(@"C:\Users\Administrator\Desktop\Document\Html\Sample.html");
// Load HTML from HTML string using LoadFromHTML method
Thread thread = new Thread(() =>
{ doc.LoadFromHTML(htmlString, true, setting, htmlLayoutFormat); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
// Save to a PDF file
doc.SaveToFile("HtmlStringToPdf.pdf");
}
}
}
using Spire.Pdf;
using Spire.Pdf.HtmlConverter;
using System.IO;
using System.Threading;
using System.Drawing;
namespace ConvertHtmlStringToPdfWithoutPlugin
{
class Program
{
static void Main(string[] args)
{
// Create a PdfDocument object
PdfDocument doc = new PdfDocument();
// Create a PdfPageSettings object
PdfPageSettings setting = new PdfPageSettings();
// Set page size and margins through the object
setting.Size = new SizeF(1000, 1000);
setting.Margins = new Spire.Pdf.Graphics.PdfMargins(20);
// Create a PdfHtmlLayoutFormat object
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
// Set IsWaiting property to true
htmlLayoutFormat.IsWaiting = true;
// Read HTML string from a .html file
string htmlString = File.ReadAllText(@"C:\Users\Administrator\Desktop\Document\Html\Sample.html");
// Load HTML from HTML string using LoadFromHTML method
Thread thread = new Thread(() =>
{ doc.LoadFromHTML(htmlString, true, setting, htmlLayoutFormat); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
// Save to a PDF file
doc.SaveToFile("HtmlStringToPdf.pdf");
}
}
}
Imports Spire.Pdf
Imports Spire.Pdf.HtmlConverter
Imports System.IO
Imports System.Threading
Imports System.Drawing
Namespace ConvertHtmlStringToPdfWithoutPlugin
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Create a PdfDocument object
Dim doc As New PdfDocument()
' Create a PdfPageSettings object
Dim setting As New PdfPageSettings()
' Set page size and margins through the object
setting.Size = New SizeF(1000, 1000)
setting.Margins = New Spire.Pdf.Graphics.PdfMargins(20)
' Create a PdfHtmlLayoutFormat object
Dim htmlLayoutFormat As New PdfHtmlLayoutFormat()
' Set IsWaiting property to true
htmlLayoutFormat.IsWaiting = True
' Read HTML string from a .html file
Dim htmlString As String = File.ReadAllText("C:\Users\Administrator\Desktop\Document\Html\Sample.html")
' Load HTML from HTML string using LoadFromHTML method
Dim thread As New Thread(Sub()
doc.LoadFromHTML(htmlString, True, setting, htmlLayoutFormat)
End Sub)
thread.SetApartmentState(ApartmentState.STA)
thread.Start()
thread.Join()
' Save to a PDF file
doc.SaveToFile("HtmlStringToPdf.pdf")
End Sub
End Class
End Namespace
A conversão de HTML para PDF do Spire.PDF requer a criação de vários objetos, incluindo PdfDocument, PdfPageSettings e PdfHtmlLayoutFormat. A conversão deve ser executada em uma thread Single Thread Apartment (STA), o que aumenta a complexidade da implementação. Usuários relataram que "o Spire gera um arquivo PDF que é apenas uma imagem." Algumas partes do CSS estão incorretas, como ignorar fontes em negrito", o que indica limitações na fidelidade de renderização do CSS.
O IronPDF utiliza o mecanismo de renderização do Chrome para conversão de HTML em PDF de alta fidelidade, garantindo uma representação precisa do conteúdo da web graças ao seu suporte aos padrões web modernos. O Spire.PDF também oferece uma conversão robusta de HTML para PDF, mas pode não atingir a mesma precisão de renderização do IronPDF e requer uma abordagem mais demorada e manual.
Como criptografar documentos PDF?
Exemplo do 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 = 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 = 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 = PdfPrintSecurity.FullPrintRights
' Change or set the document encryption password
pdf.Password = "my-password"
pdf.SaveAs("secured.pdf")
A classe SecuritySettings do IronPDF fornece uma API abrangente para gerenciar a segurança de PDFs. Você pode controlar permissões individuais com propriedades booleanas, definir diferentes níveis de direitos de impressão e gerenciar senhas separadamente de outras configurações de segurança. O design da API segue as convenções do .NET com enumerações fortemente tipadas como PdfPrintSecurity. Saiba mais sobre permissões e senhas de PDF na documentação.
Exemplo em Spire.PDF:
using Spire.Pdf;
using Spire.Pdf.Security;
// Create a PdfDocument object
PdfDocument pdf = new PdfDocument();
// Load a sample PDF file
pdf.LoadFromFile(@"E:\Files\sample.pdf");
// Encrypt the PDF file with a password
pdf.Security.Encrypt("open", "permission", PdfPermissionsFlags.Print | PdfPermissionsFlags.CopyContent, PdfEncryptionKeySize.Key128Bit);
// Save the result file
pdf.SaveToFile("Encrypt.pdf", FileFormat.PDF);
using Spire.Pdf;
using Spire.Pdf.Security;
// Create a PdfDocument object
PdfDocument pdf = new PdfDocument();
// Load a sample PDF file
pdf.LoadFromFile(@"E:\Files\sample.pdf");
// Encrypt the PDF file with a password
pdf.Security.Encrypt("open", "permission", PdfPermissionsFlags.Print | PdfPermissionsFlags.CopyContent, PdfEncryptionKeySize.Key128Bit);
// Save the result file
pdf.SaveToFile("Encrypt.pdf", FileFormat.PDF);
Imports Spire.Pdf
Imports Spire.Pdf.Security
' Create a PdfDocument object
Private pdf As New PdfDocument()
' Load a sample PDF file
pdf.LoadFromFile("E:\Files\sample.pdf")
' Encrypt the PDF file with a password
pdf.Security.Encrypt("open", "permission", PdfPermissionsFlags.Print Or PdfPermissionsFlags.CopyContent, PdfEncryptionKeySize.Key128Bit)
' Save the result file
pdf.SaveToFile("Encrypt.pdf", FileFormat.PDF)
A abordagem de criptografia do Spire.PDF usa o método Security.Encrypt() com flags bit a bit para permissões. Embora mais compacta, essa abordagem exige conhecimento de operações bit a bit e oferece menos controle granular em comparação com as propriedades de permissão individuais do IronPDF.
Ambas as bibliotecas oferecem métodos fáceis de usar para criptografar PDFs e definir a legibilidade dos documentos PDF criptografados. O IronPDF oferece uma abordagem simples, ao mesmo tempo que lhe dá controlo total sobre as definições de segurança do seu PDF. O Spire.PDF tem um processo ligeiramente mais curto, mas ainda inclui opções adicionais para definir permissões.
Quais são as opções para redigir conteúdo em PDF?
Exemplo do IronPDF :
using IronPdf;
// Load the PDF document
PdfDocument pdf = PdfDocument.FromFile("novel.pdf");
// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");
// Save the redacted document
pdf.SaveAs("redacted.pdf");
using IronPdf;
// Load the PDF document
PdfDocument pdf = PdfDocument.FromFile("novel.pdf");
// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");
// Save the redacted document
pdf.SaveAs("redacted.pdf");
Imports IronPdf
' Load the PDF document
Private pdf As PdfDocument = PdfDocument.FromFile("novel.pdf")
' Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are")
' Save the redacted document
pdf.SaveAs("redacted.pdf")
O IronPDF oferece uma API de redação dedicada que realiza a remoção completa do conteúdo, e não apenas o mascaramento visual. O método RedactTextOnAllPages() busca e remove permanentemente o texto especificado, garantindo a conformidade com as normas de proteção de dados. Métodos adicionais permitem a redação de textos em páginas ou regiões específicas.
Exemplo de Spire.PDF para redação via sobreposição retangular:
Embora o Spire.PDF não possua uma ferramenta de redação dedicada, o conteúdo ainda pode ser redigido manualmente, conforme demonstrado abaixo:
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
// Specify the input PDF file path
string inputPdfFilePath = "path/to/your/input.pdf";
// Specify the output redacted PDF file path
string outputPdfFilePath = "path/to/your/redacted_output.pdf";
// Create a new PdfDocument object
PdfDocument pdfDocument = new PdfDocument();
// Load the existing PDF document
pdfDocument.LoadFromFile(inputPdfFilePath);
// Redact content on each page
foreach (PdfPageBase page in pdfDocument.Pages)
{
// Define the area to redact (e.g., coordinates and size of the rectangle)
RectangleF redactArea = new RectangleF(100, 100, 200, 50); // Example coordinates and size
// Apply redaction
page.Canvas.DrawRectangle(new PdfSolidBrush(Color.Black), redactArea);
}
// Save the redacted PDF document
pdfDocument.SaveToFile(outputPdfFilePath);
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
// Specify the input PDF file path
string inputPdfFilePath = "path/to/your/input.pdf";
// Specify the output redacted PDF file path
string outputPdfFilePath = "path/to/your/redacted_output.pdf";
// Create a new PdfDocument object
PdfDocument pdfDocument = new PdfDocument();
// Load the existing PDF document
pdfDocument.LoadFromFile(inputPdfFilePath);
// Redact content on each page
foreach (PdfPageBase page in pdfDocument.Pages)
{
// Define the area to redact (e.g., coordinates and size of the rectangle)
RectangleF redactArea = new RectangleF(100, 100, 200, 50); // Example coordinates and size
// Apply redaction
page.Canvas.DrawRectangle(new PdfSolidBrush(Color.Black), redactArea);
}
// Save the redacted PDF document
pdfDocument.SaveToFile(outputPdfFilePath);
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
' Specify the input PDF file path
Private inputPdfFilePath As String = "path/to/your/input.pdf"
' Specify the output redacted PDF file path
Private outputPdfFilePath As String = "path/to/your/redacted_output.pdf"
' Create a new PdfDocument object
Private pdfDocument As New PdfDocument()
' Load the existing PDF document
pdfDocument.LoadFromFile(inputPdfFilePath)
' Redact content on each page
For Each page As PdfPageBase In pdfDocument.Pages
' Define the area to redact (e.g., coordinates and size of the rectangle)
Dim redactArea As New RectangleF(100, 100, 200, 50) ' Example coordinates and size
' Apply redaction
page.Canvas.DrawRectangle(New PdfSolidBrush(Color.Black), redactArea)
Next page
' Save the redacted PDF document
pdfDocument.SaveToFile(outputPdfFilePath)
Essa abordagem manual exige o cálculo das coordenadas exatas de cada área de redação e oferece apenas mascaramento visual, em vez de remoção efetiva do conteúdo. O texto original ainda pode ser extraído por meio de ferramentas de edição de PDF.
O IronPDF simplifica a redação com sua ferramenta de redação robusta e intuitiva. O Spire.PDF exige mais trabalho manual para redação devido à ausência de uma ferramenta de redação integrada, o que pode resultar em fluxos de trabalho menos eficientes.
Como assinar documentos PDF?
Exemplo do IronPDF :
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
// Instantiate the renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");
// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
// Create PdfSignature with certificate
var sig = new PdfSignature(cert);
// Sign PDF document
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
// Instantiate the renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");
// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
// Create PdfSignature with certificate
var sig = new PdfSignature(cert);
// Sign PDF document
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates
' Instantiate the renderer
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>foo</h1>")
' Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
Private cert As New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)
' Create PdfSignature with certificate
Private sig = New PdfSignature(cert)
' Sign PDF document
pdf.Sign(sig)
pdf.SaveAs("signed.pdf")
A implementação de assinatura digital do IronPDF segue os padrões de tratamento de certificados do .NET . A classe PdfSignature aceita objetos X509Certificate2 padrão e lida internamente com as complexidades da assinatura de PDFs. Você também pode adicionar aparências visuais à assinatura e configurar os campos da assinatura.
Exemplo em Spire.PDF:
using Spire.Pdf;
using Spire.Pdf.Security;
using System.Drawing;
// Create a PdfDocument object
PdfDocument doc = new PdfDocument();
// Load a sample PDF file
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\sample.pdf");
// Load the certificate
PdfCertificate cert = new PdfCertificate("C:\\Users\\Administrator\\Desktop\\MyCertificate.pfx", "e-iceblue");
// Create a PdfSignature object and specify its position and size
PdfSignature signature = new PdfSignature(doc, doc.Pages[doc.Pages.Count - 1], cert, "MySignature");
RectangleF rectangleF = new RectangleF(doc.Pages[0].ActualSize.Width - 260 - 54 , 200, 260, 110);
signature.Bounds = rectangleF;
signature.Certificated = true;
// Set the graphics mode to ImageAndSignDetail
signature.GraphicsMode = GraphicMode.SignImageAndSignDetail;
// Set various details about the signature
signature.NameLabel = "Signer:";
signature.Name = "Gary";
signature.ContactInfoLabel = "Phone:";
signature.ContactInfo = "0123456";
signature.DateLabel = "Date:";
signature.Date = DateTime.Now;
signature.LocationInfoLabel = "Location:";
signature.LocationInfo = "USA";
signature.ReasonLabel = "Reason:";
signature.Reason = "I am the author";
signature.DistinguishedNameLabel = "DN:";
signature.DistinguishedName = signature.Certificate.IssuerName.Name;
// Set the signature image source
signature.SignImageSource = PdfImage.FromFile("C:\\Users\\Administrator\\Desktop\\handwrittingSignature.png");
// Set the signature font
signature.SignDetailsFont = new PdfTrueTypeFont(new Font("Arial Unicode MS", 12f, FontStyle.Regular));
// Set the document permission to forbid changes but allow form fill
signature.DocumentPermissions = PdfCertificationFlags.ForbidChanges | PdfCertificationFlags.AllowFormFill;
// Save to file
doc.SaveToFile("VisiableSignature.pdf");
using Spire.Pdf;
using Spire.Pdf.Security;
using System.Drawing;
// Create a PdfDocument object
PdfDocument doc = new PdfDocument();
// Load a sample PDF file
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\sample.pdf");
// Load the certificate
PdfCertificate cert = new PdfCertificate("C:\\Users\\Administrator\\Desktop\\MyCertificate.pfx", "e-iceblue");
// Create a PdfSignature object and specify its position and size
PdfSignature signature = new PdfSignature(doc, doc.Pages[doc.Pages.Count - 1], cert, "MySignature");
RectangleF rectangleF = new RectangleF(doc.Pages[0].ActualSize.Width - 260 - 54 , 200, 260, 110);
signature.Bounds = rectangleF;
signature.Certificated = true;
// Set the graphics mode to ImageAndSignDetail
signature.GraphicsMode = GraphicMode.SignImageAndSignDetail;
// Set various details about the signature
signature.NameLabel = "Signer:";
signature.Name = "Gary";
signature.ContactInfoLabel = "Phone:";
signature.ContactInfo = "0123456";
signature.DateLabel = "Date:";
signature.Date = DateTime.Now;
signature.LocationInfoLabel = "Location:";
signature.LocationInfo = "USA";
signature.ReasonLabel = "Reason:";
signature.Reason = "I am the author";
signature.DistinguishedNameLabel = "DN:";
signature.DistinguishedName = signature.Certificate.IssuerName.Name;
// Set the signature image source
signature.SignImageSource = PdfImage.FromFile("C:\\Users\\Administrator\\Desktop\\handwrittingSignature.png");
// Set the signature font
signature.SignDetailsFont = new PdfTrueTypeFont(new Font("Arial Unicode MS", 12f, FontStyle.Regular));
// Set the document permission to forbid changes but allow form fill
signature.DocumentPermissions = PdfCertificationFlags.ForbidChanges | PdfCertificationFlags.AllowFormFill;
// Save to file
doc.SaveToFile("VisiableSignature.pdf");
Imports Spire.Pdf
Imports Spire.Pdf.Security
Imports System.Drawing
' Create a PdfDocument object
Private doc As New PdfDocument()
' Load a sample PDF file
doc.LoadFromFile("C:\Users\Administrator\Desktop\sample.pdf")
' Load the certificate
Dim cert As New PdfCertificate("C:\Users\Administrator\Desktop\MyCertificate.pfx", "e-iceblue")
' Create a PdfSignature object and specify its position and size
Dim signature As New PdfSignature(doc, doc.Pages(doc.Pages.Count - 1), cert, "MySignature")
Dim rectangleF As New RectangleF(doc.Pages(0).ActualSize.Width - 260 - 54, 200, 260, 110)
signature.Bounds = rectangleF
signature.Certificated = True
' Set the graphics mode to ImageAndSignDetail
signature.GraphicsMode = GraphicMode.SignImageAndSignDetail
' Set various details about the signature
signature.NameLabel = "Signer:"
signature.Name = "Gary"
signature.ContactInfoLabel = "Phone:"
signature.ContactInfo = "0123456"
signature.DateLabel = "Date:"
signature.Date = DateTime.Now
signature.LocationInfoLabel = "Location:"
signature.LocationInfo = "USA"
signature.ReasonLabel = "Reason:"
signature.Reason = "I am the author"
signature.DistinguishedNameLabel = "DN:"
signature.DistinguishedName = signature.Certificate.IssuerName.Name
' Set the signature image source
signature.SignImageSource = PdfImage.FromFile("C:\Users\Administrator\Desktop\handwrittingSignature.png")
' Set the signature font
signature.SignDetailsFont = New PdfTrueTypeFont(New Font("Arial Unicode MS", 12F, FontStyle.Regular))
' Set the document permission to forbid changes but allow form fill
signature.DocumentPermissions = PdfCertificationFlags.ForbidChanges Or PdfCertificationFlags.AllowFormFill
' Save to file
doc.SaveToFile("VisiableSignature.pdf")
O Spire.PDF oferece amplo controle sobre a aparência da assinatura, mas requer significativamente mais código. Você deve definir manualmente cada rótulo, posicionar a assinatura com precisão e configurar os elementos visuais separadamente.
A assinatura digital de PDFs pode ser útil em diversos contextos, desde a autenticação de documentos PDF até a simples aprovação de um novo projeto. O IronPDF oferece uma abordagem direta para adicionar assinaturas digitais, permitindo a fácil automatização do processo de assinatura. O Spire.PDF também suporta assinaturas digitais para PDFs; No entanto, o processo pode ser mais manual e exigir mais esforço para ser implementado.
Quais são os métodos disponíveis para adicionar marcas d'água a PDFs?
Exemplo do 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")
O recurso de marca d'água do IronPDF aceita conteúdo HTML, permitindo que você use CSS para estilização. O método ApplyWatermark() fornece parâmetros para o ângulo de rotação e alinhamento, facilitando o posicionamento preciso de marcas d'água. Saiba mais sobre marcas d'água personalizadas e opções avançadas de estilo.
Exemplo em Spire.PDF:
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
// Create a PdfDocument object
PdfDocument pdf = new PdfDocument();
// Load a sample PDF document
pdf.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.pdf");
// Create a PdfTrueTypeFont object
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 50f), true);
// Set the watermark text
string text = "CONFIDENTIAL";
// Measure the text size
SizeF textSize = font.MeasureString(text);
// Calculate the values of two offset variables,
// which will be used to calculate the translation amount of the coordinate system
float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);
// Traverse all the pages in the document
foreach (PdfPageBase page in pdf.Pages)
{
// Set the page transparency
page.Canvas.SetTransparency(0.8f);
// Translate the coordinate system by specified coordinates
page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2);
// Rotate the coordinate system 45 degrees counterclockwise
page.Canvas.RotateTransform(-45);
// Draw watermark text on the page
page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0);
}
// Save the changes to another file
pdf.SaveToFile("TextWatermark.pdf");
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
// Create a PdfDocument object
PdfDocument pdf = new PdfDocument();
// Load a sample PDF document
pdf.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.pdf");
// Create a PdfTrueTypeFont object
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 50f), true);
// Set the watermark text
string text = "CONFIDENTIAL";
// Measure the text size
SizeF textSize = font.MeasureString(text);
// Calculate the values of two offset variables,
// which will be used to calculate the translation amount of the coordinate system
float offset1 = (float)(textSize.Width * System.Math.Sqrt(2) / 4);
float offset2 = (float)(textSize.Height * System.Math.Sqrt(2) / 4);
// Traverse all the pages in the document
foreach (PdfPageBase page in pdf.Pages)
{
// Set the page transparency
page.Canvas.SetTransparency(0.8f);
// Translate the coordinate system by specified coordinates
page.Canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2);
// Rotate the coordinate system 45 degrees counterclockwise
page.Canvas.RotateTransform(-45);
// Draw watermark text on the page
page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0);
}
// Save the changes to another file
pdf.SaveToFile("TextWatermark.pdf");
Imports System
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
' Create a PdfDocument object
Private pdf As New PdfDocument()
' Load a sample PDF document
pdf.LoadFromFile("C:\Users\Administrator\Desktop\sample.pdf")
' Create a PdfTrueTypeFont object
Dim font As New PdfTrueTypeFont(New Font("Arial", 50F), True)
' Set the watermark text
Dim text As String = "CONFIDENTIAL"
' Measure the text size
Dim textSize As SizeF = font.MeasureString(text)
' Calculate the values of two offset variables,
' which will be used to calculate the translation amount of the coordinate system
Dim offset1 As Single = CSng(textSize.Width * Math.Sqrt(2) / 4)
Dim offset2 As Single = CSng(textSize.Height * Math.Sqrt(2) / 4)
' Traverse all the pages in the document
For Each page As PdfPageBase In pdf.Pages
' Set the page transparency
page.Canvas.SetTransparency(0.8F)
' Translate the coordinate system by specified coordinates
page.Canvas.TranslateTransform(page.Canvas.Size.Width \ 2 - offset1 - offset2, page.Canvas.Size.Height \ 2 + offset1 - offset2)
' Rotate the coordinate system 45 degrees counterclockwise
page.Canvas.RotateTransform(-45)
' Draw watermark text on the page
page.Canvas.DrawString(text, font, PdfBrushes.DarkGray, 0, 0)
Next page
' Save the changes to another file
pdf.SaveToFile("TextWatermark.pdf")
A marca d'água do Spire.PDF requer o cálculo manual de posicionamento e rotação usando transformações do sistema de coordenadas. Embora isso proporcione um controle preciso, requer a compreensão de conceitos de programação gráfica.
O IronPDF oferece um método fácil para adicionar marcas d'água de texto, dando a você controle total sobre a posição e o design da marca d'água. O uso de HTML e CSS pelo IronPDF facilita o processo se você tiver experiência com essas linguagens. A abordagem da Spire.PDF é mais demorada e envolve um processo mais manual, mas ainda assim oferece uma ferramenta robusta de marca d'água com controle total sobre o design e a posição.
Como inserir imagens e texto em PDFs?
Exemplo do IronPDF :
using IronPdf;
using IronPdf.Editing;
// Instantiate Renderer
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;
// Instantiate Renderer
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
' Instantiate Renderer
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")
A API de carimbos do IronPDF usa classes dedicadas para diferentes tipos de carimbo. A classe TextStamper suporta fontes do Google diretamente através da propriedade UseGoogleFont, enquanto a classe ImageStamper pode carregar imagens de URLs ou arquivos locais. Ambas as máquinas de estampar compartilham propriedades de alinhamento comuns para um posicionamento consistente. Explore mais opções de carimbo, incluindo carimbos HTML e integração de código de barras.
Spire.PDF (Exemplo de carimbo de texto):
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
// Assumes a PdfDocument is already loaded as `doc` object
PdfPageBase page = doc.Pages[0];
PdfGraphicsState state = page.Canvas.Save();
// Define font and brushes for different effects
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 18f);
PdfSolidBrush brush1 = new PdfSolidBrush(Color.DeepSkyBlue);
PdfSolidBrush brush2 = new PdfSolidBrush(Color.CadetBlue);
// Apply transformations and draw strings with shadow and effect
page.Canvas.TranslateTransform(20, 200);
page.Canvas.ScaleTransform(1f, 0.6f);
page.Canvas.SkewTransform(-10, 0);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush1, 0, 0);
page.Canvas.SkewTransform(10, 0);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, 0);
page.Canvas.ScaleTransform(1f, -1f);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, -2 * 18);
// Restore graphics to previous state
page.Canvas.Restore(state);
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
// Assumes a PdfDocument is already loaded as `doc` object
PdfPageBase page = doc.Pages[0];
PdfGraphicsState state = page.Canvas.Save();
// Define font and brushes for different effects
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 18f);
PdfSolidBrush brush1 = new PdfSolidBrush(Color.DeepSkyBlue);
PdfSolidBrush brush2 = new PdfSolidBrush(Color.CadetBlue);
// Apply transformations and draw strings with shadow and effect
page.Canvas.TranslateTransform(20, 200);
page.Canvas.ScaleTransform(1f, 0.6f);
page.Canvas.SkewTransform(-10, 0);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush1, 0, 0);
page.Canvas.SkewTransform(10, 0);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, 0);
page.Canvas.ScaleTransform(1f, -1f);
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, -2 * 18);
// Restore graphics to previous state
page.Canvas.Restore(state);
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
' Assumes a PdfDocument is already loaded as `doc` object
Private page As PdfPageBase = doc.Pages(0)
Private state As PdfGraphicsState = page.Canvas.Save()
' Define font and brushes for different effects
Private font As New PdfFont(PdfFontFamily.Helvetica, 18F)
Private brush1 As New PdfSolidBrush(Color.DeepSkyBlue)
Private brush2 As New PdfSolidBrush(Color.CadetBlue)
' Apply transformations and draw strings with shadow and effect
page.Canvas.TranslateTransform(20, 200)
page.Canvas.ScaleTransform(1F, 0.6F)
page.Canvas.SkewTransform(-10, 0)
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush1, 0, 0)
page.Canvas.SkewTransform(10, 0)
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, 0)
page.Canvas.ScaleTransform(1F, -1F)
page.Canvas.DrawString("Go! Turn Around! Go! Go! Go!", font, brush2, 0, -2 * 18)
' Restore graphics to previous state
page.Canvas.Restore(state)
O arquivo Spire.PDF requer manipulação direta da tela com transformações manuais para cada efeito. A criação de selos complexos envolve a compreensão do gerenciamento do estado gráfico e das transformações de coordenadas.
A ferramenta de carimbo de texto e imagem do IronPDF é poderosa e fácil de usar, seguindo uma abordagem semelhante à de HTML e CSS na aplicação do conteúdo carimbado. Embora o Spire.PDF também ofereça uma ferramenta básica de carimbo de texto, aplicar o texto carimbado aos seus arquivos PDF exige mais esforço.
Qual biblioteca lida melhor com a conversão de DOCX para PDF?
Exemplo do 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")
O IronPDF inclui uma classe dedicada DocxToPdfRenderer que lida com a conversão de DOCX nativamente. A API é consistente com outras classes de renderização no IronPDF, exigindo apenas duas linhas de código para conversão básica. Opções avançadas para configuração e formatação da página estão disponíveis através das propriedades do renderizador. Saiba mais sobre os recursos de conversão de DOCX para PDF .
Spire.PDF: Usando o Spire.Doc para conversão de DOCX para PDF:
O próprio Spire.PDF não consegue converter DOCX para PDF; No entanto, a biblioteca Spire.Doc pode ser usada para lidar com essa conversão e, em seguida, você pode usar o Spire.PDF para trabalhar no PDF resultante.
using Spire.Doc;
// Create a Document object
Document doc = new Document();
// Load a Word document
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Sample.docx");
// Save the document to PDF
doc.SaveToFile("ToPDF.pdf", FileFormat.PDF);
// Dispose of resources
doc.Dispose();
using Spire.Doc;
// Create a Document object
Document doc = new Document();
// Load a Word document
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Sample.docx");
// Save the document to PDF
doc.SaveToFile("ToPDF.pdf", FileFormat.PDF);
// Dispose of resources
doc.Dispose();
Imports Spire.Doc
' Create a Document object
Private doc As New Document()
' Load a Word document
doc.LoadFromFile("C:\Users\Administrator\Desktop\Sample.docx")
' Save the document to PDF
doc.SaveToFile("ToPDF.pdf", FileFormat.PDF)
' Dispose of resources
doc.Dispose()
Essa abordagem exige a compra e o gerenciamento de uma biblioteca adicional (Spire.Doc), aumentando tanto o custo quanto a complexidade.
O IronPDF oferece suporte integrado para conversão direta de DOCX para PDF, o que significa que você economiza tempo sem precisar de bibliotecas adicionais para realizar essa tarefa. Por outro lado, o Spire.PDF não consegue lidar diretamente com a conversão de DOCX para PDF, sendo necessário o uso da biblioteca Spire.Doc para converter arquivos DOCX em PDF.
O que as métricas de desempenho revelam?
Com base em testes e feedback dos usuários, veja como as bibliotecas se comparam no uso em situações reais:
Desempenho de renderização
Para layouts básicos, o Spire.PDF é otimizado para conteúdo simples, como tabelas estáticas ou texto com formatação básica, tornando-o rápido e eficiente para esses casos de uso. No entanto, ao lidar com HTML complexo que contém recursos modernos de CSS3, JavaScript ou layouts responsivos, o mecanismo do IronPDF baseado no Chrome oferece resultados mais precisos, ao custo de tempos de renderização ligeiramente maiores.
Uso de memória
O Spire.PDF geralmente usa menos memória (80-120 MB) em comparação com o IronPDF (150-200 MB) devido ao seu mecanismo de renderização mais simples. No entanto, isso ocorre à custa da fidelidade de renderização e do suporte a recursos. Para aplicações onde a memória é um fator crítico e a complexidade do HTML é mínima, o Spire.PDF pode ser vantajoso.
Suporte a threads e operações assíncronas
O IronPDF oferece suporte nativo a async/await com métodos como RenderHtmlAsPdfAsync(), tornando-o adequado para aplicações .NET modernas. O Spire.PDF requer gerenciamento manual de threads com threads STA, o que adiciona complexidade a aplicativos multithread.
Como se comparam os modelos de preços e licenciamento?
Preços e licenciamento do IronPDF
O IronPDF oferece vários níveis e recursos adicionais para quem adquire 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 um período de teste gratuito de 30 dias.
Preços (a partir de 2025):
- Licenças perpétuas: Oferecemos uma variedade de licenças perpétuas, dependendo do tamanho da sua equipe, das necessidades do seu projeto e do número de locais. Cada tipo de licença inclui suporte por e-mail.
- Licença Lite: Esta licença custa $799 e suporta um desenvolvedor, um local e um projeto.
- Licença Plus: Com suporte para três desenvolvedores, três locais e três projetos, esta é a próxima etapa em relação à licença Lite e custa $1,199. A licença Plus oferece suporte por chat e por telefone, além do suporte básico por e-mail.
- Licença Profissional: Esta licença é 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 valor adicional de $2,399
- Suporte ininterrupto ao produto: A IronPDF oferece acesso a atualizações contínuas do produto, melhorias nos recursos de segurança e suporte da sua equipe de engenharia por US$ 999/ano ou por uma compra única de US$ 1.999 para uma 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.
O IronPDF oferece opções flexíveis de licenciamento com licenças perpétuas e suporte completo incluído.
Preços e licenciamento do Spire.PDF
O Spire.PDF oferece uma variedade de licenças dependendo das suas necessidades.
- Versão gratuita: O Spire.PDF oferece uma versão gratuita limitada a 10 páginas em PDF; Além disso, você precisaria adquirir uma licença paga.
- Assinatura para desenvolvedores: Com preços de US$ 999 ou US$ 1.199 por ano, dependendo do tipo de suporte necessário, esta opção é destinada a desenvolvedores que precisam criar recursos relacionados a PDFs, mas não necessitam de direitos de distribuição OEM.
- Assinatura OEM para desenvolvedores: Custa entre US$ 2.549 e US$ 4.248 por ano, dependendo do nível de suporte necessário, e inclui atualizações gratuitas, suporte premium e a possibilidade de distribuir o aplicativo para usuários finais.
- Site para Pequenas Empresas: Com preços de US$ 4.599 ou US$ 7.598, dependendo do suporte desejado, este nível de licenciamento oferece suporte a até 10 desenvolvedores em até 10 locais, atualizações por 1 ano e recursos técnicos online gratuitos.
- Assinatura OEM do Site: Custa entre US$ 13.088 e US$ 16.687 por ano, dependendo do tipo de suporte necessário, e destina-se a grandes empresas que precisam implantar aplicativos em vários locais.
Qual biblioteca oferece melhor documentação e suporte?
IronPDF
O IronPDF se destaca por fornecer documentação e suporte abrangentes:
- 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 para garantir os recursos mais recentes e os patches de segurança.
- Referência da API em PDF: Oferece referências da API para que você possa aproveitar ao máximo o que nossas ferramentas têm a oferecer.
Para obter mais informações, consulte a extensa documentação do IronPDF e visite o canal da Iron Software no YouTube .
Spire.PDF para Documentação e Suporte do .NET
- Fóruns: O Spire.PDF possui um fórum onde os usuários podem interagir uns com os outros, compartilhando dicas, usos e problemas encontrados com o Spire.PDF.
- Exemplos de código: A Spire.PDF oferece exemplos de código em seu site para mostrar como usar o produto em diversos casos de uso.
- Boletins informativos: O Spire.PDF oferece um boletim informativo para desenvolvedores com anúncios de atualizações e outras informações importantes.
- Suporte: O suporte é fornecido principalmente por meio de fóruns, com suporte pago por e-mail/telefone disponível a um custo adicional, dependendo da versão da licença.
Quais são as experiências e o feedback mais comuns dos desenvolvedores?
Com base no feedback da comunidade e na utilização no mundo real:
Feedback do IronPDF
Os desenvolvedores elogiam constantemente o IronPDF por fornecer "uma representação mais abrangente e precisa da página HTML original". A capacidade da biblioteca de lidar com layouts CSS3 complexos, páginas com uso intensivo de JavaScript e frameworks web modernos a torna a escolha preferida para aplicações que exigem geração de PDFs de alta fidelidade.
Os pontos positivos comuns incluem:
- Design de API intuitivo que reduz o tempo de desenvolvimento
- Excelente qualidade de renderização, compatível com a saída do navegador.
- Documentação completa com exemplos práticos
- Suporte técnico ágil
Feedback do Spire.PDF
O feedback da comunidade indica que "o Spire gera um arquivo PDF que é apenas uma imagem." Algumas partes do CSS estão incorretas, como ignorar fontes em negrito. Além disso, o suporte a JavaScript continua sendo um recurso planejado que "seria tão difícil que não seria concluído em pouco tempo", de acordo com as respostas oficiais de suporte.
As preocupações mais comuns incluem:
- Suporte limitado a CSS3 e padrões web modernos
- Falta de capacidade de execução de JavaScript
- Requisitos complexos de encadeamento para conversão de HTML
- Requisitos adicionais de biblioteca para determinadas funcionalidades
Quando você deve escolher cada biblioteca?
Escolha o IronPDF quando:
Seu HTML contém CSS3 moderno, JavaScript ou designs responsivos. Você precisa de uma renderização com perfeição de pixels que corresponda à saída do navegador.
- É necessária a implementação multiplataforma (Linux, macOS, Docker) Você deseja suporte completo incluído em sua licença? Você precisa de recursos integrados, como a conversão para DOCX, sem bibliotecas adicionais. Sua equipe valoriza o desenvolvimento rápido com o mínimo de código.
Escolha Spire.PDF Quando:
Seus PDFs contêm apenas HTML básico com formatação simples.
- O uso de memória é uma limitação crítica
- Você trabalha principalmente em ambientes Windows. Seu HTML não requer a execução de JavaScript. Você já utiliza outros produtos Spire em seu conjunto de produtos.
Conclusão
Em resumo, o IronPDF e o Spire.PDF for .NET são ferramentas capazes de lidar com documentos PDF em aplicações .NET . O IronPDF se destaca pela facilidade de uso, compatibilidade entre plataformas e suporte aos padrões modernos da web, tornando-se a escolha ideal para quem busca aprimorar suas habilidades ao trabalhar com documentos PDF. O Spire.PDF oferece um conjunto abrangente de recursos, mas pode exigir mais esforço para tarefas complexas e não possui a precisão de renderização que os aplicativos da web modernos exigem.
Para desenvolvedores que trabalham com tecnologias web contemporâneas, que necessitam de conversão precisa de HTML para PDF ou que precisam de suporte multiplataforma confiável, o IronPDF apresenta uma solução mais completa. Seu mecanismo de renderização baseado no Chrome, API intuitiva e suporte abrangente o tornam particularmente adequado para aplicações empresariais e cenários complexos de geração de documentos.
Você pode experimentar o teste gratuito de 30 dias para conferir os recursos disponíveis.
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 .
O IronPDF suporta a execução de JavaScript durante a conversão de HTML para PDF?
Sim, o IronPDF suporta a execução completa de JavaScript, tornando-o ideal para converter conteúdo dinâmico ou layouts dependentes de JavaScript em PDF.
Quais plataformas são suportadas pelo IronPDF para conversão de PDF?
O IronPDF oferece suporte nativo em diversas plataformas, incluindo Windows, Linux, macOS, Docker, bem como serviços em nuvem como Azure e AWS.
Como se compara o uso de memória do IronPDF com o do Spire.PDF?
O IronPDF utiliza um pouco mais de memória, normalmente entre 150 e 200 MB, em comparação com os 80 a 120 MB do Spire.PDF, mas oferece melhor qualidade de renderização e suporta padrões modernos de assincronismo/aguarda.
O IronPDF consegue converter arquivos DOCX diretamente para PDF?
Sim, o IronPDF inclui recursos integrados de conversão de DOCX para PDF por meio de sua classe DocxToPdfRenderer , sem a necessidade de bibliotecas adicionais.
Quais são as opções de licenciamento para o IronPDF?
A IronPDF oferece licenças perpétuas a partir de US$ 749 para desenvolvedores individuais, incluindo todos os recursos e suporte. Também oferece um pacote Iron Suite com 9 produtos por US$ 1.498.
Que tipo de suporte o IronPDF oferece?
A IronPDF oferece suporte técnico 24 horas por dia, 5 dias por semana, via e-mail, chat, telefone e compartilhamento de tela para todas as licenças, garantindo assistência completa.
Como posso garantir a segurança e a criptografia de PDFs com o IronPDF?
O IronPDF oferece suporte à criptografia AES-256 e à proteção por senha por meio de sua classe SecuritySettings , permitindo um controle preciso das permissões de PDF.
O IronPDF é adequado para renderizar páginas web complexas com CSS moderno?
Sim, o IronPDF utiliza um mecanismo de renderização completo do Chrome que suporta CSS3, flexbox, layouts em grade, fontes da web e JavaScript, tornando-o ideal para páginas web complexas.
Quais são as limitações da versão gratuita do IronPDF?
O IronPDF oferece um período de teste gratuito de 30 dias, totalmente funcional e sem limite de páginas, proporcionando ampla oportunidade para testar todos os seus recursos antes de efetuar a compra.
Como o IronPDF garante a renderização de HTML de alta qualidade?
O IronPDF oferece renderização perfeita em cada pixel, que corresponde à saída do navegador Chrome, garantindo alta fidelidade e representação precisa do conteúdo HTML original.



