IronPDF vs. XFINIUM.PDF: Comparación de bibliotecas HTML a PDF para .NET
IronPDF destaca en la conversión de HTML a PDF gracias a su compatibilidad total con CSS y JavaScript gracias al motor Chromium. Por el contrario, XFINIUM.PDF se especializa en la manipulación de PDF a bajo nivel sin renderizado HTML nativo, lo que convierte a IronPDF en una opción más adecuada para la generación moderna de PDF basados en web en aplicaciones .NET.
La tecnología moderna ofrece soluciones más inteligentes para los desarrolladores, con la automatización impulsando los procesos de desarrollo de software. Trabajar con archivos PDF de C# ha sido durante mucho tiempo un desafío para los desarrolladores. Se deben tener en cuenta múltiples factores al crear contenido para archivos PDF , y más aún al convertir contenido de diferentes formatos a PDF . Estos desafíos ahora se abordan mediante bibliotecas diseñadas para ayudar en la lectura, escritura, creación y conversión de archivos PDF desde diversos formatos.
Este artículo compara dos bibliotecas PDF populares para desarrolladores de .NET y .NET Core :
- La biblioteca IronPDF
- La biblioteca XFINIUM.PDF
Tanto IronPDF como XFINIUM.PDF proporcionan métodos para crear , manipular e imprimir archivos PDF en .NET y .NET Core. Puede tomar una decisión informada revisando la siguiente comparación de las dos bibliotecas y sus respectivas características para la conversión y manipulación de PDF .
Primero, exploremos lo que ofrecen las dos bibliotecas y luego procedamos a la comparación.
¿Cuáles son las características de la biblioteca XFINIUM.PDF?
La biblioteca XFINIUM.PDF es una herramienta multiplataforma para el desarrollo de PDF, dirigida tanto a desarrolladores de PDF principiantes como avanzados. Le permite crear informes , completar formularios PDF , construir carteras PDF, redactar datos confidenciales de informes PDF o convertir informes PDF en imágenes TIFF de varias páginas .
XFINIUM.PDF está disponible en dos ediciones: la Edición Generator, que incluye producción y edición de PDF, y la Edición Viewer, que agrega renderizado y visualización de PDF .
XFINIUM.PDF está escrito completamente en C# como código totalmente administrado. Cuenta con licencia por desarrollador con distribución libre de regalías, lo que le permite distribuir su programa sin costos adicionales.
¿Cuál es la diferencia entre las ediciones Generator y Viewer?
La Edición Generadora es un subconjunto de la Edición Visualizadora. Ofrece funcionalidad PDF para crear y editar archivos PDF, mientras que Viewer Edition agrega capacidades de renderizado de PDF . La edición Viewer puede convertir páginas PDF a imágenes RAW, BMP, GIF, JPG, PNG y TIFF .
Especificación XFINIUM.PDF
Las características clave son:
Seguridad
- Contraseñas de usuario y propietario
- Derechos de acceso a documentos
- Cifrado RC4 de 40 bits y 128 bits
- Cifrado AES de 128 bits y 256 bits
- Redacción de contenido
- Desactivar copia/pegado de texto
Firmas digitales
- Aprobación y certificación con certificados X509
- Firmas CMS y PAdES con SHA256/384/512
- Tiempos de firma
- Información de OCSP y CRL en las firmas
- Almacenamiento seguro de documentos.
- Tiempos de documentos
- Firmas digitales habilitadas para LTV
- Decodificar firmas en objetos ASN.1
- Extraer certificados de firmas
- Guardar copias PDF firmadas
Código de barras
- Motor de código de barras vectorial integrado
- Códigos de barras unidimensionales:
- Codabar, Código 11, Código 25, Código 39/93/128
- Farmacéutico: Código 32, Pharmacode, PZN
- Códigos de barras bidimensionales: -Matrix
DataMatrix, QR, PDF417, Micro PDF417
Para obtener una funcionalidad avanzada de códigos de barras, considere la documentación de Ironbarcode , que proporciona capacidades completas de generación y lectura de códigos de barras.
Extracción de contenido
- Extraer texto con información de posición
- Extraer texto como palabras con posiciones
- Extraer de regiones definidas por el usuario
- Extraer imágenes con metadatos
API COS de bajo nivel
- Añadir, editar y eliminar objetos COS
- Tipos admitidos: cadenas, números, nombres, valores booleanos, nulos, matrices, diccionarios, secuencias
Representación de PDF (sólo edición Viewer)
- Renderizar páginas a imágenes : RAW, BMP, GIF, JPG, PNG, TIFF
- Diseños ARGB, RGBA, BGRA, RGB, BGR y escala de grises
- PDF a TIFF multipágina con CCITT G4
¿Cuáles son las características principales de IronPDF?
La biblioteca PDF IronPDF .NET simplifica el desarrollo de PDF para programadores de C#. Con esta herramienta, puede construir fácilmente una biblioteca PDF central para .NET.
IronPDF convierte páginas HTML en archivos PDF utilizando el motor .NET Chromium . No necesitas API complicadas para posicionar o diseñar archivos PDF con HTML a PDF . Se admiten documentos web estándar, incluidos HTML, ASPX, JS, CSS e imágenes .
Puede utilizar HTML5, CSS, JavaScript e imágenes para desarrollar una biblioteca PDF .NET. Los archivos PDF se pueden editar, sellar y mejorar con encabezados y pies de página . La biblioteca gestiona la lectura de texto PDF y la extracción de gráficos de manera eficiente.
Descarga IronPDF de forma gratuita y comienza a usarlo en tus proyectos .NET hoy.
Características destacadas de la biblioteca IronPDF C
Las características clave son:
Producir PDFs (HTML a PDF)
- Compatibilidad con HTML4/5, CSS y JavaScript
- Cargar URL con credenciales de red , agentes de usuario , servidores proxy , cookies y encabezados HTTP
Editar documentos PDF existentes
- Leer y rellenar campos de formulario
- Extraer gráficos y texto
- Actualizar páginas con nuevo contenido HTML
- Agregar encabezados/pies de página lógicos o HTML
Manipular documentos PDF
- Cargar y analizar archivos PDF existentes
- Fusionar y dividir documentos
- Agregar encabezados , anotaciones , marcadores , marcas de agua , texto , imágenes
Convertir varios formatos de archivos
- Formularios web ASPX : conversión con tres líneas de código
- Convertir archivos HTML a PDF
- URL base personalizadas para acceder a los activos
- Ventana gráfica virtual para diseño responsivo
- Soporte para las principales codificaciones de archivos ( UTF-8 predeterminado)
Imprimir y guardar
- Guardar/cargar desde archivos, datos binarios, MemoryStreams
- Tipos de medios CSS para impresión
- Imprimir archivos PDF sin Adobe Acrobat
- Exportar registros de API para depuración
IronPDF es compatible con todos los principales sistemas operativos y marcos:
¿Cómo instalo la biblioteca C# IronPDF?
Puede descargar e instalar IronPDF de cuatro maneras:
- Usando Visual Studio
- Símbolo del sistema para desarrolladores
- Descargue el paquete NuGet directamente
- Descarga la biblioteca IronPDF .DLL
Uso de Visual Studio
Visual Studio proporciona el Administrador de paquetes NuGet para instalar paquetes en sus proyectos. Acceda a él a través del Menú Proyecto o haciendo clic derecho en su proyecto en el Explorador de soluciones.

Figura 1. Acceso al gestor de paquetes NuGet mediante el menú Proyecto de Visual Studio

Figura 2. Acceso al gestor de paquetes NuGet mediante el menú contextual de Visual Studio
Una vez seleccionado, busque el paquete IronPDF e instálelo.

Figura 3. Instalación de la biblioteca IronPDF mediante el gestor de paquetes NuGET en Visual Studio
Uso del símbolo del sistema para desarrolladores
Instale el paquete NuGet IronPDF a través del símbolo del sistema para desarrolladores:
- Abra el símbolo del sistema para desarrolladores
Escribe el siguiente comando:
nuget install IronPdfnuget install IronPdfSHELL- Presiona Enter
- El paquete se descarga e instala.
- Recargue su proyecto de Visual Studio
Descargue el paquete NuGet directamente
Descargue e instale IronPDF directamente desde NuGet:
- Ir a la página NuGet de IronPdf
- Selecciona Descargar Paquete
- Haz doble clic en el paquete descargado
- El paquete se instala
- Recargue su proyecto de Visual Studio
Instale IronPDF descargando la biblioteca
Descargue el archivo IronPDF .DLL directamente desde la página de descarga de IronPDF .

Figura 4. Descarga de la biblioteca DLL IronPDF desde el sitio web de IronPDF
Referencia la biblioteca en tu proyecto:
- Haga clic derecho en la solución en el Explorador de soluciones
- Selecciona Referencias • Busca la librería IronPDF.dll
- Haz clic en OK
IronPDF ya está listo para usar. A continuación, instalemos XFINIUM.PDF.
¿Cómo instalo XFINIUM.PDF?
En .NET Core, instale Xfinium PDF como complemento o herramienta de Cake:
# Install Xfinium.Pdf.NetCore as a Cake Addin
#addin nuget:?package=Xfinium.Pdf.NetCore&version=10.2.0# Install Xfinium.Pdf.NetCore as a Cake Addin
#addin nuget:?package=Xfinium.Pdf.NetCore&version=10.2.0# Install Xfinium.Pdf.NetCore as a Cake Tool
#tool nuget:?package=Xfinium.Pdf.NetCore&version=10.2.0# Install Xfinium.Pdf.NetCore as a Cake Tool
#tool nuget:?package=Xfinium.Pdf.NetCore&version=10.2.0Ahora comparemos IronPDF y XFINIUM.PDF.
¿Cómo creo un documento PDF simple en .NET Core?
Los desarrolladores de software deben saber cómo crear archivos PDF dinámicamente usando C#. Es posible que necesite la creación de PDF para generar informes a partir de la entrada del usuario , guardar el texto del usuario como PDF, extraer información HTML y convertirla a PDF , y más.
Ambas bibliotecas pueden convertir páginas web HTML a PDF . Examinemos el enfoque de cada biblioteca.
Uso de IronPDF
IronPDF ofrece múltiples métodos para crear archivos PDF.
Red URL existente a PDF
IronPDF facilita la conversión de documentos HTML a PDF a partir de URL existentes . JavaScript , imágenes , formularios y CSS reciben soporte completo.
La implementación maneja la representación de URL automáticamente:
// Create an instance of the ChromePdfRenderer
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
// Configure rendering options for better performance
Renderer.RenderingOptions.WaitFor.RenderDelay = 500; // Wait for JavaScript to load
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
// Render a URL to PDF
using var Pdf = Renderer.RenderUrlAsPdf("___PROTECTED_URL_134___");
// Save the PDF with metadata
Pdf.MetaData.Author = "IronPDF";
Pdf.MetaData.Title = "Website to PDF Conversion";
Pdf.SaveAs("url.pdf");// Create an instance of the ChromePdfRenderer
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
// Configure rendering options for better performance
Renderer.RenderingOptions.WaitFor.RenderDelay = 500; // Wait for JavaScript to load
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
// Render a URL to PDF
using var Pdf = Renderer.RenderUrlAsPdf("___PROTECTED_URL_134___");
// Save the PDF with metadata
Pdf.MetaData.Author = "IronPDF";
Pdf.MetaData.Title = "Website to PDF Conversion";
Pdf.SaveAs("url.pdf");Cadena de entrada HTML a PDF
Considere el siguiente ejemplo de código para renderizar una página PDF a partir de una cadena HTML . Puedes usar HTML solo o combinarlo con CSS, imágenes y JavaScript:
// Create an instance of the ChromePdfRenderer
var Renderer = new IronPdf.ChromePdfRenderer();
// Configure rendering options
Renderer.RenderingOptions.MarginTop = 50; // millimeters
Renderer.RenderingOptions.MarginBottom = 50;
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
// Render a simple HTML string to PDF
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
// Add document properties
PDF.MetaData.Author = "Development Team";
PDF.MetaData.Keywords = "HTML, PDF, C#";
PDF.MetaData.ModifiedDate = DateTime.Now;
// Save the PDF
PDF.SaveAs("pixel-perfect.pdf");
// Load external HTML assets: images, CSS, and javascript
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
// Apply security settings
AdvancedPDF.Password = "pass123";
AdvancedPDF.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
// Save the advanced PDF with external assets
AdvancedPDF.SaveAs("html-with-assets.pdf");// Create an instance of the ChromePdfRenderer
var Renderer = new IronPdf.ChromePdfRenderer();
// Configure rendering options
Renderer.RenderingOptions.MarginTop = 50; // millimeters
Renderer.RenderingOptions.MarginBottom = 50;
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
// Render a simple HTML string to PDF
using var PDF = Renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
// Add document properties
PDF.MetaData.Author = "Development Team";
PDF.MetaData.Keywords = "HTML, PDF, C#";
PDF.MetaData.ModifiedDate = DateTime.Now;
// Save the PDF
PDF.SaveAs("pixel-perfect.pdf");
// Load external HTML assets: images, CSS, and javascript
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
using var AdvancedPDF = Renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
// Apply security settings
AdvancedPDF.Password = "pass123";
AdvancedPDF.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
// Save the advanced PDF with external assets
AdvancedPDF.SaveAs("html-with-assets.pdf");Para conocer técnicas avanzadas de conversión de HTML a PDF, consulte el tutorial de HTML a PDF .
Uso de XFINIUM.PDF
Para crear un documento PDF en blanco con XFINIUM.PDF se requieren tres líneas: crear el documento, crear una página y guardar:
// Create a new PDF document
PdfFixedDocument document = new PdfFixedDocument();
// Add a page to the document
PdfPage page = document.Pages.Add();
// Save the document as a PDF file
document.Save("empty.pdf");// Create a new PDF document
PdfFixedDocument document = new PdfFixedDocument();
// Add a page to the document
PdfPage page = document.Pages.Add();
// Save the document as a PDF file
document.Save("empty.pdf");Para agregar contenido de texto se requieren tres líneas adicionales: crear una fuente, crear un pincel para el color y dibujar el texto:
// Create a new PDF document
PdfFixedDocument document = new PdfFixedDocument();
PdfPage page = document.Pages.Add();
// Create a standard font with Helvetica face and 24 point size
PdfStandardFont helvetica = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
// Create a solid RGB red brush.
PdfBrush brush = new PdfBrush(PdfRgbColor.Red);
// Draw the text on the page.
page.Graphics.DrawString("Hello World", helvetica, brush, 100, 100);
// Save the document as a PDF file
document.Save("helloworld.pdf");// Create a new PDF document
PdfFixedDocument document = new PdfFixedDocument();
PdfPage page = document.Pages.Add();
// Create a standard font with Helvetica face and 24 point size
PdfStandardFont helvetica = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
// Create a solid RGB red brush.
PdfBrush brush = new PdfBrush(PdfRgbColor.Red);
// Draw the text on the page.
page.Graphics.DrawString("Hello World", helvetica, brush, 100, 100);
// Save the document as a PDF file
document.Save("helloworld.pdf");El modelo de objetos se parece mucho al estándar PDF. Este enfoque proporciona beneficios claros para crear abstracciones complejas como documentos de flujo . ## Cómo crear archivos PDF rellenables
Uso de XFINIUM.PDF
XFINIUM.PDF le permite crear nuevos formularios PDF y completar formularios PDF existentes .
Cada tipo de campo de formulario PDF tiene una clase correspondiente:
PdfTextBoxField– campos de cuadro de textoPdfCheckBoxField– casillas de verificaciónPdfRadioButtonField– conjuntos de botones de opciónPdfComboboxField– cuadros combinadosPdfListboxField– cuadros de listaPdfPushbuttonField– botones pulsadores- PdfSignatureField – campos de firma
Para crear un campo de formulario, especifique el nombre del campo y la ubicación de la página. Después de crear el objeto de campo, agréguelo a la página y configure sus atributos:
// Create a text box field named "firstname"
PdfTextBoxField firstNameTextBox = new PdfTextBoxField("firstname");
// Add the field to a PDF page
pdfpage.Fields.Add(firstNameTextBox);
// Set the position of the field on the PDF page
firstNameTextBox.Widgets[0].VisualRectangle = new PdfVisualRectangle(150, 45, 200, 20);// Create a text box field named "firstname"
PdfTextBoxField firstNameTextBox = new PdfTextBoxField("firstname");
// Add the field to a PDF page
pdfpage.Fields.Add(firstNameTextBox);
// Set the position of the field on the PDF page
firstNameTextBox.Widgets[0].VisualRectangle = new PdfVisualRectangle(150, 45, 200, 20);Para rellenar formularios PDF existentes, cárguelos en un objeto PdfFixedDocument . La colección de campos del documento se completa automáticamente. Puede buscar campos por índice o nombre y completarlos configurando propiedades de valor:
// Load an existing PDF document with forms
PdfFixedDocument document = new PdfFixedDocument("form.pdf");
// Fill form fields with values
(document.Form.Fields["firstname"] as PdfTextBoxField).Text = "John";
(document.Form.Fields["lastname"] as PdfTextBoxField).Value = "Doe";
(document.Form.Fields["sex"].Widgets[0] as PdfRadioButtonWidget).Checked = true;
(document.Form.Fields["firstcar"] as PdfComboBoxField).SelectedIndex = 0;
(document.Form.Fields["secondcar"] as PdfListBoxField).SelectedIndex = 1;
(document.Form.Fields["agree"] as PdfCheckBoxField).Checked = true;
// Save the filled form as a new PDF file
document.Save("form_filled.pdf");// Load an existing PDF document with forms
PdfFixedDocument document = new PdfFixedDocument("form.pdf");
// Fill form fields with values
(document.Form.Fields["firstname"] as PdfTextBoxField).Text = "John";
(document.Form.Fields["lastname"] as PdfTextBoxField).Value = "Doe";
(document.Form.Fields["sex"].Widgets[0] as PdfRadioButtonWidget).Checked = true;
(document.Form.Fields["firstcar"] as PdfComboBoxField).SelectedIndex = 0;
(document.Form.Fields["secondcar"] as PdfListBoxField).SelectedIndex = 1;
(document.Form.Fields["agree"] as PdfCheckBoxField).Checked = true;
// Save the filled form as a new PDF file
document.Save("form_filled.pdf");Uso de IronPDF
A continuación te mostramos cómo puedes crear archivos PDF rellenables usando IronPDF:
// PM> Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
// Step 1. Creating a PDF with editable forms from HTML using form and input tags
var FormHtml = @"
<html>
<head>
<style>
body { font-family: Arial, sans-serif; margin: 40px; }
h2 { color: #333; }
form { background: #f4f4f4; padding: 20px; border-radius: 8px; }
input[type='text'] {
width: 100%;
padding: 8px;
margin: 10px 0;
border: 1px solid #ddd;
border-radius: 4px;
}
input[type='checkbox'] { margin-right: 10px; }
select { width: 100%; padding: 8px; margin: 10px 0; }
</style>
</head>
<body>
<h2>Editable PDF Form</h2>
<form>
First name:<br> <input type='text' name='firstname' value=''> <br>
Last name:<br> <input type='text' name='lastname' value=''>
<br><br>
Email:<br> <input type='text' name='email' value=''>
<br><br>
Subscribe to newsletter: <input type='checkbox' name='newsletter' value='yes'>
<br><br>
Country:
<select name='country'>
<option value='usa'>United States</option>
<option value='uk'>United Kingdom</option>
<option value='canada'>Canada</option>
</select>
</form>
</body>
</html>";
// Create a PDF renderer with form creation enabled
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
Renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
Renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
Renderer.RenderingOptions.MarginTop = 20;
Renderer.RenderingOptions.MarginBottom = 20;
// Render the HTML as a PDF and save it
var pdfDocument = Renderer.RenderHtmlAsPdf(FormHtml);
pdfDocument.SaveAs("BasicForm.pdf");
// Step 2. Reading and Writing PDF form values.
var FormDocument = PdfDocument.FromFile("BasicForm.pdf");
// Get form field collection
var form = FormDocument.Form;
// Set and Read the value of the "firstname" field
var FirstNameField = form.FindFormField("firstname");
FirstNameField.Value = "Minnie";
Console.WriteLine("FirstNameField value: {0}", FirstNameField.Value);
// Set and Read the value of the "lastname" field
var LastNameField = form.FindFormField("lastname");
LastNameField.Value = "Mouse";
Console.WriteLine("LastNameField value: {0}", LastNameField.Value);
// Set email field
var EmailField = form.FindFormField("email");
EmailField.Value = "minnie.mouse@example.com";
// Set checkbox
var NewsletterField = form.FindFormField("newsletter");
NewsletterField.Value = "yes";
// Set dropdown selection
var CountryField = form.FindFormField("country");
CountryField.Value = "usa";
// Save the form with filled values
FormDocument.SaveAs("FilledForm.pdf");
// Step 3. Flattening the form (making it non-editable)
FormDocument.Form.Flatten();
FormDocument.SaveAs("FlattenedForm.pdf");// PM> Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
// Step 1. Creating a PDF with editable forms from HTML using form and input tags
var FormHtml = @"
<html>
<head>
<style>
body { font-family: Arial, sans-serif; margin: 40px; }
h2 { color: #333; }
form { background: #f4f4f4; padding: 20px; border-radius: 8px; }
input[type='text'] {
width: 100%;
padding: 8px;
margin: 10px 0;
border: 1px solid #ddd;
border-radius: 4px;
}
input[type='checkbox'] { margin-right: 10px; }
select { width: 100%; padding: 8px; margin: 10px 0; }
</style>
</head>
<body>
<h2>Editable PDF Form</h2>
<form>
First name:<br> <input type='text' name='firstname' value=''> <br>
Last name:<br> <input type='text' name='lastname' value=''>
<br><br>
Email:<br> <input type='text' name='email' value=''>
<br><br>
Subscribe to newsletter: <input type='checkbox' name='newsletter' value='yes'>
<br><br>
Country:
<select name='country'>
<option value='usa'>United States</option>
<option value='uk'>United Kingdom</option>
<option value='canada'>Canada</option>
</select>
</form>
</body>
</html>";
// Create a PDF renderer with form creation enabled
IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();
Renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
Renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
Renderer.RenderingOptions.MarginTop = 20;
Renderer.RenderingOptions.MarginBottom = 20;
// Render the HTML as a PDF and save it
var pdfDocument = Renderer.RenderHtmlAsPdf(FormHtml);
pdfDocument.SaveAs("BasicForm.pdf");
// Step 2. Reading and Writing PDF form values.
var FormDocument = PdfDocument.FromFile("BasicForm.pdf");
// Get form field collection
var form = FormDocument.Form;
// Set and Read the value of the "firstname" field
var FirstNameField = form.FindFormField("firstname");
FirstNameField.Value = "Minnie";
Console.WriteLine("FirstNameField value: {0}", FirstNameField.Value);
// Set and Read the value of the "lastname" field
var LastNameField = form.FindFormField("lastname");
LastNameField.Value = "Mouse";
Console.WriteLine("LastNameField value: {0}", LastNameField.Value);
// Set email field
var EmailField = form.FindFormField("email");
EmailField.Value = "minnie.mouse@example.com";
// Set checkbox
var NewsletterField = form.FindFormField("newsletter");
NewsletterField.Value = "yes";
// Set dropdown selection
var CountryField = form.FindFormField("country");
CountryField.Value = "usa";
// Save the form with filled values
FormDocument.SaveAs("FilledForm.pdf");
// Step 3. Flattening the form (making it non-editable)
FormDocument.Form.Flatten();
FormDocument.SaveAs("FlattenedForm.pdf");Comienza creando un formulario con etiquetas de formato HTML. La biblioteca maneja la complejidad al guardar como PDF. La lectura y escritura de valores de formulario se realiza mediante la función FindFormField . Su aplicación puede usar esta función inmediatamente para completar formularios mediante programación.
Para el manejo avanzado de formularios, incluidas las firmas digitales , consulte el tutorial Crear formularios PDF .
Cómo firmar digitalmente archivos PDF
El trabajo remoto requiere un procesamiento eficiente de documentos. Llenar y firmar formularios , enviar archivos y procesar documentos son actividades comerciales diarias. La firma de documentos PDF , carteras y formularios reemplaza los documentos en papel. Las firmas digitales permiten a las empresas firmar acuerdos y compartir formularios PDF en línea.
Uso de XFINIUM.PDF
Un campo de firma aplica firmas digitales en archivos PDF (clase PdfSignatureField ). Aunque el campo de firma aparece en una página, la firma digital firma todo el documento.
El proceso de firma utiliza un objeto PdfDigitalSignature para establecer el atributo de firma. La firma se forma al guardar el documento según el diseño binario del archivo PDF.
PdfDigitalSignature proporciona la base para todas las firmas XFINIUM:
PdfCmsDigitalSignature: firma estándar de CMS (hereda dePdfDigitalSignature)PdfPadesDigitalSignature: firma estándar PADES (hereda dePdfCmsDigitalSignature)PdfInteractiveCmsDigitalSignature– Firma CMS mediante tarjeta inteligente de hardwarePdfInteractivePadesDigitalSignature– PADES con soporte para tarjetas inteligentes de hardwarePdfDocumentTimeStamp: marca de tiempo a nivel de documento (hereda dePdfDigitalSignature)
Uso de IronPDF
Los desarrolladores preguntan con frecuencia sobre cómo agregar firmas a archivos PDF mediante programación con IronPDF y C#. Esto puede significar:
- Agregar imágenes de firmas gráficas desde archivos
- Firma criptográfica para evitar manipulaciones
- Agregar iconos de firma manuscrita con firma criptográfica
El primer enfoque implica estampar una firma PNG en páginas PDF existentes. Úselo para firmas o sellos de empresa:
// Open an existing PDF document or create a new one
var Pdf = PdfDocument.FromFile(@"C:\Path\To\ASPX to PDF.pdf");
// Define an HTML stamp with a signature image
var SignatureStamp = new HtmlStamp()
{
Html = "<img src='signature.png' />",
Width = 150,
Height = 50,
Bottom = 300,
Left = 85,
ZIndex = HtmlStamp.StampLayer.OnTopOfExistingPDFContent
};
// Advanced stamp with styling
var StyledSignatureStamp = new HtmlStamp()
{
Html = @"<div style='border: 2px solid #000; padding: 10px; background: rgba(255,255,255,0.9);'>
<img src='signature.png' style='width: 120px;' />
<p style='margin: 5px 0 0 0; font-size: 10px;'>Digitally Signed</p>
<p style='margin: 0; font-size: 8px;'>{date}</p>
</div>",
Width = 150,
Height = 100,
Bottom = 50,
Right = 50,
ZIndex = HtmlStamp.StampLayer.OnTopOfExistingPDFContent
};
// Stamp the signature on the first page of the PDF
Pdf.StampHTML(SignatureStamp, 1);
// Or apply to all pages
Pdf.StampHTML(StyledSignatureStamp);
// Save the stamped PDF
Pdf.SaveAs(@"C:\Path\To\Stamped_PDF.pdf");// Open an existing PDF document or create a new one
var Pdf = PdfDocument.FromFile(@"C:\Path\To\ASPX to PDF.pdf");
// Define an HTML stamp with a signature image
var SignatureStamp = new HtmlStamp()
{
Html = "<img src='signature.png' />",
Width = 150,
Height = 50,
Bottom = 300,
Left = 85,
ZIndex = HtmlStamp.StampLayer.OnTopOfExistingPDFContent
};
// Advanced stamp with styling
var StyledSignatureStamp = new HtmlStamp()
{
Html = @"<div style='border: 2px solid #000; padding: 10px; background: rgba(255,255,255,0.9);'>
<img src='signature.png' style='width: 120px;' />
<p style='margin: 5px 0 0 0; font-size: 10px;'>Digitally Signed</p>
<p style='margin: 0; font-size: 8px;'>{date}</p>
</div>",
Width = 150,
Height = 100,
Bottom = 50,
Right = 50,
ZIndex = HtmlStamp.StampLayer.OnTopOfExistingPDFContent
};
// Stamp the signature on the first page of the PDF
Pdf.StampHTML(SignatureStamp, 1);
// Or apply to all pages
Pdf.StampHTML(StyledSignatureStamp);
// Save the stamped PDF
Pdf.SaveAs(@"C:\Path\To\Stamped_PDF.pdf");Firme criptográficamente archivos PDF utilizando certificados digitales X509Certificate2 .pfx y .p12 con una línea:
// 123456 below represents the signature password
new IronPdf.PdfSignature("CertificateFile.p12", "123456").SignPdfFile("ASPX to PDF.pdf");
// Or with more control
var signature = new IronPdf.PdfSignature("CertificateFile.p12", "123456")
{
SigningContact = "john@example.com",
SigningLocation = "New York, USA",
SigningReason = "Contract Agreement"
};
// Load the PDF
var pdf = PdfDocument.FromFile("contract.pdf");
// Sign and save
pdf.SignPdfWithDigitalSignature(signature);
pdf.SaveAs("signed-contract.pdf");// 123456 below represents the signature password
new IronPdf.PdfSignature("CertificateFile.p12", "123456").SignPdfFile("ASPX to PDF.pdf");
// Or with more control
var signature = new IronPdf.PdfSignature("CertificateFile.p12", "123456")
{
SigningContact = "john@example.com",
SigningLocation = "New York, USA",
SigningReason = "Contract Agreement"
};
// Load the PDF
var pdf = PdfDocument.FromFile("contract.pdf");
// Sign and save
pdf.SignPdfWithDigitalSignature(signature);
pdf.SaveAs("signed-contract.pdf");Este ejemplo avanzado combina la firma de identificación digital .pfx / .p12 X509Certificate2 con firmas manuscritas:
// Create a digital signature using a certificate file
var Signature = new IronPdf.PdfSignature("Iron.pfx", "123456");
// Render a PDF document to be signed
var Renderer = new ChromePdfRenderer();
Renderer.RenderingOptions.MarginBottom = 0;
Renderer.RenderingOptions.MarginTop = 0;
Renderer.RenderingOptions.EnableJavaScript = true;
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
// Create PDF with security features
string html = @"<h1>Contract Agreement</h1>
<p>This document is digitally signed and encrypted.</p>
<p>Agreement Date: " + DateTime.Now.ToString("yyyy-MM-dd") + @"</p>";
PdfDocument doc = Renderer.RenderHtmlAsPdf(html);
// Configure optional signing options and a handwritten signature graphic
Signature.SigningContact = "support@ironsoftware.com";
Signature.SigningLocation = "Chicago, USA";
Signature.SigningReason = "To show how to sign a PDF";
// Load a handwritten signature image
Signature.LoadSignatureImageFromFile("handwriting.png");
// Advanced security: Set permissions
doc.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
doc.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
doc.SecuritySettings.AllowUserCopyPasteContent = false;
// Sign the PDF document with the digital signature
doc.SignPdfWithDigitalSignature(Signature);
// Add password protection
doc.Password = "userpassword";
doc.OwnerPassword = "ownerpassword";
// Save the signed PDF document
doc.SaveAs("Signed_ASPX_to_PDF.pdf");// Create a digital signature using a certificate file
var Signature = new IronPdf.PdfSignature("Iron.pfx", "123456");
// Render a PDF document to be signed
var Renderer = new ChromePdfRenderer();
Renderer.RenderingOptions.MarginBottom = 0;
Renderer.RenderingOptions.MarginTop = 0;
Renderer.RenderingOptions.EnableJavaScript = true;
Renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
// Create PDF with security features
string html = @"<h1>Contract Agreement</h1>
<p>This document is digitally signed and encrypted.</p>
<p>Agreement Date: " + DateTime.Now.ToString("yyyy-MM-dd") + @"</p>";
PdfDocument doc = Renderer.RenderHtmlAsPdf(html);
// Configure optional signing options and a handwritten signature graphic
Signature.SigningContact = "support@ironsoftware.com";
Signature.SigningLocation = "Chicago, USA";
Signature.SigningReason = "To show how to sign a PDF";
// Load a handwritten signature image
Signature.LoadSignatureImageFromFile("handwriting.png");
// Advanced security: Set permissions
doc.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
doc.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
doc.SecuritySettings.AllowUserCopyPasteContent = false;
// Sign the PDF document with the digital signature
doc.SignPdfWithDigitalSignature(Signature);
// Add password protection
doc.Password = "userpassword";
doc.OwnerPassword = "ownerpassword";
// Save the signed PDF document
doc.SaveAs("Signed_ASPX_to_PDF.pdf");Para implementaciones de seguridad completas, explore la documentación de Ironsecuredoc para conocer las funciones avanzadas de protección de documentos.## ¿Cómo maneja cada biblioteca los marcos CSS modernos y Bootstrap?
Las aplicaciones web modernas a menudo dependen de marcos CSS como Bootstrap para el desarrollo rápido de la interfaz de usuario y el diseño responsivo. Las herramientas de generación de PDF deben preservar con precisión estos diseños de estructura para garantizar una calidad profesional del documento.
IronPDF: Soporte completo para el framework Bootstrap
El motor de renderizado Chromium de IronPDF es totalmente compatible con los marcos CSS modernos:
- Bootstrap 5: renderizado completo de flexbox y CSS Grid con todos los componentes responsivos
- Bootstrap 4: sistemas de tarjetas completos, barras de navegación y clases de utilidad
- Tailwind CSS: todas las clases de utilidad y variantes responsivas
- Fundación y otros marcos: la compatibilidad total con CSS3 significa que todos los marcos modernos funcionan correctamente
- CSS avanzado: Flexbox, CSS Grid, propiedades personalizadas, animaciones y transformaciones
Validación en el mundo real: la página de inicio y las plantillas de Bootstrap se convierten con la fidelidad precisa del navegador.
Ejemplo de código: Programa de Eventos con Cartas de Bootstrap
using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure rendering for optimal Bootstrap output
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 500; // Allow JS to fully load
renderer.RenderingOptions.ViewPortWidth = 1280; // Desktop viewport
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
string bootstrapSchedule = @"
<!DOCTYPE html>
<html>
<head>
<link href='___PROTECTED_URL_135___ rel='stylesheet'>
<style>
@media print {
.pagebreak { page-break-after: always; }
}
</style>
</head>
<body>
<div class='container my-5'>
<h1 class='text-center mb-5'>Tech Conference 2025 - Schedule</h1>
<div class='row g-4'>
<div class='col-md-6'>
<div class='card border-primary'>
<div class='card-header bg-primary text-white d-flex justify-content-between align-items-center'>
<h5 class='mb-0'>Keynote Session</h5>
<span class='badge bg-light text-primary'>9:00 AM</span>
</div>
<div class='card-body'>
<h6 class='card-subtitle mb-2 text-muted'>Main Auditorium</h6>
<p class='card-text'><strong>The Future of AI in Software Development</strong></p>
<p class='card-text'>Join us for an exploration of how artificial intelligence is transforming the software development environment.</p>
<div class='d-flex align-items-center'>
<img src='___PROTECTED_URL_136___ class='rounded-circle me-2' alt='Speaker'>
<div>
<div class='fw-bold'>Dr. Sarah Chen</div>
<small class='text-muted'>AI Research Lead</small>
</div>
</div>
</div>
</div>
</div>
<div class='col-md-6'>
<div class='card border-success'>
<div class='card-header bg-success text-white d-flex justify-content-between align-items-center'>
<h5 class='mb-0'>Workshop</h5>
<span class='badge bg-light text-success'>10:30 AM</span>
</div>
<div class='card-body'>
<h6 class='card-subtitle mb-2 text-muted'>Workshop Room A</h6>
<p class='card-text'><strong>Hands-On: Cloud-Native Architecture</strong></p>
<p class='card-text'>Learn practical techniques for building flexible, cloud-native applications with modern frameworks.</p>
<div class='d-flex align-items-center'>
<img src='___PROTECTED_URL_137___ class='rounded-circle me-2' alt='Speaker'>
<div>
<div class='fw-bold'>Michael Rodriguez</div>
<small class='text-muted'>Cloud Architect</small>
</div>
</div>
</div>
</div>
</div>
<div class='col-md-6'>
<div class='card border-warning'>
<div class='card-header bg-warning text-dark d-flex justify-content-between align-items-center'>
<h5 class='mb-0'>Panel Discussion</h5>
<span class='badge bg-dark'>2:00 PM</span>
</div>
<div class='card-body'>
<h6 class='card-subtitle mb-2 text-muted'>Main Auditorium</h6>
<p class='card-text'><strong>Security in Modern Web Applications</strong></p>
<p class='card-text'>Industry experts discuss current security challenges and best practices for protecting user data.</p>
<small class='text-muted'>Featuring 4 industry experts</small>
</div>
</div>
</div>
<div class='col-md-6'>
<div class='card border-info'>
<div class='card-header bg-info text-white d-flex justify-content-between align-items-center'>
<h5 class='mb-0'>Technical Talk</h5>
<span class='badge bg-light text-info'>3:30 PM</span>
</div>
<div class='card-body'>
<h6 class='card-subtitle mb-2 text-muted'>Room B</h6>
<p class='card-text'><strong>Performance Optimization Strategies</strong></p>
<p class='card-text'>Deep dive into advanced techniques for improve application performance and reducing latency.</p>
<div class='d-flex align-items-center'>
<img src='___PROTECTED_URL_138___ class='rounded-circle me-2' alt='Speaker'>
<div>
<div class='fw-bold'>Alex Kim</div>
<small class='text-muted'>Performance Engineer</small>
</div>
</div>
</div>
</div>
</div>
</div>
<div class='pagebreak'></div>
<h2 class='mt-5'>Additional Sessions</h2>
<div class='table-responsive'>
<table class='table table-striped'>
<thead>
<tr>
<th>Time</th>
<th>Session</th>
<th>Speaker</th>
<th>Location</th>
</tr>
</thead>
<tbody>
<tr>
<td>11:45 AM</td>
<td>Lightning Talks</td>
<td>Various</td>
<td>Room C</td>
</tr>
<tr>
<td>1:00 PM</td>
<td>Networking Lunch</td>
<td>-</td>
<td>Cafeteria</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>";
// Generate the PDF
var pdf = renderer.RenderHtmlAsPdf(bootstrapSchedule);
// Add metadata
pdf.MetaData.Author = "Tech Conference Team";
pdf.MetaData.Title = "Conference Schedule 2025";
pdf.MetaData.Subject = "Event Schedule";
// Save the PDF
pdf.SaveAs("conference-schedule.pdf");
// Example: Generate responsive invoice with Bootstrap
string bootstrapInvoice = @"
<!DOCTYPE html>
<html>
<head>
<link href='___PROTECTED_URL_139___ rel='stylesheet'>
<link href='___PROTECTED_URL_140___ rel='stylesheet'>
</head>
<body>
<div class='container mt-5'>
<div class='row'>
<div class='col-12'>
<div class='card'>
<div class='card-body'>
<div class='row mb-4'>
<div class='col-sm-6'>
<h2 class='text-primary'><i class='fas fa-file-invoice'></i> INVOICE</h2>
<p class='mb-1'><strong>Invoice #:</strong> INV-2025-001</p>
<p class='mb-1'><strong>Date:</strong> " + DateTime.Now.ToString("MMMM dd, yyyy") + @"</p>
</div>
<div class='col-sm-6 text-sm-end'>
<h4>Your Company Name</h4>
<p class='mb-1'>123 Business St</p>
<p class='mb-1'>City, State 12345</p>
<p>contact@company.com</p>
</div>
</div>
<hr>
<div class='row mb-4'>
<div class='col-sm-6'>
<h5>Bill To:</h5>
<p class='mb-1'><strong>Client Company</strong></p>
<p class='mb-1'>456 Client Ave</p>
<p>City, State 67890</p>
</div>
</div>
<div class='table-responsive'>
<table class='table table-bordered'>
<thead class='table-primary'>
<tr>
<th>Description</th>
<th class='text-center'>Quantity</th>
<th class='text-end'>Price</th>
<th class='text-end'>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Web Development Services</td>
<td class='text-center'>40</td>
<td class='text-end'>$150.00</td>
<td class='text-end'>$6,000.00</td>
</tr>
<tr>
<td>UI/UX Design</td>
<td class='text-center'>20</td>
<td class='text-end'>$125.00</td>
<td class='text-end'>$2,500.00</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan='3' class='text-end'><strong>Subtotal:</strong></td>
<td class='text-end'><strong>$8,500.00</strong></td>
</tr>
<tr>
<td colspan='3' class='text-end'>Tax (10%):</td>
<td class='text-end'>$850.00</td>
</tr>
<tr class='table-primary'>
<td colspan='3' class='text-end'><strong>Total Due:</strong></td>
<td class='text-end'><strong>$9,350.00</strong></td>
</tr>
</tfoot>
</table>
</div>
<div class='alert alert-info mt-4'>
<i class='fas fa-info-circle'></i> Payment is due within 30 days. Thank you for your business!
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var invoicePdf = renderer.RenderHtmlAsPdf(bootstrapInvoice);
invoicePdf.SaveAs("bootstrap-invoice.pdf");using IronPdf;
var renderer = new ChromePdfRenderer();
// Configure rendering for optimal Bootstrap output
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 500; // Allow JS to fully load
renderer.RenderingOptions.ViewPortWidth = 1280; // Desktop viewport
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
string bootstrapSchedule = @"
<!DOCTYPE html>
<html>
<head>
<link href='___PROTECTED_URL_135___ rel='stylesheet'>
<style>
@media print {
.pagebreak { page-break-after: always; }
}
</style>
</head>
<body>
<div class='container my-5'>
<h1 class='text-center mb-5'>Tech Conference 2025 - Schedule</h1>
<div class='row g-4'>
<div class='col-md-6'>
<div class='card border-primary'>
<div class='card-header bg-primary text-white d-flex justify-content-between align-items-center'>
<h5 class='mb-0'>Keynote Session</h5>
<span class='badge bg-light text-primary'>9:00 AM</span>
</div>
<div class='card-body'>
<h6 class='card-subtitle mb-2 text-muted'>Main Auditorium</h6>
<p class='card-text'><strong>The Future of AI in Software Development</strong></p>
<p class='card-text'>Join us for an exploration of how artificial intelligence is transforming the software development environment.</p>
<div class='d-flex align-items-center'>
<img src='___PROTECTED_URL_136___ class='rounded-circle me-2' alt='Speaker'>
<div>
<div class='fw-bold'>Dr. Sarah Chen</div>
<small class='text-muted'>AI Research Lead</small>
</div>
</div>
</div>
</div>
</div>
<div class='col-md-6'>
<div class='card border-success'>
<div class='card-header bg-success text-white d-flex justify-content-between align-items-center'>
<h5 class='mb-0'>Workshop</h5>
<span class='badge bg-light text-success'>10:30 AM</span>
</div>
<div class='card-body'>
<h6 class='card-subtitle mb-2 text-muted'>Workshop Room A</h6>
<p class='card-text'><strong>Hands-On: Cloud-Native Architecture</strong></p>
<p class='card-text'>Learn practical techniques for building flexible, cloud-native applications with modern frameworks.</p>
<div class='d-flex align-items-center'>
<img src='___PROTECTED_URL_137___ class='rounded-circle me-2' alt='Speaker'>
<div>
<div class='fw-bold'>Michael Rodriguez</div>
<small class='text-muted'>Cloud Architect</small>
</div>
</div>
</div>
</div>
</div>
<div class='col-md-6'>
<div class='card border-warning'>
<div class='card-header bg-warning text-dark d-flex justify-content-between align-items-center'>
<h5 class='mb-0'>Panel Discussion</h5>
<span class='badge bg-dark'>2:00 PM</span>
</div>
<div class='card-body'>
<h6 class='card-subtitle mb-2 text-muted'>Main Auditorium</h6>
<p class='card-text'><strong>Security in Modern Web Applications</strong></p>
<p class='card-text'>Industry experts discuss current security challenges and best practices for protecting user data.</p>
<small class='text-muted'>Featuring 4 industry experts</small>
</div>
</div>
</div>
<div class='col-md-6'>
<div class='card border-info'>
<div class='card-header bg-info text-white d-flex justify-content-between align-items-center'>
<h5 class='mb-0'>Technical Talk</h5>
<span class='badge bg-light text-info'>3:30 PM</span>
</div>
<div class='card-body'>
<h6 class='card-subtitle mb-2 text-muted'>Room B</h6>
<p class='card-text'><strong>Performance Optimization Strategies</strong></p>
<p class='card-text'>Deep dive into advanced techniques for improve application performance and reducing latency.</p>
<div class='d-flex align-items-center'>
<img src='___PROTECTED_URL_138___ class='rounded-circle me-2' alt='Speaker'>
<div>
<div class='fw-bold'>Alex Kim</div>
<small class='text-muted'>Performance Engineer</small>
</div>
</div>
</div>
</div>
</div>
</div>
<div class='pagebreak'></div>
<h2 class='mt-5'>Additional Sessions</h2>
<div class='table-responsive'>
<table class='table table-striped'>
<thead>
<tr>
<th>Time</th>
<th>Session</th>
<th>Speaker</th>
<th>Location</th>
</tr>
</thead>
<tbody>
<tr>
<td>11:45 AM</td>
<td>Lightning Talks</td>
<td>Various</td>
<td>Room C</td>
</tr>
<tr>
<td>1:00 PM</td>
<td>Networking Lunch</td>
<td>-</td>
<td>Cafeteria</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>";
// Generate the PDF
var pdf = renderer.RenderHtmlAsPdf(bootstrapSchedule);
// Add metadata
pdf.MetaData.Author = "Tech Conference Team";
pdf.MetaData.Title = "Conference Schedule 2025";
pdf.MetaData.Subject = "Event Schedule";
// Save the PDF
pdf.SaveAs("conference-schedule.pdf");
// Example: Generate responsive invoice with Bootstrap
string bootstrapInvoice = @"
<!DOCTYPE html>
<html>
<head>
<link href='___PROTECTED_URL_139___ rel='stylesheet'>
<link href='___PROTECTED_URL_140___ rel='stylesheet'>
</head>
<body>
<div class='container mt-5'>
<div class='row'>
<div class='col-12'>
<div class='card'>
<div class='card-body'>
<div class='row mb-4'>
<div class='col-sm-6'>
<h2 class='text-primary'><i class='fas fa-file-invoice'></i> INVOICE</h2>
<p class='mb-1'><strong>Invoice #:</strong> INV-2025-001</p>
<p class='mb-1'><strong>Date:</strong> " + DateTime.Now.ToString("MMMM dd, yyyy") + @"</p>
</div>
<div class='col-sm-6 text-sm-end'>
<h4>Your Company Name</h4>
<p class='mb-1'>123 Business St</p>
<p class='mb-1'>City, State 12345</p>
<p>contact@company.com</p>
</div>
</div>
<hr>
<div class='row mb-4'>
<div class='col-sm-6'>
<h5>Bill To:</h5>
<p class='mb-1'><strong>Client Company</strong></p>
<p class='mb-1'>456 Client Ave</p>
<p>City, State 67890</p>
</div>
</div>
<div class='table-responsive'>
<table class='table table-bordered'>
<thead class='table-primary'>
<tr>
<th>Description</th>
<th class='text-center'>Quantity</th>
<th class='text-end'>Price</th>
<th class='text-end'>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Web Development Services</td>
<td class='text-center'>40</td>
<td class='text-end'>$150.00</td>
<td class='text-end'>$6,000.00</td>
</tr>
<tr>
<td>UI/UX Design</td>
<td class='text-center'>20</td>
<td class='text-end'>$125.00</td>
<td class='text-end'>$2,500.00</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan='3' class='text-end'><strong>Subtotal:</strong></td>
<td class='text-end'><strong>$8,500.00</strong></td>
</tr>
<tr>
<td colspan='3' class='text-end'>Tax (10%):</td>
<td class='text-end'>$850.00</td>
</tr>
<tr class='table-primary'>
<td colspan='3' class='text-end'><strong>Total Due:</strong></td>
<td class='text-end'><strong>$9,350.00</strong></td>
</tr>
</tfoot>
</table>
</div>
<div class='alert alert-info mt-4'>
<i class='fas fa-info-circle'></i> Payment is due within 30 days. Thank you for your business!
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var invoicePdf = renderer.RenderHtmlAsPdf(bootstrapInvoice);
invoicePdf.SaveAs("bootstrap-invoice.pdf");Resultado: un cronograma de conferencia profesional con cuadrícula de tarjetas de Bootstrap, alineación de flexbox, componentes de insignia y diseño adaptable, todo representado con precisión en el PDF.
XFINIUM.PDF: Compatibilidad limitada con HTML y Framework
XFINIUM.PDF se centra en la generación y manipulación de PDF en lugar de la conversión de HTML a PDF. La biblioteca tiene limitaciones significativas para Bootstrap y frameworks CSS modernos:
- Sin representación HTML nativa: XFINIUM.PDF no incluye un motor de conversión de HTML a PDF integrado
- Solo compatibilidad con HTML básico: limitada a estructuras HTML simples sin CSS avanzado
- Sin compatibilidad con Bootstrap: los frameworks Bootstrap modernos (4/5) con flexbox y CSS Grid no son compatibles
- Se requieren soluciones alternativas: los desarrolladores deben usar API de PDF de bajo nivel para recrear diseños manualmente
- Herramientas externas necesarias: puede requerir integración con motores de renderizado HTML externos
Impacto en el desarrollo: las aplicaciones que utilizan Bootstrap o marcos CSS modernos no pueden convertir directamente su UI a PDF con XFINIUM.PDF. Los desarrolladores deben:
- Recrear layouts usando las APIs de dibujo de bajo nivel de XFINIUM.PDF (significativo tiempo de desarrollo)
- Integrar herramientas externas de renderizado HTML (complejidad adicional y dependencias)
- Mantener código de layout PDF separado paralelo a la IU web (sobrecarga de mantenimiento)
Para proyectos que requieren conversión de HTML a PDF con marcos modernos, las limitaciones de XFINIUM.PDF requieren un desarrollo adicional significativo.
Para obtener soporte completo para Bootstrap y el marco CSS moderno, consulte la Guía de CSS de Bootstrap y Flexbox.
¿Cuáles son las opciones de precios y licencias?
Precios y licencias de XFINIUM.PDF
Cada paquete viene en dos ediciones: Generator Edition para producción y edición de PDF y Viewer Edition, que contiene todas las funciones de Generator más la representación y visualización de PDF.
- Cada desarrollador necesita una licencia.
- Distribución libre de regalías a un número ilimitado de computadoras de escritorio y servidores.
- La suscripción de asistencia incluye un año de actualizaciones/soporte.
Los precios varían entre $ 290,00 y $ 872,00 por año.
Precios y licencias de IronPDF
IronPDF es gratuito para desarrollo y se puede licenciar para uso comercial en cualquier momento. Las opciones incluyen licencias para proyectos individuales, desarrolladores individuales, agencias, organizaciones multinacionales y redistribución SaaS/OEM. Todas las licencias incluyen una garantía de devolución de dinero de 30 días, un año de soporte/actualizaciones, validez de desarrollo/preparación/producción y una licencia perpetua (compra única). El paquete Lite comienza en $799 sin gastos recurrentes.
¿Qué biblioteca PDF debería elegir?
La biblioteca IronPDF simplifica la creación de PDF sin API propietarias. "HTML-To-PDF" convierte documentos con estándares abiertos como HTML, JS, CSS, JPG, PNG, GIF y SVG en PDF con una resolución de píxeles perfecta. Se basa en las habilidades existentes de los desarrolladores. Puede descargar documentos, enviarlos por correo electrónico o guardarlos en la nube, creando facturas, cotizaciones, informes, contratos y otros documentos. Funciona con ASP.NET, ASP.NET Core, formularios web, MVC, .NET Framework y APIs web .NET Core.
XFINIUM.PDF proporciona funcionalidad para desarrolladores de PDF principiantes y avanzados. Ya sea que necesite crear informes, completar formularios PDF, construir carteras, redactar información o convertir archivos PDF a TIFF de varias páginas, ofrece las herramientas necesarias. El modelo de objeto básico sigue las especificaciones PDF. El código se compila en todas las plataformas sin modificaciones.
Las licencias de XFINIUM.PDF comienzan en las ediciones de $290 (Generador) y $387 (Visor). IronPDF comienza en $799 . IronPDF ofrece licencias para usuarios individuales y múltiples, mientras que XFINIUM.PDF requiere licencias por desarrollador. La licencia profesional de IronPDF ($799) admite usuarios ilimitados.
IronPDF requiere menos líneas de código para la manipulación de PDF que XFINIUM.PDF, lo que reduce la carga de trabajo del programador.
Iron Software ofrece su suite completa con dos clics. Por el precio de dos bibliotecas, actualmente recibe las cinco bibliotecas con soporte continuo.
Preguntas Frecuentes
¿Cuáles son las características clave de IronPDF para la conversión de HTML a PDF?
IronPDF aprovecha el motor Chromium de .NET para convertir HTML a PDF. Soporta HTML5, CSS, JavaScript e integración de imágenes, convirtiéndolo en una solución integral para crear PDFs a partir de contenido web.
¿Cómo se compara XFINIUM.PDF con otras bibliotecas de PDF para .NET?
XFINIUM.PDF es una biblioteca multiplataforma que ofrece dos ediciones: Generador y Visor. Sobresale en la creación, edición y renderizado de PDF, e incluye características como seguridad, firmas digitales y soporte de códigos de barras.
¿Se puede usar IronPDF en plataformas en la nube como Azure y AWS?
Sí, IronPDF es compatible con varias plataformas, incluyendo Azure y AWS, lo que permite un despliegue flexible de soluciones de PDF en entornos de nube.
¿Qué opciones de instalación están disponibles para IronPDF en proyectos .NET?
IronPDF se puede instalar utilizando el Administrador de Paquetes NuGet de Visual Studio, el Símbolo del sistema para desarrolladores, o descargando directamente el paquete NuGet o el DLL de la biblioteca.
¿Cuáles son las capacidades de edición de PDF de IronPDF?
IronPDF permite una edición extensa de PDFs, incluyendo el llenado de campos de formulario, la fusión de documentos y la extracción de texto e imágenes. También admite el agregado de encabezados, pies de página y anotaciones.
¿Cómo difieren las opciones de licencia entre IronPDF y XFINIUM.PDF?
XFINIUM.PDF ofrece licencias a partir de $290 por desarrollador con distribución libre de regalías. IronPDF proporciona opciones de licencia más amplias, incluyendo una licencia profesional para usuarios ilimitados.
¿Qué características de seguridad proporciona XFINIUM.PDF?
XFINIUM.PDF admite características de seguridad como contraseñas de usuario y propietario, derechos de acceso al documento, encriptación RC4 y AES, y redacción de contenido para asegurar la seguridad del documento.
¿Por qué podrían los desarrolladores elegir IronPDF para sus proyectos?
Los desarrolladores podrían elegir IronPDF por su enfoque simplificado para la manipulación de PDF, requiriendo menos líneas de código, y su flexibilidad con licencias para usuarios únicos y múltiples.
¿Cómo maneja IronPDF el llenado de formularios en PDFs?
IronPDF proporciona herramientas para llenar campos de formulario dentro de PDFs, permitiendo la creación dinámica de documentos e interacción del usuario.
¿Qué capacidades de firma digital están disponibles en estas bibliotecas de PDF?
Ambos, IronPDF y XFINIUM.PDF, admiten firmas digitales, permitiendo la validación segura de la autenticidad e integridad del documento.






