usebeq.wrappers.core.itext7 1.0.12

dotnet add package usebeq.wrappers.core.itext7 --version 1.0.12                
NuGet\Install-Package usebeq.wrappers.core.itext7 -Version 1.0.12                
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.core.itext7" Version="1.0.12" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add usebeq.wrappers.core.itext7 --version 1.0.12                
#r "nuget: usebeq.wrappers.core.itext7, 1.0.12"                
#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.core.itext7 as a Cake Addin
#addin nuget:?package=usebeq.wrappers.core.itext7&version=1.0.12

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

Bienvenido a la librer�a PdfWrapper.Core

PdfWrapper.Core 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.

PdfWrapper.Core es la versi�n optimizada de la librer�a PdfWrapper para .NET.

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

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 SingleText { // SingleData en PdfWrapper
					Text = "Texto de prueba 1",
					Coor = new Coor { X = 100, Y = 100 }
				},
				new SingleRow { // SingleRowData en PdfWrapper
					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 haciendo uso de matrices 2*2 de objetos CellConfig. 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 },,
		FontName = "Times-Roman",
		FontSize = 12,
		FontColor = new RGB { R = 0, G = 0, B = 0 },
		IsExternalFont = false,
		PathToExternalFont = "path/to/external/font",
		Align = TextAlign.LEFT,
		Valign = VerticalAlign.MIDDLE
		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,
					IsExternalFont = false,
					PathToExternalFont = "path/to/external/font"
				},
				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,
					IsExternalFont = false,
					PathToExternalFont = "path/to/external/font"
				},
				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,
					IsExternalFont = false,
					PathToExternalFont = "path/to/external/font"
				}
			},
			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,
					IsExternalFont = false,
					PathToExternalFont = "path/to/external/font"
				},
				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,
					IsExternalFont = false,
					PathToExternalFont = "path/to/external/font"
				},
				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,
					IsExternalFont = false,
					PathToExternalFont = "path/to/external/font"
				}
			}
		}
	};

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

InsertTable(SimpleTableConfig config)

Este m�todo permite insertar tablas en el documento PDF proporcionando listas de objetos que son instancias de clases declaradas o listas de objetos din�micos. 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
	});

	SimpleTableConfig config = new SimpleTableConfig {
		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,
		IsExternalFont = false,
		PathToExternalFont = "path/to/external/font"
	};

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

InsertTable(DictionaryTableConfig config)

Este m�todo permite insertar tablas como listas de diccionarios 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 formar listas en tiempo de ejecuci�n y exportar estas listas a diccionarios y enviarlas directamente al wrapper.

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.

r 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 }
};

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

	DictionaryTableConfig config = new DictionaryTableConfig {
		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,
		IsExternalFont = false,
		PathToExternalFont = "path/to/external/font"
	};

	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.

SingleText, SingleRow y TableData - Estas son clases de datos que permiten insertar texto en el documento PDF. SingleData permite insertar un solo p�rrafo de texto, SingleRow 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.
IsExternalFont iText7 nos ofrece una lista de fuentes por defecto, hay que setear la propiedad en true si deseamos agregar una fuente externa.
PathToExternalFont Ruta donde tenemos almacenada la fuente que deseamos utilizar.

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 net6.0 is compatible.  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. 
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.12 541 11/17/2023
1.0.11 414 11/17/2023
1.0.10 425 11/17/2023
1.0.9 447 11/17/2023