IronPDF vs. GrapeCity PDF: Comparación de bibliotecas PDF .NET
IronPDF se especializa en la generación de HTML a PDF con el motor de renderizado Chrome V8 para aplicaciones .NET, mientras que GrapeCity PDF se centra en las funciones de visualización y anotación de PDF, lo que convierte a IronPDF en la mejor opción para los desarrolladores que necesitan capacidades completas de creación de PDF con soporte de contenido web moderno.
PDF significa Formato de Documento Portátil. Es un tipo de archivo que permite la visualización convencional de documentos en muchos dispositivos diferentes. Los PDFs se utilizan a menudo para compartir documentos importantes como currículums con posibles empleadores o facturas con clientes.
A pesar de su popularidad, los archivos PDF tienen algunas limitaciones. Por ejemplo, no puedes compartir archivos PDF por correo electrónico sin que los destinatarios necesiten un lector de PDF. Es posible que los archivos PDF no se muestren con claridad en dispositivos móviles como lo harían los documentos de Word. Además, los PDF requieren software de edición para modificar o actualizar el contenido, a diferencia de los documentos de Word. Sin embargo, los archivos PDF mantienen una apariencia consistente en todos los dispositivos, ya sea PC o Mac. Esta confiabilidad hace que los PDF sean un formato estándar que no se encuentra en otros tipos de documentos como JPEG o GIF.
En este artículo, revisaremos dos bibliotecas de PDF para .NET:
- IronPDF
- PDF
GrapeCity
¿Qué es IronPDF y cómo se compara con GrapeCity ?
IronPDF es una biblioteca .NET que proporciona funciones para crear, leer y manipular documentos PDF con un código mínimo. Este artículo demuestra cómo crear archivos PDF con IronPDF. Necesita conocimientos básicos de Visual Studio o C# y conocimientos prácticos de HTML.
Necesita Visual Studio para escribir, compilar y ejecutar aplicaciones, C# para la lógica y el código, y HTML para formatear archivos PDF, incluyendo títulos, encabezados, imágenes y párrafos. IronPDF es totalmente compatible con .NET Core , .NET 5, Framework y Standard. Para las aplicaciones ASP.NET , IronPDF proporciona una integración fluida para convertir páginas web a archivos PDF.
Puede crear archivos PDF en C# con un código mínimo si tiene conocimientos básicos de C# y HTML. Obtenga más información visitando la página oficial de características de IronPDF . Para la creación programática de PDF , IronPDF ofrece amplias capacidades más allá de la conversión HTML básica.
¿Cómo instalo IronPDF en mi proyecto .NET?
Para desarrollar soluciones es necesario instalar el paquete NuGet IronPDF . Haga clic en "Proyecto" en la barra de menú. Seleccione "Administrar paquetes NuGet " en el menú desplegable. Para obtener instrucciones detalladas, consulte la descripción general de la instalación . Esta ventana mostrará:

La interfaz del Administrador de paquetes NuGet muestra un resultado de búsqueda vacío al buscar IronPdf, lo que indica que el paquete puede no estar disponible o que puede haber problemas de conectividad
Seleccione "Explorar" para ver esta ventana:

El Administrador de paquetes NuGet proporciona acceso fácil a bibliotecas .NET esenciales, siendo Entity Framework Core y Newtonsoft.Json entre los paquetes más populares para operaciones de bases de datos y manejo de JSON respectivamente.
Escriba "IronPdf" en el cuadro de búsqueda y pulse "Intro". Para opciones de instalación avanzadas , incluidas las configuraciones específicas de la plataforma, consulte la documentación. Deberías ver:

La interfaz del Administrador de paquetes NuGet muestra varios paquetes de IronPDF disponibles para su instalación, con recuentos de descargas y números de versión visibles para cada paquete.
Selecciona IronPDF:

La interfaz del Administrador de paquetes NuGet muestra IronPDF (versión 2021.3.1) como el paquete seleccionado para la instalación, con bibliotecas PDF alternativas enumeradas para comparación, incluido PDFCore y varios recursos de representación de IronPDF.
Haga clic en "Instalar". Después de una instalación exitosa, verás:

Proceso de instalación de IronPDF en Visual Studio, que muestra el administrador de paquetes NuGet instalando IronPDF versión 2021.3.1 junto con sus dependencias
Presione "OK" para completar la instalación. IronPDF es compatible con plataformas Windows , incluidas las versiones Windows 10, 11 y Server. La biblioteca también es compatible con Linux y macOS para el desarrollo multiplataforma.
¿Cómo creo archivos PDF con IronPDF?
Agregue el espacio de nombres IronPdf al principio del archivo. Para desarrolladores de VB.NET , existe una funcionalidad similar:
using IronPdf;using IronPdf;Necesita una ruta de archivo para almacenar el PDF construido. Utilice SaveFileDialog para solicitar a los usuarios el nombre y la ruta del archivo. Para escenarios avanzados, exporte archivos PDF a secuencias de memoria sin guardar en disco:
private void Save_Click(object sender, EventArgs e)
{
// Code to Select the folder and save the file.
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.InitialDirectory = @"D:\";
saveFileDialog1.Title = "Save Pdf File";
saveFileDialog1.DefaultExt = "pdf";
saveFileDialog1.Filter = "Pdf files (*.pdf)|*.pdf|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string filename = saveFileDialog1.FileName;
// actual code that will create Pdf files
var HtmlLine = new HtmlToPdf();
HtmlLine.RenderHtmlAsPdf(PdfText.Text).SaveAs(filename);
// MessageBox to display that file save
MessageBox.Show("File Saved Successfully!");
}
}private void Save_Click(object sender, EventArgs e)
{
// Code to Select the folder and save the file.
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.InitialDirectory = @"D:\";
saveFileDialog1.Title = "Save Pdf File";
saveFileDialog1.DefaultExt = "pdf";
saveFileDialog1.Filter = "Pdf files (*.pdf)|*.pdf|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string filename = saveFileDialog1.FileName;
// actual code that will create Pdf files
var HtmlLine = new HtmlToPdf();
HtmlLine.RenderHtmlAsPdf(PdfText.Text).SaveAs(filename);
// MessageBox to display that file save
MessageBox.Show("File Saved Successfully!");
}
}SaveFileDialog abre un cuadro de diálogo para seleccionar la carpeta y el nombre del archivo. El directorio inicial predeterminado es la unidad D, pero puedes cambiarlo. DefaultExtension está establecida en PDF. Para conocer opciones de conversión completas, explore el tutorial de HTML a PDF .
La condición "si" contiene código que crea el PDF. Genera archivos PDF con solo dos líneas de código. PdfText es el nombre del cuadro de texto enriquecido que contiene el contenido PDF. El nombre de archivo es la ruta del archivo seleccionado desde SaveFileDialog . Para aplicaciones web, IronPDF admite la conversión de URL a PDF y de ASPX a PDF .
¿Cómo leo archivos PDF con IronPDF?
La lectura de archivos PDF solo requiere dos líneas de código con IronPDF. Para una extracción avanzada, consulte la guía de extracción de texto e imágenes .
Agregue estas importaciones:
using IronPdf;
using System;
using System.Windows.Forms;using IronPdf;
using System;
using System.Windows.Forms;Escribe este código dentro de tu función. IronPDF proporciona capacidades de análisis de PDF y acceso a PDF DOM :
private void Read_Click(object sender, EventArgs e)
{
PdfDocument PDF = PdfDocument.FromFile(FilePath.Text);
FileContent.Text = PDF.ExtractAllText();
}private void Read_Click(object sender, EventArgs e)
{
PdfDocument PDF = PdfDocument.FromFile(FilePath.Text);
FileContent.Text = PDF.ExtractAllText();
}Esto extrae toda la información de los documentos para los espectadores. Los componentes de informes utilizan estos datos como fuentes. IronPDF admite la lectura de archivos PDF desde flujos de memoria y la conversión de archivos PDF a HTML para visualización web.
¿Qué características ofrece GrapeCity PDF?
GrapeCity Documents proporciona gestión de documentos multiplataforma para formatos comunes. La biblioteca .NET Standard 2.0 lee, genera, modifica y guarda archivos PDF sin Adobe Acrobat. Ofrece soporte para fuentes, imágenes, gráficos, códigos de barras, comentarios, contornos, sellos y marcas de agua.
¿Qué capacidades de manipulación de PDF están disponibles?
GrapeCity PDF crea archivos PDF para necesidades empresariales básicas o complejas en aplicaciones .NET Standard. Puede cargar, modificar y guardar archivos PDF desde cualquier fuente. IronPDF ofrece edición completa de PDF, incluyendo fusión/división de PDF , adición/eliminación de páginas y rotación de páginas .
¿Puedo convertir archivos PDF a imágenes?
GrapeCity PDF guarda archivos PDF como imágenes sin pérdida de calidad utilizando un código mínimo. IronPDF proporciona la función de rasterizar PDF a imágenes compatible con los formatos PNG, JPEG y TIFF.
¿ GrapeCity incluye un componente de visualización de PDF?
GrapeCity Documents PDF Viewer es un visor liviano del lado del cliente que admite funciones PDF estándar. Para los desarrolladores de .NET MAUI, IronPDF ofrece visualización de PDF en aplicaciones MAUI con funcionalidad de navegación y búsqueda.
¿Qué tipos de funciones son compatibles?
GrapeCity PDF crea PDF complejos con texto, gráficos, fotos, anotaciones y contornos. IronPDF amplía esto con firmas digitales , creación y llenado de formularios , marcas de agua y gestión de metadatos .
¿Cómo instalo GrapeCity PDF?
Existen dos métodos de instalación. Para la implementación en contenedores, IronPDF ofrece compatibilidad con Docker y operación remota de contenedores para una generación flexible:
- Descargue los archivos fuente comprimidos.
- Extraiga los archivos a un directorio.
- Vaya a ese directorio.
- Ejecute
run.cmdpara crear muestras, iniciar el servicioSupportApiy abrir http://localhost:3003. - Consulte
readme.MDpara obtener más detalles.
¿Cómo instalo la edición WinForms ?
Siga estos pasos para la instalación WinForms Edition:
- Download C1ControlPanel from
GrapeCity'sComponentOne. - Abra
ControlPanelconComponentOneC1ControlPanel.exe (cierre Visual Studio). - Inicie sesión con el correo electrónico/contraseña registrados.
- Para nuevos usuarios:
- Registrarse y crear cuenta.
- Verificar dirección de correo electrónico.
- Activar mediante enlace de verificación.
- Proceda como usuario anónimo si lo prefiere.
- Seleccione Instalar en el mosaico Edición
WinForms. Instale todas las ediciones mediante la casilla "Todas las ediciones".

`GrapeCity`'s `ComponentOne` offers multiple edition options tailored to different development platforms and frameworks, each with the option to install sample projects
- Haga clic en Instalar para ver el Acuerdo de licencia. Aceptar después de revisar.
- Acepte el acuerdo de licencia para ver la página de configuración. Verifique la ruta del directorio y comience la instalación.

`ComponentOne` installation configuration screen with privacy and data collection options
- El instalador muestra el progreso durante la instalación del control. No se puede cancelar durante este proceso.
- Aparece la pantalla "Instalación exitosa" cuando se completa. Muestra la versión instalada actualmente.

The `WinForms` Edition installer interface displays a simple download progress bar and installation option for a suite of 65+ smart and effective UI controls designed for rapid Windows Forms development.

The `ComponentOne` installation interface displays a successful installation message for version 20183.1.338, featuring navigation tabs for Products, Activities, License, and Support
¿Cómo creo archivos PDF con GrapeCity ?
El siguiente código demuestra la creación básica de PDF GrapeCity . Para funciones avanzadas como HTML a PDF con JavaScript , CSS adaptable o encabezados/pies de página personalizados , IronPDF ofrece soluciones completas:
using System;
using System.IO;
using System.Drawing;
using System.Text;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Common;
using GrapeCity.Documents.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Pdf.Structure;
using GrapeCity.Documents.Pdf.MarkedContent;
using GrapeCity.Documents.Pdf.Graphics;
using GrapeCity.Documents.Pdf.Annotations;
using GCTEXT = GrapeCity.Documents.Text;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace GcPdfWeb.Samples.Basics
{
// This sample shows how to create a PDF/A-3u compliant document.
public class PdfA
{
public void CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
var date = new DateTime(1961, 4, 12, 6, 7, 0, DateTimeKind.Utc);
// Mark the document as PDF/A-3u conformant:
doc.ConformanceLevel = PdfAConformanceLevel.PdfA3u;
var fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "arial.ttf"));
var gap = 36;
// PDF/A-3a requires all content to be tagged so create and populate StructElement when rendering:
StructElement sePart = new StructElement("Part");
doc.StructTreeRoot.Children.Add(sePart);
TextLayout tl = null;
// Add 3 pages with sample content tagged according to PDF/A rules:
for (int pageNo = 1; pageNo <= 3; ++pageNo)
{
// add page
var page = doc.Pages.Add();
var g = page.Graphics;
float y = 72;
if (doc.Pages.Count == 1)
{
// Create paragraph element:
var seParagraph = new StructElement("P") { DefaultPage = page };
// Add it to Part element:
sePart.Children.Add(seParagraph);
tl = g.CreateTextLayout();
tl.MarginAll = 72;
tl.MaxWidth = page.Size.Width;
tl.DefaultFormat.Font = fnt;
tl.DefaultFormat.FontBold = true;
tl.DefaultFormat.FontSize = 20;
tl.Append("PDF/A-3A Document");
// PerformLayout is done automatically in a new TextLayout or after a Clear():
//tl.PerformLayout(true);
// Draw TextLayout within tagged content:
g.BeginMarkedContent(new TagMcid("P", 0));
g.DrawTextLayout(tl, PointF.Empty);
g.EndMarkedContent();
y = tl.ContentRectangle.Bottom + gap;
seParagraph.ContentItems.Add(new McidContentItemLink(0));
}
// Add some sample paragraphs tagged according to PDF/A rules:
for (int i = 1; i <= 3; ++i)
{
// Create paragraph element:
var seParagraph = new StructElement("P") { DefaultPage = page };
// Add it to Part element:
sePart.Children.Add(seParagraph);
var sb = new StringBuilder();
sb.Append(string.Format("Paragraph {0} on page {1}: ", i, pageNo));
sb.Append(Common.Util.LoremIpsum(1, 2, 4, 5, 10));
var para = sb.ToString();
tl.Clear();
tl.DefaultFormat.FontSize = 14;
tl.DefaultFormat.FontBold = false;
tl.MarginTop = y;
tl.Append(para);
// Draw TextLayout within tagged content:
g.BeginMarkedContent(new TagMcid("P", i));
g.DrawTextLayout(tl, PointF.Empty);
g.EndMarkedContent();
y += tl.ContentHeight + gap;
// Add content item to paragraph StructElement:
seParagraph.ContentItems.Add(new McidContentItemLink(i));
// PDF/A-3 allows embedding files into document, but they should be associated with some document element
// add embedded file associated with seParagraph:
var ef1 = EmbeddedFileStream.FromBytes(doc, Encoding.UTF8.GetBytes(para));
// ModificationDate and MimeType should be specified in case of PDF/A:
ef1.ModificationDate = date;
ef1.MimeType = "text/plain";
var fn = string.Format("Page{0}_Paragraph{1}.txt", pageNo, i);
var fs1 = FileSpecification.FromEmbeddedStream(fn, ef1);
// UnicodeFile.FileName should be specified for PDF/A compliance:
fs1.UnicodeFile.FileName = fs1.File.FileName;
// Relationship should be specified in case of PDF/A:
fs1.Relationship = AFRelationship.Unspecified;
doc.EmbeddedFiles.Add(fn, fs1);
seParagraph.AssociatedFiles.Add(fs1);
}
}
// PDF/A-3 allows transparency drawing in PDF file, add some:
var gpage = doc.Pages [0].Graphics;
gpage.FillRectangle(new RectangleF(20, 20, 200, 200), Color.FromArgb(40, Color.Red));
// PDF/A-3 allows using FormXObjects, add one with transparency:
var r = new RectangleF(0, 0, 144, 72);
var fxo = new FormXObject(doc, r);
var gfxo = fxo.Graphics;
gfxo.FillRectangle(r, Color.FromArgb(40, Color.Violet));
TextFormat tf = new TextFormat()
{
Font = fnt,
FontSize = 16,
ForeColor = Color.FromArgb(100, Color.Black),
};
gfxo.DrawString("FormXObject", tf, r, TextAlignment.Center, ParagraphAlignment.Center);
gfxo.DrawRectangle(r, Color.Blue, 3);
gpage.DrawForm(fxo, new RectangleF(300, 250, r.Width, r.Height), null, ImageAlign.ScaleImage);
// PDF/A-3 allows using embedded files, but each embedded file must be associated with a document's element:
EmbeddedFileStream ef = EmbeddedFileStream.FromFile(doc, Path.Combine("Resources", "WordDocs", "ProcurementLetter.docx"));
// ModificationDate and MimeType should be specified for EmbeddedFile in PDF/A:
ef.ModificationDate = date;
ef.MimeType = "application/msword";
var fs = FileSpecification.FromEmbeddedFile(ef);
fs.UnicodeFile.FileName = fs.File.FileName;
fs.Relationship = AFRelationship.Unspecified;
doc.EmbeddedFiles.Add("ProcurementLetter.docx", fs);
// Associate embedded file with the document:
doc.AssociatedFiles.Add(fs);
// Add an attachment associated with an annotation:
var sa = new StampAnnotation()
{
UserName = "Minerva",
Font = fnt,
Rect = new RectangleF(300, 36, 220, 72),
};
sa.Flags |= AnnotationFlags.Print;
// Use a FormXObject to represent the stamp annotation:
var stampFxo = new FormXObject(doc, new RectangleF(PointF.Empty, sa.Rect.Size));
var gstampFxo = stampFxo.Graphics;
gstampFxo.FillRectangle(stampFxo.Bounds, Color.FromArgb(40, Color.Green));
gstampFxo.DrawString("Stamp Annotation\nassociated with minerva.jpg", tf, stampFxo.Bounds, TextAlignment.Center, ParagraphAlignment.Center);
gstampFxo.DrawRectangle(stampFxo.Bounds, Color.Green, 3);
//
sa.AppearanceStreams.Normal.Default = stampFxo;
doc.Pages [0].Annotations.Add(sa);
ef = EmbeddedFileStream.FromFile(doc, Path.Combine("Resources", "Images", "minerva.jpg"));
ef.ModificationDate = date;
ef.MimeType = "image/jpeg";
fs = FileSpecification.FromEmbeddedFile(ef);
fs.UnicodeFile.FileName = fs.File.FileName;
fs.Relationship = AFRelationship.Unspecified;
doc.EmbeddedFiles.Add("minerva.jpg", fs);
sa.AssociatedFiles.Add(fs);
// Mark the document as conforming to Tagged PDF conventions (required for PDF/A):
doc.MarkInfo.Marked = true;
// Metadata.CreatorTool and DocumentInfo.Creator should be the same for a PDF/A document:
doc.Metadata.CreatorTool = doc.DocumentInfo.Creator;
// A title should be specified for PDF/A document:
doc.Metadata.Title = "GcPdf Document";
doc.ViewerPreferences.DisplayDocTitle = true;
// Done:
doc.Save(stream);
}
}
}using System;
using System.IO;
using System.Drawing;
using System.Text;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Common;
using GrapeCity.Documents.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Pdf.Structure;
using GrapeCity.Documents.Pdf.MarkedContent;
using GrapeCity.Documents.Pdf.Graphics;
using GrapeCity.Documents.Pdf.Annotations;
using GCTEXT = GrapeCity.Documents.Text;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace GcPdfWeb.Samples.Basics
{
// This sample shows how to create a PDF/A-3u compliant document.
public class PdfA
{
public void CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
var date = new DateTime(1961, 4, 12, 6, 7, 0, DateTimeKind.Utc);
// Mark the document as PDF/A-3u conformant:
doc.ConformanceLevel = PdfAConformanceLevel.PdfA3u;
var fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "arial.ttf"));
var gap = 36;
// PDF/A-3a requires all content to be tagged so create and populate StructElement when rendering:
StructElement sePart = new StructElement("Part");
doc.StructTreeRoot.Children.Add(sePart);
TextLayout tl = null;
// Add 3 pages with sample content tagged according to PDF/A rules:
for (int pageNo = 1; pageNo <= 3; ++pageNo)
{
// add page
var page = doc.Pages.Add();
var g = page.Graphics;
float y = 72;
if (doc.Pages.Count == 1)
{
// Create paragraph element:
var seParagraph = new StructElement("P") { DefaultPage = page };
// Add it to Part element:
sePart.Children.Add(seParagraph);
tl = g.CreateTextLayout();
tl.MarginAll = 72;
tl.MaxWidth = page.Size.Width;
tl.DefaultFormat.Font = fnt;
tl.DefaultFormat.FontBold = true;
tl.DefaultFormat.FontSize = 20;
tl.Append("PDF/A-3A Document");
// PerformLayout is done automatically in a new TextLayout or after a Clear():
//tl.PerformLayout(true);
// Draw TextLayout within tagged content:
g.BeginMarkedContent(new TagMcid("P", 0));
g.DrawTextLayout(tl, PointF.Empty);
g.EndMarkedContent();
y = tl.ContentRectangle.Bottom + gap;
seParagraph.ContentItems.Add(new McidContentItemLink(0));
}
// Add some sample paragraphs tagged according to PDF/A rules:
for (int i = 1; i <= 3; ++i)
{
// Create paragraph element:
var seParagraph = new StructElement("P") { DefaultPage = page };
// Add it to Part element:
sePart.Children.Add(seParagraph);
var sb = new StringBuilder();
sb.Append(string.Format("Paragraph {0} on page {1}: ", i, pageNo));
sb.Append(Common.Util.LoremIpsum(1, 2, 4, 5, 10));
var para = sb.ToString();
tl.Clear();
tl.DefaultFormat.FontSize = 14;
tl.DefaultFormat.FontBold = false;
tl.MarginTop = y;
tl.Append(para);
// Draw TextLayout within tagged content:
g.BeginMarkedContent(new TagMcid("P", i));
g.DrawTextLayout(tl, PointF.Empty);
g.EndMarkedContent();
y += tl.ContentHeight + gap;
// Add content item to paragraph StructElement:
seParagraph.ContentItems.Add(new McidContentItemLink(i));
// PDF/A-3 allows embedding files into document, but they should be associated with some document element
// add embedded file associated with seParagraph:
var ef1 = EmbeddedFileStream.FromBytes(doc, Encoding.UTF8.GetBytes(para));
// ModificationDate and MimeType should be specified in case of PDF/A:
ef1.ModificationDate = date;
ef1.MimeType = "text/plain";
var fn = string.Format("Page{0}_Paragraph{1}.txt", pageNo, i);
var fs1 = FileSpecification.FromEmbeddedStream(fn, ef1);
// UnicodeFile.FileName should be specified for PDF/A compliance:
fs1.UnicodeFile.FileName = fs1.File.FileName;
// Relationship should be specified in case of PDF/A:
fs1.Relationship = AFRelationship.Unspecified;
doc.EmbeddedFiles.Add(fn, fs1);
seParagraph.AssociatedFiles.Add(fs1);
}
}
// PDF/A-3 allows transparency drawing in PDF file, add some:
var gpage = doc.Pages [0].Graphics;
gpage.FillRectangle(new RectangleF(20, 20, 200, 200), Color.FromArgb(40, Color.Red));
// PDF/A-3 allows using FormXObjects, add one with transparency:
var r = new RectangleF(0, 0, 144, 72);
var fxo = new FormXObject(doc, r);
var gfxo = fxo.Graphics;
gfxo.FillRectangle(r, Color.FromArgb(40, Color.Violet));
TextFormat tf = new TextFormat()
{
Font = fnt,
FontSize = 16,
ForeColor = Color.FromArgb(100, Color.Black),
};
gfxo.DrawString("FormXObject", tf, r, TextAlignment.Center, ParagraphAlignment.Center);
gfxo.DrawRectangle(r, Color.Blue, 3);
gpage.DrawForm(fxo, new RectangleF(300, 250, r.Width, r.Height), null, ImageAlign.ScaleImage);
// PDF/A-3 allows using embedded files, but each embedded file must be associated with a document's element:
EmbeddedFileStream ef = EmbeddedFileStream.FromFile(doc, Path.Combine("Resources", "WordDocs", "ProcurementLetter.docx"));
// ModificationDate and MimeType should be specified for EmbeddedFile in PDF/A:
ef.ModificationDate = date;
ef.MimeType = "application/msword";
var fs = FileSpecification.FromEmbeddedFile(ef);
fs.UnicodeFile.FileName = fs.File.FileName;
fs.Relationship = AFRelationship.Unspecified;
doc.EmbeddedFiles.Add("ProcurementLetter.docx", fs);
// Associate embedded file with the document:
doc.AssociatedFiles.Add(fs);
// Add an attachment associated with an annotation:
var sa = new StampAnnotation()
{
UserName = "Minerva",
Font = fnt,
Rect = new RectangleF(300, 36, 220, 72),
};
sa.Flags |= AnnotationFlags.Print;
// Use a FormXObject to represent the stamp annotation:
var stampFxo = new FormXObject(doc, new RectangleF(PointF.Empty, sa.Rect.Size));
var gstampFxo = stampFxo.Graphics;
gstampFxo.FillRectangle(stampFxo.Bounds, Color.FromArgb(40, Color.Green));
gstampFxo.DrawString("Stamp Annotation\nassociated with minerva.jpg", tf, stampFxo.Bounds, TextAlignment.Center, ParagraphAlignment.Center);
gstampFxo.DrawRectangle(stampFxo.Bounds, Color.Green, 3);
//
sa.AppearanceStreams.Normal.Default = stampFxo;
doc.Pages [0].Annotations.Add(sa);
ef = EmbeddedFileStream.FromFile(doc, Path.Combine("Resources", "Images", "minerva.jpg"));
ef.ModificationDate = date;
ef.MimeType = "image/jpeg";
fs = FileSpecification.FromEmbeddedFile(ef);
fs.UnicodeFile.FileName = fs.File.FileName;
fs.Relationship = AFRelationship.Unspecified;
doc.EmbeddedFiles.Add("minerva.jpg", fs);
sa.AssociatedFiles.Add(fs);
// Mark the document as conforming to Tagged PDF conventions (required for PDF/A):
doc.MarkInfo.Marked = true;
// Metadata.CreatorTool and DocumentInfo.Creator should be the same for a PDF/A document:
doc.Metadata.CreatorTool = doc.DocumentInfo.Creator;
// A title should be specified for PDF/A document:
doc.Metadata.Title = "GcPdf Document";
doc.ViewerPreferences.DisplayDocTitle = true;
// Done:
doc.Save(stream);
}
}
}GrapeCity PDF ofrece funciones limitadas en comparación con IronPDF. IronPDF admite la compatibilidad con PDF/A , la accesibilidad a PDF/UA , tamaños de papel personalizados y opciones de renderizado avanzadas .
¿Cuáles son los modelos de licencia y precios de IronPDF?
Garantía de devolución de dinero de 30 días: una vez comprada la licencia, recibirá una garantía de devolución de dinero de 30 días. Si la licencia no se adapta bien a tus necesidades, IronPDF garantizará la devolución de tu dinero dentro de los 30 días.
Fácil integración: la integración de IronPDF con un proyecto en funcionamiento y su entorno es un proceso continuo que se completa con una sola línea de código. Esto puede lograrse al integrarse utilizando el método del paquete NuGet o descargándose directamente en línea e integrándose en tu entorno.
Licencia perpetua: cada licencia se compra solo una vez y no requiere renovación.
Soporte y actualizaciones de producto gratuitas: cada licencia contará con soporte continuo directamente del equipo detrás del producto y también con un año de actualizaciones de producto gratuitas. Es posible comprar extensiones en cualquier momento. Las extensiones pueden verse antes de comprar.
Licencias inmediatas: tan pronto como se recibe el pago, se envían las claves de licencia registradas.
Todas las licencias son perpetuas para puesta en escena, desarrollo y producción.
¿Cómo es compatible IronPDF con frameworks web modernos como Bootstrap?
La generación moderna de PDF se beneficia de las representaciones visuales del proceso. Este ejemplo de Bootstrap 5 demuestra la capacidad de IronPDF para renderizar líneas de tiempo de flujo de trabajo con tarjetas, insignias e indicadores de paso. Para obtener soporte completo del marco, consulte la guía de solución de problemas de Bootstrap y Flexbox :
using IronPdf;
var renderer = new ChromePdfRenderer();
string workflowTimeline = @"
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<link href='___PROTECTED_URL_66___ rel='stylesheet'>
<style>
.timeline-item { position: relative; padding-left: 40px; margin-bottom: 30px; }
.timeline-item::before { content: ''; position: absolute; left: 0; top: 0; width: 20px; height: 20px;
background: #0d6efd; border-radius: 50%; border: 3px solid white; box-shadow: 0 0 0 2px #0d6efd; }
.timeline-item::after { content: ''; position: absolute; left: 9px; top: 20px; width: 2px; height: calc(100% + 10px);
background: #dee2e6; }
.timeline-item:last-child::after { display: none; }
@media print { .timeline-item { page-break-inside: avoid; } }
</style>
</head>
<body class='bg-light'>
<div class='container py-4'>
<div class='text-center mb-5'>
<h1 class='display-6 fw-bold'>PDF Generation Workflow</h1>
<p class='lead text-muted'>From HTML to Professional PDF Documents</p>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 1: Initialize Renderer</h4>
<span class='badge bg-primary'>Setup</span>
</div>
<p class='card-text'>Create ChromePdfRenderer instance with Chrome V8 engine for accurate HTML rendering.</p>
<div class='bg-light p-2 rounded'>
<code>var renderer = new ChromePdfRenderer();</code>
</div>
<div class='mt-2'>
<small class='text-muted'>✓ Chrome V8 Engine • ✓ Full CSS3 Support • ✓ JavaScript Ready</small>
</div>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 2: Prepare HTML Content</h4>
<span class='badge bg-info'>Content</span>
</div>
<p class='card-text'>Design your document using modern HTML5, CSS3 (Flexbox/Grid), and optional JavaScript.</p>
<div class='row g-2'>
<div class='col-4'><span class='badge bg-success w-100'>HTML5</span></div>
<div class='col-4'><span class='badge bg-success w-100'>CSS3</span></div>
<div class='col-4'><span class='badge bg-success w-100'>JavaScript</span></div>
</div>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 3: Render to PDF</h4>
<span class='badge bg-warning text-dark'>Processing</span>
</div>
<p class='card-text'>Convert HTML to PDF with pixel-perfect accuracy and sub-second performance.</p>
<div class='bg-light p-2 rounded'>
<code>var pdf = renderer.RenderHtmlAsPdf(htmlContent);</code>
</div>
<div class='progress mt-2' style='height: 8px;'>
<div class='progress-bar bg-warning' style='width: 100%'></div>
</div>
<small class='text-muted d-block mt-1'>Average render time: 0.9 seconds</small>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 4: Save or Stream</h4>
<span class='badge bg-success'>Output</span>
</div>
<p class='card-text'>Export to file, stream, or byte array for flexible deployment options.</p>
<div class='bg-light p-2 rounded'>
<code>pdf.SaveAs("document.pdf");</code>
</div>
<div class='mt-2'>
<span class='badge bg-outline-secondary me-1'>File</span>
<span class='badge bg-outline-secondary me-1'>Stream</span>
<span class='badge bg-outline-secondary'>Byte Array</span>
</div>
</div>
</div>
</div>
<div class='alert alert-info'>
<strong>Comparison Note:</strong> GrapeCity PDF Viewer focuses on document viewing and annotation, not HTML-to-PDF generation. IronPDF specializes in creating PDFs from modern web content with full Bootstrap and framework support.
</div>
<div class='card shadow-sm border-primary'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Key Advantages</h5>
</div>
<div class='card-body'>
<div class='row'>
<div class='col-md-6'>
<h6 class='text-primary'>IronPDF Strengths</h6>
<ul class='small'>
<li>Complete HTML-to-PDF workflow</li>
<li>Bootstrap 5 framework support</li>
<li>Async/await for scalability</li>
<li>Cross-platform deployment</li>
</ul>
</div>
<div class='col-md-6'>
<h6 class='text-muted'>GrapeCity Focus</h6>
<ul class='small'>
<li>PDF viewing and annotation</li>
<li>UI component for display</li>
<li>Limited generation features</li>
<li>Viewer-centric approach</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(workflowTimeline);
pdf.SaveAs("workflow-timeline.pdf");using IronPdf;
var renderer = new ChromePdfRenderer();
string workflowTimeline = @"
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<link href='___PROTECTED_URL_66___ rel='stylesheet'>
<style>
.timeline-item { position: relative; padding-left: 40px; margin-bottom: 30px; }
.timeline-item::before { content: ''; position: absolute; left: 0; top: 0; width: 20px; height: 20px;
background: #0d6efd; border-radius: 50%; border: 3px solid white; box-shadow: 0 0 0 2px #0d6efd; }
.timeline-item::after { content: ''; position: absolute; left: 9px; top: 20px; width: 2px; height: calc(100% + 10px);
background: #dee2e6; }
.timeline-item:last-child::after { display: none; }
@media print { .timeline-item { page-break-inside: avoid; } }
</style>
</head>
<body class='bg-light'>
<div class='container py-4'>
<div class='text-center mb-5'>
<h1 class='display-6 fw-bold'>PDF Generation Workflow</h1>
<p class='lead text-muted'>From HTML to Professional PDF Documents</p>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 1: Initialize Renderer</h4>
<span class='badge bg-primary'>Setup</span>
</div>
<p class='card-text'>Create ChromePdfRenderer instance with Chrome V8 engine for accurate HTML rendering.</p>
<div class='bg-light p-2 rounded'>
<code>var renderer = new ChromePdfRenderer();</code>
</div>
<div class='mt-2'>
<small class='text-muted'>✓ Chrome V8 Engine • ✓ Full CSS3 Support • ✓ JavaScript Ready</small>
</div>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 2: Prepare HTML Content</h4>
<span class='badge bg-info'>Content</span>
</div>
<p class='card-text'>Design your document using modern HTML5, CSS3 (Flexbox/Grid), and optional JavaScript.</p>
<div class='row g-2'>
<div class='col-4'><span class='badge bg-success w-100'>HTML5</span></div>
<div class='col-4'><span class='badge bg-success w-100'>CSS3</span></div>
<div class='col-4'><span class='badge bg-success w-100'>JavaScript</span></div>
</div>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 3: Render to PDF</h4>
<span class='badge bg-warning text-dark'>Processing</span>
</div>
<p class='card-text'>Convert HTML to PDF with pixel-perfect accuracy and sub-second performance.</p>
<div class='bg-light p-2 rounded'>
<code>var pdf = renderer.RenderHtmlAsPdf(htmlContent);</code>
</div>
<div class='progress mt-2' style='height: 8px;'>
<div class='progress-bar bg-warning' style='width: 100%'></div>
</div>
<small class='text-muted d-block mt-1'>Average render time: 0.9 seconds</small>
</div>
</div>
</div>
<div class='timeline-item'>
<div class='card shadow-sm'>
<div class='card-body'>
<div class='d-flex justify-content-between align-items-center mb-2'>
<h4 class='card-title mb-0'>Step 4: Save or Stream</h4>
<span class='badge bg-success'>Output</span>
</div>
<p class='card-text'>Export to file, stream, or byte array for flexible deployment options.</p>
<div class='bg-light p-2 rounded'>
<code>pdf.SaveAs("document.pdf");</code>
</div>
<div class='mt-2'>
<span class='badge bg-outline-secondary me-1'>File</span>
<span class='badge bg-outline-secondary me-1'>Stream</span>
<span class='badge bg-outline-secondary'>Byte Array</span>
</div>
</div>
</div>
</div>
<div class='alert alert-info'>
<strong>Comparison Note:</strong> GrapeCity PDF Viewer focuses on document viewing and annotation, not HTML-to-PDF generation. IronPDF specializes in creating PDFs from modern web content with full Bootstrap and framework support.
</div>
<div class='card shadow-sm border-primary'>
<div class='card-header bg-primary text-white'>
<h5 class='mb-0'>Key Advantages</h5>
</div>
<div class='card-body'>
<div class='row'>
<div class='col-md-6'>
<h6 class='text-primary'>IronPDF Strengths</h6>
<ul class='small'>
<li>Complete HTML-to-PDF workflow</li>
<li>Bootstrap 5 framework support</li>
<li>Async/await for scalability</li>
<li>Cross-platform deployment</li>
</ul>
</div>
<div class='col-md-6'>
<h6 class='text-muted'>GrapeCity Focus</h6>
<ul class='small'>
<li>PDF viewing and annotation</li>
<li>UI component for display</li>
<li>Limited generation features</li>
<li>Viewer-centric approach</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(workflowTimeline);
pdf.SaveAs("workflow-timeline.pdf");Resultado: un PDF de línea de tiempo de flujo de trabajo profesional con tarjetas Bootstrap 5, insignias, barras de progreso y estilo de línea de tiempo personalizado. IronPDF renderiza con precisión todas las posiciones, diseños de flexbox, y clases de utilidad, demostrando soporte CSS3 integral para diseños visuales complejos.
Para obtener compatibilidad detallada con Bootstrap, consulte la Guía CSS de Bootstrap y Flexbox . IronPDF admite fuentes web e íconos para una tipografía enriquecida.
¿Cuál es el precio del paquete Lite?
- 1 Desarrollador
- 1 Localización
- 1 Proyecto
- Licencia Perpetua
Este paquete permite que un desarrollador utilice Iron Software en una sola ubicación para una sola aplicación. Las licencias no son transferibles fuera de organizaciones o relaciones agencia/cliente. Excluye la redistribución OEM y el uso de SaaS sin cobertura adicional.
Precios: comienzan desde $799 por año.
¿Qué incluye la Licencia Profesional?
- 10 Desarrolladores
- 10 Localizaciones
- 10 Proyectos
- Licencia Perpetua
Esta licencia permite que diez desarrolladores utilicen Iron Software en hasta diez ubicaciones. Puede usarlo en una cantidad ilimitada de sitios web, aplicaciones de intranet o software de escritorio. Las licencias no son transferibles fuera de organizaciones. Excluye la redistribución OEM y el uso de SaaS sin cobertura adicional. Se integra con hasta 10 proyectos.
Precios: Comienza desde $1,199 por año.
¿Cuáles son los beneficios de una licencia ilimitada?
- Desarrolladores Ilimitados
- Localizaciones Ilimitadas
- Proyectos Ilimitados
- Licencia Perpetua
Permite que un número ilimitado de desarrolladores en una organización utilicen Iron Software en ubicaciones ilimitadas. Úselo en aplicaciones ilimitadas. Las licencias no son transferibles fuera de organizaciones. Excluye la redistribución OEM y el uso de SaaS sin cobertura adicional.
Precio: Comienza desde $2999 al año.
Redistribución sin regalías: esto le permite distribuir el software Iron como parte de varios productos comerciales empaquetados de forma diferente (sin tener que pagar regalías) según la cantidad de proyectos cubiertos por la licencia base. Esto permitirá el despliegue de Iron Software dentro de servicios de software SaaS, que se basa en el número de proyectos cubiertos por la licencia base.
Precio: Comienza desde $1599 al año.

IronPDF ofrece tres niveles de licencia, con la licencia Profesional destacada como "La más popular", con 10 desarrolladores, 10 ubicaciones y 10 proyectos por $999.
¿Cuáles son los modelos de licencia y precios de GrapeCity PDF?
¿Qué incluye los documentos para la licencia PDF?
- Incluye 1 Licencia de Desarrollador
- 1 Localización de Distribución
Incluye una licencia de desarrollador y una ubicación de distribución sin soporte ni mantenimiento.
Precios: Comienza desde $1,199 por año.
¿Qué es Documents for PDF Unlimited?
- Incluye 1 Licencia de Desarrollador
- Localizaciones de Distribución Ilimitadas
Incluye una licencia de desarrollador con ubicaciones de distribución ilimitadas. Sin soporte ni mantenimiento. GrapeCity no es compatible con SaaS ni OEM.
Precios: comienza desde $2799 por año.
¿Qué ofrece Documents for PDF Team Unlimited?
- Incluye 5 Licencias de Desarrollador
- Localizaciones de Distribución Ilimitadas
Incluye cinco licencias de desarrollador con ubicaciones de distribución ilimitadas. Sin soporte ni mantenimiento. GrapeCity no es compatible con SaaS ni OEM.
Precios: comienza desde $5799 por año.

`GrapeCity`'s Documents for PDF pricing structure offers three tiers to accommodate different development team sizes and distribution needs.
El paquete IronPDF Lite One-Developer incluye soporte de 1 año para $799 . El paquete GrapeCity Documents for PDF One-Developer cuesta $1,199 sin soporte. El paquete profesional de IronPDF incluye 10 desarrolladores con soporte durante un año por $1,199 . GrapeCity ofrece solo un paquete para 5 desarrolladores por $5799. Para obtener más información sobre las opciones de licencia de IronPDF , visite la página oficial de licencias.
Los paquetes IronPDF Lite y Professional incluyen servicio SaaS, OEM y opciones de soporte de 5 años. El paquete Lite para un desarrollador con cinco años de soporte, SaaS y OEM cuesta $2897. GrapeCity no ofrece SaaS, OEM ni soporte de cinco años. El paquete Iron Professional para 10 desarrolladores con 5 años de soporte, SaaS y OEM cuesta $3397. GrapeCity no ofrece la opción para 10 desarrolladores. Obtenga información sobre las extensiones de licencia y las opciones de actualización para obtener soporte a largo plazo.
¿Qué biblioteca PDF debo elegir para mi proyecto .NET?
GrapeCity Documents for PDF permite la exportación/importación, la creación AcroForms y la ejecución de PDF en aplicaciones de escritorio. Sin embargo, para una manipulación completa de PDF, incluida la creación de formularios , firmas digitales y soporte de anotaciones , IronPDF ofrece funciones avanzadas.
IronPDF proporciona una mayor precisión. Los competidores pueden encontrar problemas como conversión de imágenes fallida o caracteres desconocidos. IronPDF ofrece resultados precisos. El motor de renderizado de Chrome garantiza una representación perfecta en píxeles, verificada mediante la guía de HTML a PDF con píxeles perfectos . Para optimizarlo, consulte la guía de asistencia de rendimiento de IronPDF .
IronPDF ofrece licencias competitivas y soporte sin costos continuos. IronPDF comienza en $799 con paquetes de funciones completos. GrapeCity PDF comienza en $1649 por año. IronPDF es compatible con múltiples plataformas a un solo precio. Para implementaciones empresariales, IronPDF ofrece capacidades asíncronas y multihilo para una generación de alto rendimiento.
Puede acceder a la prueba gratuita para explorar todas las funciones. Al comprar el Iron Suite completo obtendrás cinco productos por el precio de dos. Para obtener detalles sobre las licencias de IronPDF , visite la página del producto Iron Suite de Iron Software para obtener información completa del paquete.
GrapeCity Documents for PDF es una marca registrada de su respectivo propietario. Este sitio no está afiliado, respaldado ni patrocinado por GrapeCity Documents for PDF. Todos los nombres de producto, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones son sólo para fines informativos y reflejan información disponible públicamente al momento de escribir.Preguntas Frecuentes
¿Cómo puedo convertir HTML a PDF en .NET?
Puede usar el método RenderHtmlAsPdf de IronPDF para convertir cadenas HTML en PDF. Además, puede convertir archivos HTML en PDF utilizando el método RenderHtmlFileAsPdf.
¿Cuáles son los pasos de instalación de una biblioteca de PDF usando NuGet?
Para instalar IronPDF usando NuGet, abra Visual Studio, navegue a 'Administrar paquetes NuGet', busque 'IronPdf' y haga clic en 'Instalar' para agregarlo a su proyecto.
¿Cuáles son algunas alternativas al GrapeCity PDF Viewer para .NET?
IronPDF es una alternativa adecuada al GrapeCity PDF Viewer, proporcionando una experiencia fácil de usar con soporte extenso para .NET Core, .NET 5, Framework y Standard.
¿Cómo creo y leo archivos PDF usando una biblioteca .NET?
Usando IronPDF, puede crear PDFs incluyendo el espacio de nombres IronPdf y usando la clase HtmlToPdf para renderizar HTML como PDF. Para leer PDFs, puede usar la clase PdfDocument para acceder y manipular el contenido.
¿Cuáles son las opciones de licencia disponibles para una biblioteca de PDF?
IronPDF ofrece una variedad de opciones de licencia, incluyendo un Paquete Lite para desarrolladores individuales, una Licencia Profesional para hasta 10 desarrolladores, y una Licencia Ilimitada para equipos, todas con licencias perpetuas y opciones de soporte.
¿Por qué debería elegir IronPDF sobre otras soluciones de PDF?
IronPDF es recomendado por su precisión, funciones completas, licencias competitivas y extensas opciones de soporte. Ofrece soporte para múltiples plataformas a un precio competitivo.
¿Puedo probar una biblioteca PDF antes de comprarla?
Sí, IronPDF ofrece una prueba gratuita que le permite explorar todas las funciones disponibles antes de tomar una decisión de compra. Además, el paquete Iron Suite proporciona acceso a todos los productos de Iron Software a un precio con descuento.
¿Cuáles son algunas desventajas de usar archivos PDF?
Los PDFs pueden ser difíciles de compartir por correo electrónico debido a su tamaño, pueden no mostrarse claramente en dispositivos móviles en comparación con documentos de Word, y requieren software específico para editar o actualizar.






