Renderizar tabla desde la fuente de datos
Aspose.PDF permite crear una tabla con DataSource desde DataSet, DataTable, arreglos y objetos IEnumerable utilizando la clase PdfLightTable
La clase Table se utiliza para procesar tablas. Esta clase nos da la capacidad de crear tablas y colocarlas en el documento, utilizando Rows y Cells. Por lo tanto, para crear la tabla, necesitas añadir el número requerido de filas y llenarlas con el número apropiado de celdas.
El siguiente ejemplo crea una tabla de 4x10.
var table = new Table
{
// Establecer anchuras automáticas de columna de la tabla
ColumnWidths = "25% 25% 25% 25%",
// Establecer el relleno de la celda
DefaultCellPadding = new MarginInfo(10, 5, 10, 5), // Izquierda Abajo Derecha Arriba
// Establecer el color del borde de la tabla como Verde
Border = new BorderInfo(BorderSide.All, .5f, Color.Green),
// Establecer el borde para las celdas de la tabla como Negro
DefaultCellBorder = new BorderInfo(BorderSide.All, .2f, Color.Green),
};
for (var rowCount = 0; rowCount < 10; rowCount++)
{
// Añadir fila a la tabla
var row = table.Rows.Add();
// Añadir celdas a la tabla
for (int i = 0; i < 4; i++)
{
row.Cells.Add($"Celda ({i+1}, {rowCount +1})");
}
}
// Añadir el objeto de tabla a la primera página del documento de entrada
document.Pages[1].Paragraphs.Add(table);
Al inicializar el objeto Table, se utilizaron las configuraciones mínimas de apariencia:
- ColumnWidths - ancho de las columnas (por defecto);
- DefaultCellPadding - los campos predeterminados para la celda de la tabla;
- Border - atributos del marco de la tabla (estilo, grosor, color);
- DefaultCellBorder - atributos del marco de la celda (estilo, grosor, color).
Exportación de datos desde un arreglo de objetos
La clase Table proporciona métodos para interactuar con fuentes de datos ADO.NET - ImportDataTable y ImportDataView.
Dado que estos objetos no son muy convenientes para trabajar en la plantilla MVC, nos limitaremos a un breve ejemplo. En este ejemplo (línea 50), se llama al método ImportDataTable y recibe como parámetros una instancia de DataTable y configuraciones adicionales como la bandera de encabezado y la posición inicial (filas/columnas) para la salida de datos.
// Crear un nuevo documento PDF
var document = new Document
{
PageInfo = new PageInfo { Margin = new MarginInfo(28, 28, 28, 42) }
};
var pdfPage = document.Pages.Add();
// Inicializa una nueva instancia de TextFragment para el título del informe
var textFragment = new TextFragment(reportTitle1);
Table table = new Table
{
// Establecer los anchos de columna de la tabla
ColumnWidths = "25% 25% 25% 25%",
// Establecer el relleno de las celdas
DefaultCellPadding = new MarginInfo(10, 5, 10, 5), // Izquierda Abajo Derecha Arriba
// Establecer el color del borde de la tabla como Verde
Border = new BorderInfo(BorderSide.All, .5f, Color.Green),
// Establecer el borde de las celdas de la tabla como Negro
DefaultCellBorder = new BorderInfo(BorderSide.All, .2f, Color.Green),
};
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("config.json", false)
.Build();
var connectionString = configuration.GetSection("connectionString").Value;
if (string.IsNullOrEmpty(connectionString))
throw new ArgumentException("No hay cadena de conexión en config.json");
var resultTable = new DataTable();
using (var conn = new SqlConnection(connectionString))
{
const string sql = "SELECT * FROM Tennats";
using (var cmd = new SqlCommand(sql, conn))
{
using (var adapter = new SqlDataAdapter(cmd))
{
adapter.Fill(resultTable);
}
}
}
table.ImportDataTable(resultTable,true,1,1);
// Agregar el objeto de tabla a la primera página del documento de entrada
document.Pages[1].Paragraphs.Add(table);
using (var streamOut = new MemoryStream())
{
document.Save(streamOut);
return new FileContentResult(streamOut.ToArray(), "application/pdf")
{
FileDownloadName = "demotable2.pdf"
};
}