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
<PackageReference Include="usebeq.wrappers.core.itext7" Version="1.0.12" />
paket add usebeq.wrappers.core.itext7 --version 1.0.12
#r "nuget: usebeq.wrappers.core.itext7, 1.0.12"
// 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 claseTemplateAdapter
para convertir un documento PDF en un objetoMemoryStream
que puedas usar como template para el m�todoSetPdfData
de la interfaz principalIPdfWrapper
// 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 claseTableConfig
.
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 | Versions 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. |
-
net6.0
- AgileObjects.AgileMapper (>= 1.8.1)
- itext7 (>= 8.0.2)
- itext7.bouncy-castle-adapter (>= 8.0.2)
- itext7.bouncy-castle-fips-adapter (>= 8.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.