Esta página puede contener texto traducido automáticamente.
Creación de archivos PDF con la API principal
La API principal de Docotic.Pdf ofrece un control total sobre la creación de PDF. Permite dibujar texto, imágenes y gráficos vectoriales en lienzos proporcionados por páginas PDF, XObjects y patrones de mosaico.
Controlas cada coordenada y cada operación de dibujo, lo que te brinda un control máximo sobre el diseño de tus páginas PDF. Para documentos con gran cantidad de gráficos o diseños personalizados donde la precisión es fundamental, este nivel de control es indispensable.
Con la API principal, también puedes agregar anotaciones, campos de formulario, capas, marcadores y más a los PDF creados. La API es la forma más flexible y potente de crear PDF en .NET que ofrece Docotic.Pdf.

Consulte el artículo que describe todos los métodos para crear archivos PDF si desea una visión general más amplia de todos los enfoques disponibles en Docotic.Pdf, incluidos aquellos que van más allá de la API principal.
Antes de comenzar
Antes de empezar a trabajar con la API principal, configure su entorno instalando Docotic.Pdf y solicitando una clave de licencia.
Instalar Docotic.Pdf
Para crear documentos PDF en C# o VB.NET, comience por instalar la biblioteca desde NuGet.
Install-Package BitMiracle.Docotic.Pdf
Si prefiere instalar la biblioteca manualmente, descargue el archivo ZIP con los binarios de la
biblioteca, descomprímalo y agregue una referencia desde su proyecto al archivo
BitMiracle.Docotic.Pdf.dll.
Obtén una clave de licencia
Se requiere una clave de licencia para usar la biblioteca. Para probarla, solicite una clave de licencia gratuita por tiempo limitado completando el formulario en la página de descarga de Docotic.Pdf.
Ejemplos básicos de creación de PDF
Esta sección proporciona ejemplos básicos que demuestran cómo crear documentos PDF con la API principal, primero en C# y luego en VB.NET.
Cómo crear un PDF en C#
Ahora que ha instalado Docotic.Pdf y obtenido una clave de licencia, es fácil crear un PDF con la API principal.
BitMiracle.Docotic.LicenseManager.AddLicenseData("PUT-LICENSE-HERE");
using var pdf = new PdfDocument();
pdf.Save("empty.pdf");
El código muestra cómo crear un archivo PDF vacío. La primera línea añade una clave de licencia.
Sin licencia, se producirá una excepción en la línea que instancia un PdfDocument. La última
línea guarda el documento como un archivo PDF.
La estructura interna del archivo creado depende de las opciones de guardado. En este ejemplo, el
código utiliza la sobrecarga del método Save, que guarda con las opciones predeterminadas. Para
comprender qué hacen estas opciones predeterminadas y cuándo conviene ajustarlas, consulte la
sección sobre opciones de guardado.
Para respetar la tradición de la programación, el segundo ejemplo muestra un programa "Hola, mundo" creado con la API Core.
using var pdf = new PdfDocument();
var page = pdf.Pages[0];
page.Canvas.DrawString(50, 50, "Hello, world!");
pdf.Save("hello.pdf");
El código coloca la frase clásica en el lienzo de la primera página del documento, comenzando en la posición especificada. La línea utiliza la fuente y el tamaño de fuente predeterminados. Continúe leyendo para obtener más información sobre cómo trabajar con el lienzo PDF.
Uso de VB.NET para crear archivos PDF
El código VB.NET para crear un PDF es muy similar al código de la sección anterior.
Using pdf As New PdfDocument()
Dim page = pdf.Pages(0)
page.Canvas.DrawString(50, 50, "Hello, world!")
pdf.Save("hello.pdf")
End Using
La sección anterior, que incluye un ejemplo en C#, explica qué hace el código y cómo funciona.
Trabajar con lienzo PDF
Para modificar el lienzo en un documento PDF, utilice la API Canvas. Esta API forma parte de la API Core.
La API Canvas utiliza un modelo de posicionamiento absoluto. Usted define las coordenadas y el lienzo se dibuja exactamente donde usted lo indique. El sistema de coordenadas sitúa el origen en la esquina superior izquierda de la página. Las coordenadas aumentan hacia la derecha en el eje X y hacia abajo en el eje Y.
(0,0) ──► X
│
│
▼
Y
Texto de dibujo
En la clase PdfCanvas, Docotic.Pdf proporciona dos métodos principales para renderizar texto:
DrawString y DrawText. Ambos métodos utilizan la fuente del lienzo actual, por lo que se
recomienda configurar la fuente necesaria antes de dibujar cualquier texto.
Usando DrawString
DrawString siempre dibuja una sola línea de texto. El método comienza a dibujar desde la posición actual del texto en el lienzo, a menos que se utilice una sobrecarga con coordenadas explícitas. Algunas sobrecargas permiten especificar opciones adicionales que controlan cómo se dibuja la línea de texto.
Ya viste un ejemplo sencillo de DrawString en el fragmento de código «¡Hola, mundo!». Aquí tienes
otro ejemplo que utiliza opciones de dibujo de
cadenas para subrayar texto.
using var pdf = new PdfDocument();
var canvas = pdf.Pages[0].Canvas;
canvas.DrawString(50, 50, "This text is underlined", new PdfStringDrawingOptions
{
Underline = true,
});
pdf.Save("underlined-text.pdf");
Usando DrawText
La función DrawText permite dibujar varias líneas de texto dentro de un rectángulo específico. Este método gestiona los saltos de línea y recorta el texto que no cabe en el espacio permitido. Las opciones de dibujo de texto definen la alineación horizontal y vertical del texto, así como otros aspectos de su posicionamiento y representación.
A continuación, se muestra cómo dibujar texto en un PDF usando C#:
using var pdf = new PdfDocument();
const string LongString = "Lorem ipsum dolor sit amet, consectetur adipisicing elit";
var multiLineOptions = new PdfTextDrawingOptions(new PdfRectangle(70, 70, 40, 150))
{
HorizontalAlignment = PdfTextAlign.Left,
VerticalAlignment = PdfVerticalAlign.Top
};
var canvas = pdf.Pages[0].Canvas;
canvas.DrawText(LongString, multiLineOptions);
pdf.Save("drawtext.pdf");
Para ajustar con precisión la apariencia del texto, puede modificar las siguientes propiedades del lienzo:
- Espaciado entre caracteres
- Espaciado entre palabras
- Escalado del texto
- Elevación del texto (desplazamiento de la línea base)
- Modo de representación (relleno, contorno, relleno y contorno, entre otros)
Para ver ejemplos prácticos de métodos y propiedades relacionados con el texto, consulte el Grupo de ejemplos de texto.
Agregar y usar fuentes
A menos que te conformes con la fuente Helvetica predeterminada, deberías añadir las fuentes que necesites al PDF para asegurarte de que el texto se muestre exactamente como deseas.
Docotic.Pdf puede añadir fuentes Type1, TrueType, Compact Font Format (CFF) y OpenType desde:
- la colección de fuentes instaladas en el sistema
- archivos y flujos externos
Además, puedes usar las 14 fuentes Type1 integradas, disponibles en cualquier visor de PDF.
Para usar una fuente en tu PDF, crea un objeto PdfFont usando el método CreateFont o
CreateFontFromFile del objeto PdfDocument correspondiente. Luego, asigna la fuente al lienzo
antes de dibujar el texto. También es recomendable configurar el tamaño de la fuente.
using var pdf = new PdfDocument();
var canvas = pdf.Pages[0].Canvas;
var font = pdf.CreateFont("NSimSun");
canvas.Font = font;
canvas.FontSize = 14;
canvas.DrawString(10, 50, "Olá. 你好. Hello, Unicode!");
font.RemoveUnusedGlyphs();
pdf.Save("unicode-text.pdf");
La fuente debe contener glifos para todos los caracteres del texto que intenta dibujar. De lo
contrario, recibirá una excepción CannotShowTextException. Utilice
PdfFont.ContainsGlyphsForText para verificar que la fuente contiene todos los glifos necesarios.
La compatibilidad con Unicode depende del tipo de fuente. Las fuentes de tipo 1 solo admiten el conjunto de caracteres y la codificación latinos, con una excepción. Las fuentes integradas Symbol y ZapfDingbats proporcionan símbolos matemáticos, griegos y decorativos.
Las fuentes TrueType, CFF y OpenType suelen ser compatibles con Unicode, pero es posible que no incluyan glifos para todos los caracteres Unicode.
Docotic.Pdf intenta incrustar la menor cantidad posible de bytes de fuente para mantener el PDF
resultante pequeño. Sin embargo, cuando un documento utiliza fuentes con muchos glifos, el archivo
resultante puede ser relativamente grande. Utilice PdfFont.RemoveUnusedGlyphs para minimizar la
cantidad de bytes añadidos por las fuentes incrustadas.
Cálculo de las dimensiones del texto
Dado que la API de Canvas utiliza posicionamiento absoluto, a menudo es necesario saber cuánto
espacio ocupará un texto antes de dibujarlo. Esto es especialmente importante al generar texto en
varias partes, como al dividir cadenas largas, alinear texto con precisión o evitar superposiciones
con otro contenido. La clase PdfCanvas proporciona varios métodos que ayudan a medir el texto
utilizando la fuente y el tamaño de fuente seleccionados.
Utilice PdfCanvas.MeasureText para obtener tanto el ancho como la altura de una cadena tal como
aparecería en el lienzo. Algunos casos de uso típicos incluyen:
- determinar si el texto cabe en un área determinada
- calcular saltos de línea manualmente
- posicionar bloques de texto entre sí
Para los casos en los que se centra o alinea texto a la derecha y solo se necesita la extensión
horizontal, utilice PdfCanvas.GetTextWidth. Para conocer la altura de una línea de texto con la
fuente actual, utilice PdfCanvas.GetTextHeight.
Dibujos de imágenes
Para dibujar una imagen en un lienzo PDF, primero crea un objeto PdfImage y luego dibuja ese
objeto usando el método PdfCanvas.DrawImage.
A continuación, se muestra cómo agregar una imagen a un PDF en C#:
using var pdf = new PdfDocument();
var canvas = pdf.Pages[0].Canvas;
var image = pdf.CreateImage("image.png");
canvas.DrawImage(image, 10, 50);
pdf.Save("image.pdf");
El código crea un objeto de imagen mediante el método CreateImage del objeto PdfDocument
correspondiente y dibuja la imagen en el lienzo de la primera página.
Para obtener más información sobre los formatos de imagen compatibles y las técnicas avanzadas de conversión de imágenes a PDF, consulte la sección sobre cómo crear archivos PDF a partir de imágenes.
Utilizando gráficos vectoriales
Docotic.Pdf permite dibujar líneas rectas, curvas de Bézier y formas geométricas comunes
directamente sobre un lienzo PDF mediante los métodos de la clase PdfCanvas. Utilice los métodos
que comienzan con Draw (por ejemplo, DrawLineTo, DrawCircle, DrawRectangle) para colocar
marcas visibles en el lienzo.
Las líneas y curvas se dibujan con el lápiz actual, definido
mediante PdfCanvas.Pen, que especifica el color, el grosor y otras propiedades del trazo. Según
el modo de dibujo, las formas pueden tener trazo, relleno o trazo y relleno. El pincel
actual, al que se accede mediante PdfCanvas.Brush, se utiliza
para rellenar el interior de las formas.
using var pdf = new PdfDocument();
var canvas = pdf.Pages[0].Canvas;
canvas.DrawCircle(new PdfPoint(60, 100), 40);
canvas.DrawRectangle(
new PdfRectangle(300, 60, 110, 70),
PdfDrawMode.Fill);
canvas.CurrentPosition = new PdfPoint(150, 90);
canvas.DrawCurveTo(new PdfPoint(180, 60), new PdfPoint(230, 120), new PdfPoint(250, 90));
pdf.Save("curve-and-shapes.pdf");
Cada lienzo PDF mantiene un estado gráfico que incluye el lápiz, el pincel, la fuente y las
posiciones actuales. Utilice SaveState para conservar el estado actual y RestoreState para
restaurar un estado anterior. Además de revertir transformaciones temporales y cambios similares,
restaurar el estado es la única forma de eliminar el recorte una vez aplicado.
Las rutas gráficas permiten crear formas complejas a partir de líneas, curvas y formas más simples
sin dibujarlas inmediatamente. Utilice métodos de Append como AppendLineTo o AppendRectangle
para añadir segmentos a la ruta actual. Las rutas no generan resultados visibles hasta que se
rellenan o se trazan explícitamente.
Puede utilizar cualquier ruta gráfica creada como región de recorte para restringir las operaciones de dibujo posteriores. El recorte permanece activo hasta que se restaura el estado gráfico.
Encontrará ejemplos prácticos y ejecutables de cómo trabajar con gráficos vectoriales en la sección Gráficos del repositorio de ejemplos.
Configuración de colores y transparencia
Puedes cambiar los colores del trazo y del relleno mediante el lápiz y el pincel de un lienzo PDF.
Para ello, utiliza PdfPen.Color y PdfBrush.Color.

Los espacios de color compatibles, que dependen del dispositivo, incluyen Gray, RGB y CMYK,
representados por PdfGrayColor, PdfRgbColor y PdfCmykColor.
using var pdf = new PdfDocument();
var canvas = pdf.Pages[0].Canvas;
canvas.Pen.Color = new PdfRgbColor(30, 60, 160);
canvas.Pen.Width = 3;
canvas.Brush.Color = new PdfCmykColor(0, 20, 5, 0);
canvas.DrawRectangle(
new PdfRectangle(50, 50, 100, 40),
PdfDrawMode.FillAndStroke);
pdf.Save("fill-and-stroke-colors.pdf");
Docotic.Pdf admite espacios de color CIE independientes del dispositivo, incluyendo colores L*a*b* y colores calibrados basados en ICC. La API principal también admite colores directos y espacios de color de separación para flujos de trabajo que requieren tintas personalizadas o salida específica para cada canal.
El código de ejemplo a continuación muestra cómo crear colores Lab, colores basados en perfiles y colores directos. Para ejecutar el ejemplo, primero descargue el perfil ICC que utiliza.
using var pdf = new PdfDocument();
var canvas = pdf.Pages[0].Canvas;
var labColorSpace = new PdfLabColorSpace(pdf, [0.5, 1, 0.5]);
canvas.Pen.Color = new PdfLabColor(labColorSpace, 50, -50, 50);
canvas.Pen.Width = 3;
var rgbProfile = pdf.CreateColorProfile("AdobeCompat-v2.icc");
canvas.Brush.Color = new PdfRgbColor(rgbProfile, 210, 105, 30);
canvas.DrawRectangle(
new PdfRectangle(50, 50, 100, 40),
PdfDrawMode.FillAndStroke);
var tintTransform = new PdfExponentialFunction(
pdf, 1, [0d, 0, 0, 0], [0, 0.8, 0.73, 0.25], [0d, 1]);
var separationColorSpace = new PdfSeparationColorSpace(
pdf, "BLOODRED", new PdfCmykColorSpace(), tintTransform);
canvas.Pen.Color = new PdfSpotColor(1.0, separationColorSpace);
canvas.DrawCircle(new PdfPoint(100, 70), 60);
pdf.Save("using-special-colors.pdf");
También puedes trazar y rellenar formas usando patrones de mosaico. Un patrón se define mediante una celda dibujada en su propio lienzo. Existen dos tipos:
- Patrones de color. Sus celdas definen sus propios colores.
- Patrones sin color. Sus celdas se tiñen con el color del lápiz o pincel en el momento de su uso.
Para usar un patrón, créalo usando CreateColoredPattern o CreateUncoloredPattern del objeto
PdfDocument correspondiente. Luego, aplica el patrón mediante PdfPen.Pattern y/o
PdfBrush.Pattern. Consulta el código de ejemplo para crear y usar patrones en el
repositorio de ejemplos.
Los colores semitransparentes te permiten dibujar formas, texto e imágenes con opacidad variable.
Usa PdfPen.Opacity y PdfBrush.Opacity para producir colores translúcidos.
Además, los modos de fusión controlan cómo interactúa el
contenido transparente con lo que se encuentra debajo. Para cambiar el modo de fusión de un lienzo,
utilice PdfCanvas.BlendMode.
Agregar y personalizar páginas
Docotic.Pdf expone la colección PdfDocument.Pages, que permite gestionar todas las páginas de un
documento. La clase PdfDocument cuenta con dos métodos principales para añadir páginas: AddPage
e InsertPage.
Utilice AddPage() para añadir una página al final del documento. Para insertar una página en
cualquier posición, utilice InsertPage(index). Ambos métodos devuelven la instancia de PdfPage
recién creada.
Cada página nueva tiene un tamaño predeterminado de 595 x 842 unidades de espacio de usuario. Este es el tamaño de una hoja A4. En la mayoría de los casos, la unidad de espacio de usuario en PDF equivale a 1/72 de pulgada. Dicho de otro modo, una unidad de espacio de usuario equivale a un píxel cuando la resolución de la página es de 72 píxeles por pulgada.
Puede cambiar el tamaño de una página en cualquier momento estableciendo su ancho y/o alto en un número específico de unidades de espacio de usuario.
using var pdf = new PdfDocument();
var page = pdf.Pages[0];
page.Width = 600;
page.Height = 800;
Otra opción es utilizar uno de los tamaños predefinidos:
page.Size = PdfPaperSize.Ledger;
También es posible cambiar la orientación de la página de vertical a horizontal, y girarla 90°, 180° o 270° en el sentido de las agujas del reloj.
page.Orientation = PdfPaperOrientation.Landscape;
page.Rotation = PdfRotation.Rotate180;
Además de establecer el ancho, la altura o un tamaño predefinido de la página, también es posible ajustar el tamaño de la página junto con recortar o redimensionar el contenido existente.
Reutilización de contenido con XObjects
Un XObject PDF es un contenedor con gráficos vectoriales, imágenes y texto. Cada XObject tiene su propio lienzo, lo que permite crear XObjects tan complejos como páginas PDF convencionales.
Los XObjects son similares a las imágenes vectoriales. Se puede reutilizar el mismo objeto en varias páginas sin necesidad de recrear el contenido ni aumentar el tamaño del documento. Además, se pueden escalar y rotar sin generar distorsiones visuales. Gracias a estas características, los XObjects son ideales para elementos repetidos como logotipos, ilustraciones, fondos, marcas de agua y otros gráficos recurrentes.
Creación y uso de XObjects
Para crear un XObject, utilice el método PdfDocument.CreateXObject. Modifique el ancho y la
altura del objeto, si es necesario. A continuación, rellene el lienzo con texto, imágenes y
gráficos del mismo modo que en un lienzo de página normal.
Utilice el método PdfCanvas.DrawXObject en su código C# o VB.NET para añadir el XObject a otros
lienzos. Tenga en cuenta que puede dibujar XObjects en lienzos proporcionados tanto por páginas
como por otros XObjects.
A continuación, se muestra un código C# que crea un XObject con una ilustración y la dibuja en dos páginas.
using var pdf = new PdfDocument();
var xobj = pdf.CreateXObject();
var options = new PdfTextDrawingOptions(new PdfRectangle(0, 0, 100, 50))
{
HorizontalAlignment = PdfTextAlign.Center,
VerticalAlignment = PdfVerticalAlign.Center,
};
xobj.Canvas.FontSize = 16;
xobj.Canvas.DrawText("Company Logo", options);
xobj.Canvas.DrawRectangle(options.Bounds);
var page1 = pdf.Pages[0];
page1.Canvas.DrawXObject(xobj, 100, 100);
var page2 = pdf.AddPage();
page2.Canvas.DrawXObject(xobj, 200, 200);
pdf.Save("using-xobjects.pdf");
Transformación de páginas con XObjects
Los XObjects también permiten escenarios que van más allá de la simple reutilización de gráficos. Un ejemplo común es combinar dos páginas PDF existentes en una sola página más grande. Al convertir cada página de origen en un XObject, puede dibujarlas una al lado de la otra en un nuevo lienzo, creando así una combinación de dos páginas. Este método le brinda control total sobre el posicionamiento, el espaciado y la escala, lo que facilita la creación de diseños comparativos, pliegos de libro o vistas previas de varias páginas.
La misma técnica se puede aplicar cuando necesite cambiar el tamaño de páginas PDF. En lugar de redibujar o reconstruir el contenido, puede crear un XObject a partir de la página original y dibujarlo escalado al nuevo tamaño. Esto le permite reducir páginas demasiado grandes, ampliar páginas pequeñas o normalizar un documento de tamaños mixtos con un mínimo esfuerzo.
Alcance y limitaciones de la API principal
La API Core ofrece un control preciso y de bajo nivel sobre la creación de PDF, pero no proporciona funciones de diseño automático. No incluye márgenes, encabezados, pies de página ni lógica de salto de página, y todo el contenido debe posicionarse manualmente. La medición del texto y su división entre páginas son responsabilidad exclusiva del código, lo que convierte a esta en la forma más manual de crear PDF.
El diseño automático, que incluye compatibilidad con tablas, párrafos y saltos de página, está disponible a través de la API de diseño de nivel superior.
Conclusión
La API principal de Docotic.Pdf ofrece un control total sobre la creación de PDF. Permite dibujar texto, imágenes y gráficos vectoriales en lienzos proporcionados por páginas PDF, XObjects y patrones de mosaico.
La API está diseñada para escenarios que requieren un control preciso y de bajo nivel: se posiciona cada elemento explícitamente, se gestiona la medición del texto y la división de páginas, y se manipulan directamente el estado, los colores y la transparencia de los gráficos.
En resumen, la API principal es la herramienta más flexible para crear PDF cuando la precisión y el control son prioritarios.