usebeq.wrappers.itext7
1.0.12
See the version list below for details.
dotnet add package usebeq.wrappers.itext7 --version 1.0.12
NuGet\Install-Package usebeq.wrappers.itext7 -Version 1.0.12
<PackageReference Include="usebeq.wrappers.itext7" Version="1.0.12" />
paket add usebeq.wrappers.itext7 --version 1.0.12
#r "nuget: usebeq.wrappers.itext7, 1.0.12"
// Install usebeq.wrappers.itext7 as a Cake Addin #addin nuget:?package=usebeq.wrappers.itext7&version=1.0.12 // Install usebeq.wrappers.itext7 as a Cake Tool #tool nuget:?package=usebeq.wrappers.itext7&version=1.0.12
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 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(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 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 },
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:
- itext7: Licencia AGPL
- CommunityToolkit.Diagnostics: Licencia MIT
- agileobjects/AgileMapper: Licencia MIT
Product | Versions 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. |
-
.NETStandard 2.0
- AgileObjects.AgileMapper (>= 1.8.1)
- itext7 (>= 7.2.5)
- Microsoft.CSharp (>= 4.7.0)
- usebeq.CommunityToolkit.Diagnostics (>= 8.2.0-build.15)
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 | 156 | 11/23/2023 |
1.0.24 | 90 | 11/13/2023 |
1.0.23 | 85 | 11/10/2023 |
1.0.22 | 82 | 11/10/2023 |
1.0.21 | 76 | 11/10/2023 |
1.0.20 | 73 | 11/10/2023 |
1.0.19 | 79 | 11/9/2023 |
1.0.18 | 83 | 11/8/2023 |
1.0.17 | 132 | 8/15/2023 |
1.0.15 | 116 | 7/12/2023 |
1.0.14 | 104 | 6/22/2023 |
1.0.12 | 118 | 4/21/2023 |
1.0.9 | 106 | 4/20/2023 |
1.0.8 | 109 | 4/20/2023 |