usebeq.wrappers.itext7 1.0.25

dotnet add package usebeq.wrappers.itext7 --version 1.0.25
NuGet\Install-Package usebeq.wrappers.itext7 -Version 1.0.25
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="usebeq.wrappers.itext7" Version="1.0.25" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add usebeq.wrappers.itext7 --version 1.0.25
#r "nuget: usebeq.wrappers.itext7, 1.0.25"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install usebeq.wrappers.itext7 as a Cake Addin
#addin nuget:?package=usebeq.wrappers.itext7&version=1.0.25

// Install usebeq.wrappers.itext7 as a Cake Tool
#tool nuget:?package=usebeq.wrappers.itext7&version=1.0.25

Bienvenido a la librería PdfWrapper

PdfWrapper es una librería que permite la creación de documentos PDF de manera sencilla y eficiente haciendo uso de la librería itext7. Con esta librería, es posible insertar texto, imágenes y tablas en un documento PDF, así como también personalizar su diseño y formato.

Interfaz IPdfWrapper

La interfaz IPdfWrapper es la clase principal de la librería y es la encargada de proporcionar las funcionalidades para la creación de documentos PDF. Esta interfaz está compuesta por los siguientes métodos:

SetPdfData(PdfData pdfData)

Este método permite establecer la información básica del documento PDF, como la plantilla pdf con la que deseamos trabajar.

PdfData pdfData = new PdfData {
  DownloadName = "MiDocumento.pdf",
  Layout = layout // MemoryStream con la plantilla pdf para nuestro nuevo PDF
};

using(IPdfWrapper pdfWrapper = new PdfWrapper()) {
  pdfWrapper.SetPdfData(pdfData);
  // ... Insertar texto, imágenes y tablas ...
  MemoryStream stream = pdfWrapper.Download();
}

En este ejemplo, se crea una instancia de la clase PdfData y se asigna un nombre de descarga al archivo PDF y se establece el Layout en layout (archivo MemoryStream). Luego, se crea una instancia de la interfaz IPdfWrapper y se llama al método SetPdfData para establecer los datos del PDF. Finalmente, se llama al método Download para obtener el archivo PDF en un MemoryStream.

Usa el método AdapTemplate de la clase TemplateAdapter para convertir un documento PDF en un objeto MemoryStream que puedas usar como template para el método SetPdfData de la interfaz principal IPdfWrapper

// Primero, definimos la ruta al archivo PDF que queremos utilizar como plantilla
string path = @"C:\path\to\template.pdf";

// Luego, definimos un diccionario que indique la cantidad de veces que queremos copiar cada página del archivo
IDictionary<int, int> iterations = new Dictionary<int, int> {
  { 1, 3 }, // Copiar la página 1 tres veces
  { 2, 2 } // Copiar la página 2 dos veces
};

// Finalmente, llamamos al método AdapTemplate y recibimos un MemoryStream con el resultado
MemoryStream layout = TemplateAdapter.AdapTemplate(path, iterations);

InsertText(List<PageData> pagesData)

Este método permite insertar texto en las páginas del documento PDF. Es posible insertar texto en una o varias páginas, y es posible personalizar el formato de cada una de ellas.

using (var pdfWrapper = new PdfWrapper()) {
	// Creamos una lista de páginas con texto a insertar
	var pagesData = new List<PageData> {
		new PageData {
			Number = 1,
			Data = new List<dynamic> {
				new SingleData {
					Text = "Texto de prueba 1",
					Coor = new Coor { X = 100, Y = 100 }
				},
				new SingleRowData {
					Data = new {
						String = "string",
						Int = 10,
						Double = 12.12d,
						Float = 12.12f,
						Decimal = 12.12m,
						Bool = true,
						Char = _char,
						Byte = _byte,
						SByte = _sbyte,
						Short = _short,
						UShort = _ushort,
						Uint = _uint,
						Long = _long,
						Ulong = _ulong
					},
					Coors = new List<Coor> {
						new Coor { Name = "String", X = 100, Y = 100 },
						new Coor { Name = "Int", X = 100, Y = 120 },
						new Coor { Name = "Double", X = 100, Y = 140 },
						new Coor { Name = "Float", X = 100, Y = 160 },
						new Coor { Name = "Decimal", X = 100, Y = 180 },
						new Coor { Name = "Bool", X = 100, Y = 200 },
						new Coor { Name = "Char", X = 100, Y = 220 },
						new Coor { Name = "Byte", X = 100, Y = 240 },
						new Coor { Name = "SByte", X = 100, Y = 260 },
						new Coor { Name = "Short", X = 100, Y = 280 },
						new Coor { Name = "UShort", X = 100, Y = 300 },
						new Coor { Name = "Uint", X = 100, Y = 320 },
						new Coor { Name = "Long", X = 100, Y = 340 },
						new Coor { Name = "Ulong", X = 100, Y = 360 }
					}
				},
				new TableData {
					Data = new List<dynamic> {
						new { Nombre = "Verónica", Edad = 12, Registro = DateTime.Now },
						new { Nombre = "Luis", Edad = 11, Registro = DateTime.Now },
						new { Nombre = "Rodrigo", Edad = 12, Registro = DateTime.Now },
						new { Nombre = "Vanesa", Edad = 10, Registro = DateTime.Now }
					},
					Coors = new List<Coor> {
						new Coor { Name = "Nombre", X = 150, Y = 150 },
						new Coor { Name = "Edad", X = 200, Y = 150 },
						new Coor { Name = "Registro", X = 250, Y = 150 }
					},
					StepInY = 20
				}
			}
		}
	};

	// Insertamos el texto en el PDF
	pdfWrapper.InsertText(pagesData);

	// Descargamos el PDF resultante
	var pdfStream = pdfWrapper.Download();
}

InsertTable(TableConfig config)

Este método permite insertar tablas en el documento PDF. Es posible personalizar el formato de las tablas, tales como el ancho de las columnas, el color y tamaño de la fuente, entre otros.

A continuación se muestra un ejemplo detallado para proporcionar la configuración de la tabla a insertar.

La configuración de diseño de la clase CellConfig es opcional puesto que se herada la configuración de la clase TableConfig.

using (IPdfWrapper pdfWrapper = new PdfWrapper()) {
	pdfWrapper.SetPdfData(new PdfData {
		Layout = stream
	});

	TableConfig config = new TableConfig {
		UseAllAvailableWidth = true,
		PreserveMarginTopOnSplit = false,
		ColumnsWidth = new float[] { 100, 100, 100 },
		PageNumber = 1,
		Position = new float[] { 50, 50 },
		Rows = new List<List<CellConfig>> {
			new List<CellConfig> {
				new CellConfig {
					Text = "Celda 1, 1",
					Rowspan = 1,
					Colspan = 1,
					FontName = "Times-Roman",
					FontSize = 12,
					FontColor = new RGB { R = 0, G = 0, B = 0 },
					Align = TextAlign.LEFT,
					Valign = VerticalAlign.MIDDLE
				},
				new CellConfig {
					Text = "Celda 1, 2",
					Rowspan = 1,
					Colspan = 1,
					FontName = "Times-Roman",
					FontSize = 12,
					FontColor = new RGB { R = 0, G = 0, B = 0 },
					Align = TextAlign.LEFT,
					Valign = VerticalAlign.MIDDLE
				},
				new CellConfig {
					Text = "Celda 1, 3",
					Rowspan = 1,
					Colspan = 1,
					FontName = "Times-Roman",
					FontSize = 12,
					FontColor = new RGB { R = 0, G = 0, B = 0 },
					Align = TextAlign.LEFT,
					Valign = VerticalAlign.MIDDLE
				}
			},
			new List<CellConfig> {
				new CellConfig {
					Text = "Celda 2, 1",
					Rowspan = 1,
					Colspan = 1,
					FontName = "Times-Roman",
					FontSize = 12,
					FontColor = new RGB { R = 0, G = 0, B = 0 },
					Align = TextAlign.LEFT,
					Valign = VerticalAlign.MIDDLE
				},
				new CellConfig {
					Text = "Celda 2, 2",
					Rowspan = 1,
					Colspan = 1,
					FontName = "Times-Roman",
					FontSize = 12,
					FontColor = new RGB { R = 0, G = 0, B = 0 },
					Align = TextAlign.LEFT,
					Valign = VerticalAlign.MIDDLE
				},
				new CellConfig {
					Text = "Celda 2, 3",
					Rowspan = 1,
					Colspan = 1,
					FontName = "Times-Roman",
					FontSize = 12,
					FontColor = new RGB { R = 0, G = 0, B = 0 },
					Align = TextAlign.LEFT,
					Valign = VerticalAlign.MIDDLE
				}
			}
		},
		FontName = "Times-Roman",
		FontSize = 12,
		FontColor = new RGB { R = 0, G = 0, B = 0 },
		Align = TextAlign.LEFT,
		Valign = VerticalAlign.MIDDLE
	};

	pdfWrapper.InsertTable(config);
	var result = pdfWrapper.Download();
}

InsertTable(SimpleTableConfig config)

Este método permite insertar tablas en el documento PDF. Es posible personalizar el formato de las tablas, tales como el ancho de las columnas, el color y tamaño de la fuente, entre otros.

Esta sobrecarga ofrece la ventaja de poder pasar como argumento de la propiedad Rows una colección de datos tal cual se obtiene de algún medio de persistencia.

La personalización de la tabla es opcional para ambas sobrecargas del método InsertTable. Aquí se muestra la personalización para hacer del conocimiento del usuario del paquete.

A continuación se muestra un ejemplo detallado para proporcionar la configuración de la tabla a insertar.

var rows = new List<dynamic> {
	new { Nombre = "Diego", Edad = 21, Registro = DateTime.Now, IsActive = true },
	new { Nombre = "Armando", Edad = 21, Registro = DateTime.Now, IsActive = false },
	new { Nombre = "Luis", Edad = 21, Registro = DateTime.Now, IsActive = true },
	new { Nombre = "Antonio", Edad = 21, Registro = DateTime.Now, IsActive = false }
};

o
var rows = appContext.Alumnos
	.Where(x => !x.IsDeleted)
	.ToList();

using (IPdfWrapper pdfWrapper = new PdfWrapper()) {
	pdfWrapper.SetPdfData(new PdfData {
		Layout = stream
	});

	TableConfig config = new TableConfig {
		UseAllAvailableWidth = true,
		PreserveMarginTopOnSplit = false,
		ColumnsWidth = new float[] { 100, 100, 100 },
		PageNumber = 1,
		Position = new float[] { 50, 50 },
		Rows = rows,
		FontName = "Times-Roman",
		FontSize = 12,
		FontColor = new RGB { R = 0, G = 0, B = 0 },
		Align = TextAlign.LEFT,
		Valign = VerticalAlign.MIDDLE
	};

	pdfWrapper.InsertTable(config);
	var result = pdfWrapper.Download();
}

AddImage(ImageOptions options, string path) y AddImage(ImageOptions options, MemoryStream stream)

Estos métodos permiten insertar imágenes en el documento PDF. Es posible insertar imágenes a partir de una ruta en el sistema de archivos o a partir de un stream de memoria.

Ejemplo de uso;

using (IPdfWrapper pdfWrapper = new PdfWrapper()) {
	pdfWrapper.SetPdfData(new PdfData {
		Layout = layout,
	});

	// Insertar una imagen proporcionado una ruta de acceso
	string path = Path.Combine(_webHostEnvironment.WebRootPath, "demo.jpg");
	pdfWrapper.AddImage(new ImageOptions(), path);

	// Insertar una imagen proporcionando un stream de memoria
	byte[] imageBytes = System.IO.File.ReadAllBytes(path);
	MemoryStream memoryStream = new MemoryStream(imageBytes);
	memoryStream.Position = 0;
	pdfWrapper.AddImage(new ImageOptions { Botton = 500 }, memoryStream);

	var result = pdfWrapper.Download();
}

Download()

Este método permite descargar el documento PDF en un stream de memoria.

Estructura de clases

PdfWrapper - La clase PdfWrapper es la clase concreta que implementa la interfaz IPdfWrapper. Esta clase es la encargada de realizar las tareas necesarias para crear y descargar el documento PDF.

PdfData - La clase PdfData es una clase de datos que permite establecer la información básica del documento PDF, tales como el nombre de descarga y el template para generar el nuevo documento.

Clase PageData - La clase PageData es una clase de datos que permite insertar texto en una página específica del documento PDF.

SingleData, SingleRowData y TableData - Estas son clases de datos que permiten insertar texto en el documento PDF. SingleData permite insertar un solo párrafo de texto, SingleRowData permite insertar varios párrafos en una sola fila y TableData permite insertar una tabla en el documento PDF.

ImageOptions - La clase ImageOptions permite especificar las opciones para agregar una imagen al PDF. Esta clase incluye los siguientes atributos:

TableConfig - La clase TableConfig es una clase que se utiliza para describir una tabla en un documento PDF. Contiene diferentes propiedades que determinan el aspecto y la posición de la tabla en el documento, así como la información sobre los datos que se van a incluir en la tabla.

Las propiedades incluyen:

Propiedad Descripción
UseAllAvailableWidth Una bandera que indica si la tabla debe ocupar todo el ancho disponible en la página.
PreserveMarginTopOnSplit Una bandera que indica si se debe preservar el margen superior al dividir una tabla en varias páginas.
ColumnsWidth Un arreglo de flotantes que representa el ancho de cada columna de la tabla.
PageNumber Un entero que indica el número de página en la que se agregará la tabla.
Position Un arreglo de flotantes que representa la posición de la tabla en la página en coordenadas X e Y.
Rows Una lista de listas de objetos CellConfig que describen cada celda de la tabla.
FontName Una cadena que indica el nombre de la fuente que se usará para dibujar el texto de la tabla.
FontSize Un flotante que indica el tamaño de la fuente que se usará para dibujar el texto de la tabla.
FontColor Un objeto RGB que indica el color de la fuente que se usará para dibujar el texto de la tabla.
Align Una enumeración que indica la alineación horizontal de la tabla.
Valign Una enumeración que indica la alineación vertical de la tabla.
Border Un objeto Border que describe el borde de la tabla.

CellConfig - La clase CellConfig se utiliza para describir cada celda individual de la tabla y contiene propiedades como el texto a incluir en la celda, el número de filas y columnas que abarca la celda, la fuente, el tamaño de la fuente, el color de la fuente, la alineación horizontal y vertical, entre otras.

Contribuciones

Las contribuciones son bienvenidas. Por favor, envía una solicitud de extracción con tus cambios.

Licencia

Este proyecto está licenciado bajo la licencia MIT.

EL SOFTWARE SE PROPORCIONA TAL CUAL, SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUIDAS, ENTRE OTRAS, LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN, DAÑOS U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O DE OTRO TIPO, QUE SURJA DE, FUERA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTROS TRATOS EN EL SOFTWARE.

Licencias de terceros

Este proyecto utiliza los siguientes paquetes de terceros:

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.25 136 11/23/2023
1.0.24 75 11/13/2023
1.0.23 73 11/10/2023
1.0.22 69 11/10/2023
1.0.21 64 11/10/2023
1.0.20 60 11/10/2023
1.0.19 68 11/9/2023
1.0.18 69 11/8/2023
1.0.17 120 8/15/2023
1.0.15 104 7/12/2023
1.0.14 92 6/22/2023
1.0.12 104 4/21/2023
1.0.9 93 4/20/2023
1.0.8 96 4/20/2023