COMPARACIóN DE PRODUCTOS

Comparación entre IronPDF y GrapeCity PDF Viewer

Actualizado 1 de septiembre, 2022
Compartir:

PDF son las siglas de Portable Document Format (formato de documento portátil). Es un tipo de archivo que permite la visualización convencional de cualquier documento en muchos dispositivos diferentes. Los PDF suelen utilizarse para compartir documentos importantes, como currículos con posibles empleadores o facturas con clientes.

A pesar de su popularidad, el uso de PDF como forma de almacenar y compartir datos también tiene algunas desventajas. Por ejemplo, los PDF no se pueden compartir por correo electrónico, ya que primero hay que abrirlos en un lector de PDF. Y aunque así fuera, los PDF no se verían tan nítidos como un documento de Word cuando se abren en un teléfono. Además, los PDF no pueden editarse ni actualizarse como los documentos de Word, a menos que tenga instalado en su ordenador un programa de edición que pueda reconocer los datos del archivo y convertirlos de nuevo en formato editable. Esto significa que los archivos PDF tienen el mismo aspecto cuando los abres, independientemente del dispositivo que utilices, ya sea un PC o un Mac. Esto hace que los archivos PDF sean fiables en todos los dispositivos gracias al estándar familiar que implementan y que no se encuentra en otros formatos de documento como JPEG o GIF.

En este artículo examinaremos dos bibliotecas PDF .NET:

  • IronPDF
  • Ciudad de la uva PDF

IronPDF

IronPDF es una biblioteca .NET que proporciona funciones de creación para crear, leer y manipular documentos PDF con sólo unas pocas líneas de código. El siguiente artículo le mostrará cómo crear archivos PDF con IronPDF. El contenido se basa en la suposición de que usted tiene una comprensión de los fundamentos de Visual Studio o C #, y que usted posee un conocimiento práctico de HTML.

Necesitamos Visual Studio para escribir, compilar y ejecutar nuestra aplicación, C# para escribir lógica y código, y HTML para dar formato a los archivos PDF, incluida la adición de títulos, encabezados, imágenes, párrafos, etc. La biblioteca IronPDF es totalmente compatible con .NET Core, .NET 5, Framework y Standard.

Podemos crear un archivo PDF en C# con unas pocas líneas de código. Se trata de una tarea sencilla si se tienen conocimientos básicos de C# y HTML. Más información sobre IronPDF enlace.

Instalación de IronPDF

El desarrollo de una solución requiere la instalación del NuGet Paquete. Haga clic en "Proyecto" directamente desde la barra de menús. Aparecerá una lista desplegable. Seleccione en Gestionar Paquetes NuGet del menú desplegable y selecciónelo. Aparecerá una ventana como ésta:

Seleccione la pestaña "Examinar" y aparecerá una ventana como ésta:

Escribe 'IronPdf' en el cuadro de búsqueda y pulsa "Intro". Debería aparecer la ventana resultante:

Seleccione IronPdf:

Cómo Crear Un Archivo PDF En C# Por Ironpdfile

Cómo Crear Un Archivo PDF En C# Por Ironpdfile

Seleccione el botón "Instalar". La ventana resultante aparecerá tras una instalación correcta:

Una vez que pulses el botón "OK", estarás listo para empezar.

Crear un PDF

Añadir el espacio de nombres IronPdf en la parte superior del archivo.

using IronPdf;
using IronPdf;
Imports IronPdf
VB   C#

El trabajo propiamente dicho empieza a partir de este momento. Necesitamos una ruta de archivo para almacenar el documento PDF construido. Para ello, utilizamos SaveFileDialog, que pide al usuario que elija un nombre y una ruta de archivo.

private void Save_Click(object sender, EventArgs e)
{
    //  Código para Seleccionar la carpeta y guardar el archivo.
    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;
        //  código real que creará archivos Pdf
        var HtmlLine = new HtmlToPdf();
        HtmlLine.RenderHtmlAsPdf(PdfText.Text).SaveAs(filename);
        //  MessageBox para mostrar el archivo guardado
        MessageBox.Show("File Saved Successfully!");
    }
}
private void Save_Click(object sender, EventArgs e)
{
    //  Código para Seleccionar la carpeta y guardar el archivo.
    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;
        //  código real que creará archivos Pdf
        var HtmlLine = new HtmlToPdf();
        HtmlLine.RenderHtmlAsPdf(PdfText.Text).SaveAs(filename);
        //  MessageBox para mostrar el archivo guardado
        MessageBox.Show("File Saved Successfully!");
    }
}
Private Sub Save_Click(ByVal sender As Object, ByVal e As EventArgs)
	'  Código para Seleccionar la carpeta y guardar el archivo.
	Dim saveFileDialog1 As 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 Then
		Dim filename As String = saveFileDialog1.FileName
		'  código real que creará archivos Pdf
		Dim HtmlLine = New HtmlToPdf()
		HtmlLine.RenderHtmlAsPdf(PdfText.Text).SaveAs(filename)
		'  MessageBox para mostrar el archivo guardado
		MessageBox.Show("File Saved Successfully!")
	End If
End Sub
VB   C#

SaveFileDialog debería abrir un diálogo de archivo que le permitirá seleccionar la carpeta y el nombre del archivo en la ubicación donde desea construir un documento PDF. El directorio inicial está establecido en la unidad D, pero puede elegir cualquiera. Como sólo tratamos con archivos PDF, la extensión predeterminada es PDF.

En la condición "if" se inserta el código real que creará el archivo PDF. Ahora podemos ver que hemos conseguido generar un archivo PDF con sólo dos líneas de código. PdfText es el nombre de un cuadro de texto enriquecido que contiene el texto que se escribirá en un documento PDF. El nombre del archivo es la ruta y el nombre del archivo que se seleccionó a través del método SaveFileDialog.

Lectura de PDF

Puede que esté pensando que el código para leer archivos PDF será complejo y difícil de escribir/entender - pero no se preocupe - IronPDF lo ha hecho más fácil y sencillo. Este proceso sólo requiere dos líneas de código.!

Añade el siguiente código para importar el archivo IronPdf en la parte superior del archivo.

using IronPdf;
using System;
using System.Windows.Forms;
using IronPdf;
using System;
using System.Windows.Forms;
Imports IronPdf
Imports System
Imports System.Windows.Forms
VB   C#

Escribe el siguiente código dentro de la función.

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();
}
Private Sub Read_Click(ByVal sender As Object, ByVal e As EventArgs)
	Dim PDF As PdfDocument = PdfDocument.FromFile(FilePath.Text)
	FileContent.Text = PDF.ExtractAllText()
End Sub
VB   C#

Esto extraerá toda la información de la fuente de datos al visor de documentos. Todos los componentes de los informes utilizarán esos datos como fuente de datos.

GrapeCity PDF Características

GrapeCity Documents es un sistema de gestión de documentos multiplataforma que proporciona una solución universal de documento, editor y lector para todos los formatos de documento habituales. Sin necesidad de un programa adicional como Adobe Acrobat, la rica biblioteca que proporciona .NET Standard 2.0 puede utilizarse para leer, generar, alterar y guardar archivos PDF. Cuenta con un sólido conjunto de funciones que permite a los desarrolladores crear archivos PDF que incluyan compatibilidad avanzada con fuentes, fotos, gráficos, códigos de barras, comentarios, contornos, sellos, marcas de agua y mucho más.

Manipulación de PDF

En aplicaciones .NET Standard, puede utilizar GrapeCityPDF para producir documentos PDF con necesidades empresariales básicas o complicadas. Además, puede cargar, modificar y guardar PDF de cualquier fuente.

Guardar PDF como imagen

Con GrapeCityPDF puedes guardar un PDF como imagen sin sacrificar la calidad de la imagen. Además, puede utilizar sólo unas pocas líneas de código para implementar esta funcionalidad.

Visor de PDF

GrapeCity Documents PDF Viewer es un visor cliente ligero basado en programación para visualizar archivos PDF. Se admiten muchas de las funciones habituales de PDF.

Gran cantidad de funciones

La biblioteca GrapeCityPDF cuenta con numerosas funciones que permiten crear complicados documentos PDF que contienen información como texto, gráficos, fotos, anotaciones, esquemas, etc.

Instalaciones

Hay dos métodos para instalar GrapeCity.

  1. Seleccione el botón descargar archivos fuente comprimidos para descargar las fuentes de muestra actuales.
  2. Extraiga los archivos directamente del zip descargado en un directorio de su ordenador.
  3. Navegue hasta ese directorio.
  4. Ejecute el archivo por lotes run.cmd. Esto construirá las fuentes de muestra. Inicie el servicio SupportApi y abra la URL http://localhost:3003 en su navegador predeterminado.
  5. Para más información, consulta el archivo readme.MD, incluido en el zip descargado.

Instalación de la edición WinForms

A continuación se describe el procedimiento de instalación de la edición WinForms. Los siguientes pasos proporcionan las instrucciones para instalar la Edición WinForms:

  • Descargue el C1ControlPanel de https://www.grapecity.com/componentone para instalar la última edición de WinForms.
  • Abra el ControlPanel utilizando ComponentOneC1ControlPanel.exe. Todas las instancias en ejecución de Visual Studio deben cerrarse.
  • Un usuario existente puede iniciar sesión utilizando la dirección de correo electrónico y la contraseña registradas.
  • Si eres un usuario nuevo:
    • Regístrese en Component One y cree una cuenta rellenando los campos obligatorios.
    • La verificación se enviará a su dirección de correo electrónico.
    • Active su dirección de correo electrónico visitando el enlace de verificación.
    • Si no desea identificarse o registrarse, puede hacerlo como usuario anónimo.
  • En el mosaico WinForms Edition, seleccione Install. Para instalar todas las ediciones, marque la casilla Todas las ediciones. Seleccione el botón Ver más para obtener más información sobre la edición.

    Instalación de GrapeCity PDF

  • Una vez que haga clic en Instalar, aparecerá una página con el Acuerdo de Licencia pidiéndole que lo revise antes de hacer clic en el botón Aceptar Acuerdo de Licencia.
  • Una vez que acepte el Acuerdo de Licencia, aparecerá una página consecuente con los botones de Configuración y cambio de ruta de directorio. Seleccione la opción Aceptar configuración para verificar la ruta del directorio y comenzar el proceso de instalación.

    Instalación de GrapeCity PDF

  • El instalador instala los controles y muestra su progreso mientras lo hace. No podrá cancelar el proceso de instalación mientras aparezca esta pantalla.
  • Una vez instalados los controles, aparecerá la pantalla "Instalación correcta". La versión actualmente instalada se mostrará en la Edición correspondiente.
  • El instalador instala los controles y muestra su progreso mientras lo hace. No podrá cancelar el proceso de instalación mientras aparezca esta pantalla.

    Instalación de GrapeCity PDF

  • Una vez instalados los mandos, aparecerá la pantalla "Instalación correcta". La versión actualmente instalada se mostrará en la Edición correspondiente.
    Instalación de GrapeCity PDF

Crear un PDF

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
{
    //  Este ejemplo muestra cómo crear un documento compatible con PDF/A-3u.
    public class PdfA
    {
        public void CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            var date = new DateTime(1961, 4, 12, 6, 7, 0, DateTimeKind.Utc);

            //  Marcar el documento como conforme con PDF/A-3u:
            doc.ConformanceLevel = PdfAConformanceLevel.PdfA3u;

            var fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "arial.ttf"));
            var gap = 36;

            //  PDF/A-3a requiere que todo el contenido esté etiquetado, así que cree y rellene StructElement al renderizar:
            StructElement sePart = new StructElement("Part");
            doc.StructTreeRoot.Children.Add(sePart);

            TextLayout tl = null;
            //  Añada 3 páginas con contenido de muestra etiquetado según las normas PDF/A:
            for (int pageNo = 1; pageNo <= 3; ++pageNo)
            {
                //  añadir página
                var page = doc.Pages.Add();
                var g = page.Graphics;
                float y = 72;
                if (doc.Pages.Count == 1)
                {
                    //  Crear elemento de párrafo:
                    var seParagraph = new StructElement("P") { DefaultPage = page };
                    //  Añádelo al elemento Parte:
                    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 se realiza automáticamente en un nuevo TextLayout o después de un Clear():
                    //tl.PerformLayout(true);

                    //  Dibuja TextLayout dentro del contenido etiquetado:
                    g.BeginMarkedContent(new TagMcid("P", 0));
                    g.DrawTextLayout(tl, PointF.Empty);
                    g.EndMarkedContent();

                    y = tl.ContentRectangle.Bottom + gap;

                    seParagraph.ContentItems.Add(new McidContentItemLink(0));
                }

                //  Añada algunos párrafos de muestra etiquetados según las normas PDF/A:
                for (int i = 1; i <= 3; ++i)
                {
                    //  Crear elemento de párrafo:
                    var seParagraph = new StructElement("P") { DefaultPage = page };
                    //  Añádelo al elemento Parte:
                    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);

                    //  Dibuja TextLayout dentro del contenido etiquetado:
                    g.BeginMarkedContent(new TagMcid("P", i));
                    g.DrawTextLayout(tl, PointF.Empty);
                    g.EndMarkedContent();

                    y += tl.ContentHeight + gap;

                    //  Añadir elemento de contenido al párrafo StructElement:
                    seParagraph.ContentItems.Add(new McidContentItemLink(i));

                    //  PDF/A-3 permite incrustar archivos en el documento, pero deben estar asociados a algún elemento del documento
                    //  añadir archivo incrustado asociado a seParagraph:
                    var ef1 = EmbeddedFileStream.FromBytes(doc, Encoding.UTF8.GetBytes(para));
                    //  ModificationDate y MimeType deben especificarse en el caso de 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 debe especificarse para el cumplimiento de PDF/A:
                    fs1.UnicodeFile.FileName = fs1.File.FileName;
                    //  La relación debe especificarse en el caso de PDF/A:
                    fs1.Relationship = AFRelationship.Unspecified;
                    doc.EmbeddedFiles.Add(fn, fs1);
                    seParagraph.AssociatedFiles.Add(fs1);
                }
            }

            //  PDF/A-3 permite dibujar transparencias en un archivo PDF:
            var gpage = doc.Pages [0].Graphics;
            gpage.FillRectangle(new RectangleF(20, 20, 200, 200), Color.FromArgb(40, Color.Red));

            //  PDF/A-3 permite utilizar FormXObjects, añada uno con transparencia:
            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 permite utilizar archivos incrustados, pero cada archivo incrustado debe estar asociado a un elemento del documento:
            EmbeddedFileStream ef = EmbeddedFileStream.FromFile(doc, Path.Combine("Resources", "WordDocs", "ProcurementLetter.docx"));
            //  ModificationDate y MimeType deben especificarse para EmbeddedFile en 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);
            //  Asociar archivo incrustado con el documento:
            doc.AssociatedFiles.Add(fs);

            //  Añadir un archivo adjunto asociado a una anotación:
            var sa = new StampAnnotation()
            {
                UserName = "Minerva",
                Font = fnt,
                Rect = new RectangleF(300, 36, 220, 72),
            };
            sa.Flags 
= AnnotationFlags.Print;
            //  Utilice un FormXObject para representar la anotación del sello:
            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);

            //  Marcar el documento como conforme a las convenciones de Tagged PDF (necesario para PDF/A):
            doc.MarkInfo.Marked = true;

            //  Metadata.CreatorTool y DocumentInfo.Creator deben ser los mismos para un documento PDF/A:
            doc.Metadata.CreatorTool = doc.DocumentInfo.Creator;
            //  Debe especificarse un título para el documento PDF/A:
            doc.Metadata.Title = "GcPdf Document";
            doc.ViewerPreferences.DisplayDocTitle = true;

            //  Hecho:
            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
{
    //  Este ejemplo muestra cómo crear un documento compatible con PDF/A-3u.
    public class PdfA
    {
        public void CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            var date = new DateTime(1961, 4, 12, 6, 7, 0, DateTimeKind.Utc);

            //  Marcar el documento como conforme con PDF/A-3u:
            doc.ConformanceLevel = PdfAConformanceLevel.PdfA3u;

            var fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "arial.ttf"));
            var gap = 36;

            //  PDF/A-3a requiere que todo el contenido esté etiquetado, así que cree y rellene StructElement al renderizar:
            StructElement sePart = new StructElement("Part");
            doc.StructTreeRoot.Children.Add(sePart);

            TextLayout tl = null;
            //  Añada 3 páginas con contenido de muestra etiquetado según las normas PDF/A:
            for (int pageNo = 1; pageNo <= 3; ++pageNo)
            {
                //  añadir página
                var page = doc.Pages.Add();
                var g = page.Graphics;
                float y = 72;
                if (doc.Pages.Count == 1)
                {
                    //  Crear elemento de párrafo:
                    var seParagraph = new StructElement("P") { DefaultPage = page };
                    //  Añádelo al elemento Parte:
                    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 se realiza automáticamente en un nuevo TextLayout o después de un Clear():
                    //tl.PerformLayout(true);

                    //  Dibuja TextLayout dentro del contenido etiquetado:
                    g.BeginMarkedContent(new TagMcid("P", 0));
                    g.DrawTextLayout(tl, PointF.Empty);
                    g.EndMarkedContent();

                    y = tl.ContentRectangle.Bottom + gap;

                    seParagraph.ContentItems.Add(new McidContentItemLink(0));
                }

                //  Añada algunos párrafos de muestra etiquetados según las normas PDF/A:
                for (int i = 1; i <= 3; ++i)
                {
                    //  Crear elemento de párrafo:
                    var seParagraph = new StructElement("P") { DefaultPage = page };
                    //  Añádelo al elemento Parte:
                    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);

                    //  Dibuja TextLayout dentro del contenido etiquetado:
                    g.BeginMarkedContent(new TagMcid("P", i));
                    g.DrawTextLayout(tl, PointF.Empty);
                    g.EndMarkedContent();

                    y += tl.ContentHeight + gap;

                    //  Añadir elemento de contenido al párrafo StructElement:
                    seParagraph.ContentItems.Add(new McidContentItemLink(i));

                    //  PDF/A-3 permite incrustar archivos en el documento, pero deben estar asociados a algún elemento del documento
                    //  añadir archivo incrustado asociado a seParagraph:
                    var ef1 = EmbeddedFileStream.FromBytes(doc, Encoding.UTF8.GetBytes(para));
                    //  ModificationDate y MimeType deben especificarse en el caso de 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 debe especificarse para el cumplimiento de PDF/A:
                    fs1.UnicodeFile.FileName = fs1.File.FileName;
                    //  La relación debe especificarse en el caso de PDF/A:
                    fs1.Relationship = AFRelationship.Unspecified;
                    doc.EmbeddedFiles.Add(fn, fs1);
                    seParagraph.AssociatedFiles.Add(fs1);
                }
            }

            //  PDF/A-3 permite dibujar transparencias en un archivo PDF:
            var gpage = doc.Pages [0].Graphics;
            gpage.FillRectangle(new RectangleF(20, 20, 200, 200), Color.FromArgb(40, Color.Red));

            //  PDF/A-3 permite utilizar FormXObjects, añada uno con transparencia:
            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 permite utilizar archivos incrustados, pero cada archivo incrustado debe estar asociado a un elemento del documento:
            EmbeddedFileStream ef = EmbeddedFileStream.FromFile(doc, Path.Combine("Resources", "WordDocs", "ProcurementLetter.docx"));
            //  ModificationDate y MimeType deben especificarse para EmbeddedFile en 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);
            //  Asociar archivo incrustado con el documento:
            doc.AssociatedFiles.Add(fs);

            //  Añadir un archivo adjunto asociado a una anotación:
            var sa = new StampAnnotation()
            {
                UserName = "Minerva",
                Font = fnt,
                Rect = new RectangleF(300, 36, 220, 72),
            };
            sa.Flags 
= AnnotationFlags.Print;
            //  Utilice un FormXObject para representar la anotación del sello:
            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);

            //  Marcar el documento como conforme a las convenciones de Tagged PDF (necesario para PDF/A):
            doc.MarkInfo.Marked = true;

            //  Metadata.CreatorTool y DocumentInfo.Creator deben ser los mismos para un documento PDF/A:
            doc.Metadata.CreatorTool = doc.DocumentInfo.Creator;
            //  Debe especificarse un título para el documento PDF/A:
            doc.Metadata.Title = "GcPdf Document";
            doc.ViewerPreferences.DisplayDocTitle = true;

            //  Hecho:
            doc.Save(stream);
        }
    }
}
Imports Microsoft.VisualBasic
Imports System
Imports System.IO
Imports System.Drawing
Imports System.Text
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Common
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Pdf.Structure
Imports GrapeCity.Documents.Pdf.MarkedContent
Imports GrapeCity.Documents.Pdf.Graphics
Imports GrapeCity.Documents.Pdf.Annotations
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing
Namespace GcPdfWeb.Samples.Basics
	'  Este ejemplo muestra cómo crear un documento compatible con PDF/A-3u.
	Public Class PdfA
		Public Sub CreatePDF(ByVal stream As Stream)
			Dim doc = New GcPdfDocument()
			Dim [date] = New DateTime(1961, 4, 12, 6, 7, 0, DateTimeKind.Utc)

			'  Marcar el documento como conforme con PDF/A-3u:
			doc.ConformanceLevel = PdfAConformanceLevel.PdfA3u

			Dim fnt = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "arial.ttf"))
			Dim gap = 36

			'  PDF/A-3a requiere que todo el contenido esté etiquetado, así que cree y rellene StructElement al renderizar:
			Dim sePart As New StructElement("Part")
			doc.StructTreeRoot.Children.Add(sePart)

			Dim tl As TextLayout = Nothing
			'  Añada 3 páginas con contenido de muestra etiquetado según las normas PDF/A:
			For pageNo As Integer = 1 To 3
				'  añadir página
				Dim page = doc.Pages.Add()
				Dim g = page.Graphics
				Dim y As Single = 72
				If doc.Pages.Count = 1 Then
					'  Crear elemento de párrafo:
					Dim seParagraph = New StructElement("P") With {.DefaultPage = page}
					'  Añádelo al elemento Parte:
					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 se realiza automáticamente en un nuevo TextLayout o después de un Clear():
					'tl.PerformLayout(true);

					'  Dibuja TextLayout dentro del contenido etiquetado:
					g.BeginMarkedContent(New TagMcid("P", 0))
					g.DrawTextLayout(tl, PointF.Empty)
					g.EndMarkedContent()

					y = tl.ContentRectangle.Bottom + gap

					seParagraph.ContentItems.Add(New McidContentItemLink(0))
				End If

				'  Añada algunos párrafos de muestra etiquetados según las normas PDF/A:
				For i As Integer = 1 To 3
					'  Crear elemento de párrafo:
					Dim seParagraph = New StructElement("P") With {.DefaultPage = page}
					'  Añádelo al elemento Parte:
					sePart.Children.Add(seParagraph)

					Dim sb = New StringBuilder()
					sb.Append(String.Format("Paragraph {0} on page {1}: ", i, pageNo))
					sb.Append(Common.Util.LoremIpsum(1, 2, 4, 5, 10))
					Dim para = sb.ToString()

					tl.Clear()
					tl.DefaultFormat.FontSize = 14
					tl.DefaultFormat.FontBold = False
					tl.MarginTop = y
					tl.Append(para)

					'  Dibuja TextLayout dentro del contenido etiquetado:
					g.BeginMarkedContent(New TagMcid("P", i))
					g.DrawTextLayout(tl, PointF.Empty)
					g.EndMarkedContent()

					y += tl.ContentHeight + gap

					'  Añadir elemento de contenido al párrafo StructElement:
					seParagraph.ContentItems.Add(New McidContentItemLink(i))

					'  PDF/A-3 permite incrustar archivos en el documento, pero deben estar asociados a algún elemento del documento
					'  añadir archivo incrustado asociado a seParagraph:
					Dim ef1 = EmbeddedFileStream.FromBytes(doc, Encoding.UTF8.GetBytes(para))
					'  ModificationDate y MimeType deben especificarse en el caso de PDF/A:
					ef1.ModificationDate = [date]
					ef1.MimeType = "text/plain"
					Dim fn = String.Format("Page{0}_Paragraph{1}.txt", pageNo, i)
					Dim fs1 = FileSpecification.FromEmbeddedStream(fn, ef1)
					'  UnicodeFile.FileName debe especificarse para el cumplimiento de PDF/A:
					fs1.UnicodeFile.FileName = fs1.File.FileName
					'  La relación debe especificarse en el caso de PDF/A:
					fs1.Relationship = AFRelationship.Unspecified
					doc.EmbeddedFiles.Add(fn, fs1)
					seParagraph.AssociatedFiles.Add(fs1)
				Next i
			Next pageNo

			'  PDF/A-3 permite dibujar transparencias en un archivo PDF:
			Dim gpage = doc.Pages (0).Graphics
			gpage.FillRectangle(New RectangleF(20, 20, 200, 200), Color.FromArgb(40, Color.Red))

			'  PDF/A-3 permite utilizar FormXObjects, añada uno con transparencia:
			Dim r = New RectangleF(0, 0, 144, 72)
			Dim fxo = New FormXObject(doc, r)
			Dim gfxo = fxo.Graphics
			gfxo.FillRectangle(r, Color.FromArgb(40, Color.Violet))
			Dim tf As New TextFormat() With {
				.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), Nothing, ImageAlign.ScaleImage)

			'  PDF/A-3 permite utilizar archivos incrustados, pero cada archivo incrustado debe estar asociado a un elemento del documento:
			Dim ef As EmbeddedFileStream = EmbeddedFileStream.FromFile(doc, Path.Combine("Resources", "WordDocs", "ProcurementLetter.docx"))
			'  ModificationDate y MimeType deben especificarse para EmbeddedFile en PDF/A:
			ef.ModificationDate = [date]
			ef.MimeType = "application/msword"
			Dim fs = FileSpecification.FromEmbeddedFile(ef)
			fs.UnicodeFile.FileName = fs.File.FileName
			fs.Relationship = AFRelationship.Unspecified
			doc.EmbeddedFiles.Add("ProcurementLetter.docx", fs)
			'  Asociar archivo incrustado con el documento:
			doc.AssociatedFiles.Add(fs)

			'  Añadir un archivo adjunto asociado a una anotación:
			Dim sa = New StampAnnotation() With {
				.UserName = "Minerva",
				.Font = fnt,
				.Rect = New RectangleF(300, 36, 220, 72)
			}
			sa.Flags = AnnotationFlags.Print
			'  Utilice un FormXObject para representar la anotación del sello:
			Dim stampFxo = New FormXObject(doc, New RectangleF(PointF.Empty, sa.Rect.Size))
			Dim gstampFxo = stampFxo.Graphics
			gstampFxo.FillRectangle(stampFxo.Bounds, Color.FromArgb(40, Color.Green))
			gstampFxo.DrawString("Stamp Annotation" & vbLf & "associated 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)

			'  Marcar el documento como conforme a las convenciones de Tagged PDF (necesario para PDF/A):
			doc.MarkInfo.Marked = True

			'  Metadata.CreatorTool y DocumentInfo.Creator deben ser los mismos para un documento PDF/A:
			doc.Metadata.CreatorTool = doc.DocumentInfo.Creator
			'  Debe especificarse un título para el documento PDF/A:
			doc.Metadata.Title = "GcPdf Document"
			doc.ViewerPreferences.DisplayDocTitle = True

			'  Hecho:
			doc.Save(stream)
		End Sub
	End Class
End Namespace
VB   C#

GrapeCityPDF no es una biblioteca avanzada para PDF: tiene un número limitado de funciones en comparación con IronPDF.

Modelos de licencia y precios de IronPDF

Garantía de devolución del dinero en 30 días: Una vez adquirida la licencia, recibirá una garantía de devolución del dinero de 30 días. Si la licencia no se adapta bien a sus necesidades, IronPDF le garantiza la devolución de su dinero en un plazo de 30 días.

Fácil integración: La integración de IronPDF junto con un proyecto de trabajo y su entorno es un proceso sin problemas completado utilizando una sola línea de código. Esto puede conseguirse al integrar utilizando el método de paquetes NuGet o descargándolo directamente en línea e integrándolo en su entorno.

Licencia perpetua: Cada licencia se adquiere una sola vez sin necesidad de renovación.

Soporte gratuito y actualizaciones del producto: Cada licencia vendrá con apoyo redondo de la casa directamente desde el equipo detrás del producto y también un año de actualizaciones gratuitas de productos. Es factible comprar extensiones en cualquier momento. Las extensiones pueden verse antes de la compra.

Licencias inmediatas: En cuanto se recibe el pago, se envían las claves de licencia registradas.

Todas las licencias son perpetuas y se aplican a la puesta en marcha, el desarrollo y la producción.

El paquete Lite

  • 1 Promotor
  • 1 Localización
  • 1 Proyecto
  • Licencia perpetua

    Este paquete permite a un único desarrollador de software de una organización utilizar Iron Software en una única ubicación. Iron Software puede utilizarse en una única aplicación de intranet, aplicación web o programa de software de escritorio. Está prohibido compartir licencias fuera de una organización o de una relación agencia/cliente, ya que son intransferibles. Este tipo de licencia, al igual que todos los demás tipos de licencia, excluye expresamente todos los derechos no concedidos expresamente en virtud del Acuerdo sin la redistribución OEM y la utilización del Software Iron como SaaS sin adquirir cobertura adicional.

    Precios: desde $749 al año.

Licencia profesional

  • 10 Promotores
  • 10 ubicaciones
  • 10 proyectos
  • Licencia perpetua

    Esta licencia permite a un número predeterminado de desarrolladores de software de una organización utilizar Iron Software en numerosas ubicaciones, con un máximo de diez. Iron Software puede utilizarse en tantos sitios web, aplicaciones de intranet o aplicaciones de software de escritorio como se desee. Las licencias son intransferibles, por lo que está prohibido compartirlas fuera de una organización o de una relación agencia/cliente. Este tipo de licencia, como todos los demás tipos de licencia, excluye expresamente todos los derechos no concedidos expresamente en virtud del Acuerdo, incluida la redistribución OEM y la utilización del Software Iron como SaaS sin adquirir cobertura adicional. Esta licencia puede integrarse en un solo proyecto hasta un máximo de 10.

    Precios: Desde 999 $ al año.

Licencia ilimitada

  • Desarrolladores ilimitados
  • Ubicaciones ilimitadas
  • Proyectos ilimitados
  • Licencia perpetua

    Esto le permite tener un número ilimitado de desarrolladores de software en una sola organización para utilizar Iron Software en un número ilimitado de ubicaciones. Iron Software puede utilizarse en tantas aplicaciones de intranet, aplicaciones de software de escritorio o sitios web como se desee. Las licencias son intransferibles y no pueden compartirse fuera de una organización o de una relación agencia/cliente. Este tipo de licencia, como todos los demás tipos de licencia, excluye expresamente todos los derechos no concedidos en virtud del Acuerdo, incluida la redistribución OEM y la utilización del Software Iron como SaaS sin adquirir cobertura adicional.

    Precios: Desde 2999 $ al año.

    Redistribución libre de regalías: Esto le permite distribuir el software Iron como parte de varios productos comerciales empaquetados de forma diferente. (sin tener que pagar derechos de autor) en función del número de proyectos cubiertos por la licencia base. Esto permitirá el despliegue de Iron Software dentro de los servicios de software SaaS, que se basa en el número de proyectos cubiertos por la licencia base.

    Precios: Desde 1599 $ al año.

    Instalación de GrapeCity PDF

Modelos de licencia y precios de GrapeCity PDF

Documentos para PDF

  • Incluye 1 licencia de desarrollador
  • 1 Lugar de distribución

    Este paquete incluye una licencia de desarrollador y una única ubicación de distribución sin soporte ni mantenimiento.

    Precios: Desde 999 $ al año.

Documentos para PDF Unlimited

  • Incluye 1 licencia de desarrollador
  • Ubicaciones de distribución ilimitadas

    Este paquete incluye una licencia de desarrollador con ubicaciones de distribución ilimitadas. No incluye asistencia ni mantenimiento. GrapeCity no es compatible con SaaS y OEM.

    Precios: a partir de 2799 $ al año.

Documentos para PDF Team Unlimited

  • Incluye 5 licencias de desarrollador
  • Ubicaciones de distribución ilimitadas

    Este paquete incluye cinco licencias de desarrollador con ubicaciones de distribución ilimitadas sin asistencia ni mantenimiento. GrapeCity no admite SaaS ni OEM.

    Precios: desde 5799 $ al año.

    Comparación de los paquetes PDF de GrapeCity

    El paquete IronPDF Lite One-Developer viene con 1 año de soporte y cuesta alrededor de $749. Mientras que GrapeCity Documents para PDF, incluye un paquete para un desarrollador y cuesta 999 dólares sin ningún tipo de soporte. El Paquete Profesional de IronPDF, que incluye el paquete para 10 desarrolladores y viene con un año de soporte, cuesta 999 dólares. Por otro lado, GrapeCity no dispone de un paquete de 10 desarrolladores, solo de un paquete de 5 desarrolladores que cuesta 5799 $.

Los paquetes IronPDF Lite y Professional disponen de servicio SaaS u OEM, así como de una opción de soporte de 5 años. El paquete Lite para un desarrollador ofrece cinco años de soporte, SaaS y servicios OEM por 2897 USD. Mientras que GrapeCity no tiene un servicio SaaS, OEM, o una opción de soporte de 5 años. El paquete para desarrolladores Iron Professional 10 incluye 5 años de soporte, Saas y servicios OEM y cuesta 3397 USD. Mientras que GrapeCity no tiene ningún paquete de 10 desarrolladores.

Conclusión

GrapeCity Documents for PDF permite a los desarrolladores exportar/importar, crear AcroForms (Formularios PDF)y ejecutar PDF en numerosas aplicaciones de escritorio. Con GrapeCity Documents para PDF(GcPdf)está en el buen camino para ofrecer soluciones PDF completas a sus clientes.

Recomendamos encarecidamente IronPDF, ya que el producto ofrece una mayor precisión. Los competidores que realizan funciones similares, pueden encontrar problemas de imprecisión, como fallos en la conversión de algunas imágenes que resultan en caracteres desconocidos. Por otro lado, IronPDF proporciona resultados precisos.

Los paquetes IronPDF ofrecen licencias y asistencia competitivas sin costes permanentes. IronPDF comienza en $749 con paquetes que incluyen una mayor gama de funciones. El PDF de GrapeCity cuesta a partir de 1649 $ al año. IronPDF también es compatible con varias plataformas a un precio único!

Si aún no es cliente de IronPDF, puede acceder a la versión de prueba gratuita para comprobar todas las funciones disponibles. Si compra la Iron Suite completa, podrá obtener los cinco productos por el precio de dos. Para más información sobre licencias Por favor, siga estos pasos enlace para consultar la información completa del paquete.

< ANTERIOR
Comparación entre IronPDF y XFINIUM.PDF
SIGUIENTE >
Comparación entre IronPDF y Textcontrol

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123