Crear o Añadir Tabla en PDF
Creando Tabla
El espacio de nombres Aspose.PDF contiene clases llamadas Table, Cell, y Row que proporcionan funcionalidad para crear tablas al generar documentos PDF desde cero.
La tabla se puede crear creando un objeto de la clase Table.
Aspose.Pdf.Table table = new Aspose.Pdf.Table();
Añadiendo Tabla en Documento PDF Existente
Para añadir una tabla a un archivo PDF existente con Aspose.PDF para Java, siga los siguientes pasos:
-
Cargue el archivo fuente.
-
Inicializar una tabla y configurar sus columnas y filas.
-
Configurar las opciones de la tabla (hemos configurado los bordes).
-
Llenar la tabla.
-
Añadir la tabla a una página.
-
Guardar el archivo.
Los siguientes fragmentos de código muestran cómo añadir texto en un archivo PDF existente.
package com.aspose.pdf.examples;
import com.aspose.pdf.*;
public class ExampleAddTable {
private static String _dataDir = "/home/admin1/pdf-examples/Samples/";
public static void CreateTable() {
Document doc = new Document(_dataDir + "input.pdf");
// Inicializa una nueva instancia de la tabla
Table table = new Table();
// Establecer el color del borde de la tabla como LightGray
table.setBorder(new BorderInfo(BorderSide.All, .5f, Color.getLightGray()));
// establecer el borde para las celdas de la tabla
table.setDefaultCellBorder(new BorderInfo(BorderSide.All, .5f, Color.getLightGray()));
// crear un bucle para añadir 10 filas
for (int row_count = 1; row_count < 10; row_count++) {
// añadir fila a la tabla
Row row = table.getRows().add();
// añadir celdas de la tabla
row.getCells().add("Columna (" + row_count + ", 1)");
row.getCells().add("Columna (" + row_count + ", 2)");
row.getCells().add("Columna (" + row_count + ", 3)");
}
// Añadir objeto de tabla a la primera página del documento de entrada
doc.getPages().get_Item(1).getParagraphs().add(table);
// Guardar documento actualizado que contiene el objeto de tabla
doc.save(_dataDir + "document_with_table.pdf");
}
ColSpan y RowSpan en Tablas de Aspose.PDF usando Java
Aspose.PDF para Java proporciona el método setColSpan para fusionar las columnas en una tabla y el método setRowSpan para fusionar las filas.
Usamos los métodos setColSpan o setRowSpan en el objeto Cell que crea la celda de la tabla. Después de aplicar las propiedades requeridas, la celda creada puede ser añadida a la tabla.
public static void AddTable_RowColSpan() {
// Cargar documento PDF fuente
Document pdfDocument = new Document();
Page page = pdfDocument.getPages().add();
// Inicializa una nueva instancia de la Tabla
Table table = new Table();
// Establecer el color del borde de la tabla como LightGray
table.setBorder(new BorderInfo(BorderSide.All, .5f, Color.getBlack()));
// Establecer el borde para las celdas de la tabla
table.setDefaultCellBorder(new BorderInfo(BorderSide.All, .5f, Color.getBlack()));
// Añadir la 1ª fila a la tabla
Row row1 = table.getRows().add();
for (int cellCount = 1; cellCount < 5; cellCount++) {
// Añadir celdas a la tabla
row1.getCells().add("Prueba 1 " + cellCount);
}
// Añadir la 2ª fila a la tabla
Row row2 = table.getRows().add();
row2.getCells().add("Prueba 2 1");
Cell cell = row2.getCells().add("Prueba 2 2");
cell.setColSpan(2);
row2.getCells().add("Prueba 2 4");
// Añadir la 3ª fila a la tabla
Row row3 = table.getRows().add();
row3.getCells().add("Prueba 3 1");
row3.getCells().add("Prueba 3 2");
row3.getCells().add("Prueba 3 3");
row3.getCells().add("Prueba 3 4");
// Añadir la 4ª fila a la tabla
Row row4 = table.getRows().add();
row3.getCells().add("Prueba 4 1");
cell = row3.getCells().add("Prueba 4 2");
cell.setRowSpan(2);
row3.getCells().add("Prueba 4 3");
row3.getCells().add("Prueba 4 4");
// Añadir la 5ª fila a la tabla
row4 = table.getRows().add();
row4.getCells().add("Prueba 5 1");
row4.getCells().add("Prueba 5 3");
row4.getCells().add("Prueba 5 4");
// Añadir el objeto tabla a la primera página del documento de entrada
page.getParagraphs().add(table);
// Guardar documento actualizado que contiene el objeto tabla
pdfDocument.save(_dataDir + "document_with_table_out.pdf");
}
El resultado del código de ejecución a continuación es la tabla representada en la siguiente imagen:
Trabajando con Bordes, Márgenes y Relleno
Aspose.PDF para Java permite a los desarrolladores crear tablas en documentos PDF. Según el Modelo de Objeto de Documento de Aspose.PDF, una tabla es un elemento a nivel de párrafo.
Tenga en cuenta que también admite la función para establecer el estilo de borde, márgenes y relleno de celda para tablas. Antes de entrar en detalles más técnicos, es importante entender los conceptos de borde, márgenes y relleno que se presentan a continuación en un diagrama:
En la figura anterior, puede ver que los bordes de la tabla, fila y celda se superponen. Usando Aspose.PDF, una tabla puede tener márgenes y las celdas pueden tener rellenos. Para establecer márgenes de celda, debemos establecer el relleno de celda.
Bordes
Para establecer los bordes de los objetos Table, Row y Cell, use los métodos Table.setBorder, Row.setBorder y Cell.setBorder. Los bordes de las celdas también se pueden establecer utilizando la clase Table o la clase Row con el método DefaultCellBorder. Todas las propiedades relacionadas con los bordes discutidas anteriormente se asignan a una instancia de la clase Row, que se crea llamando a su constructor. La clase Row tiene muchas sobrecargas que toman casi todos los parámetros necesarios para personalizar el borde.
Márgenes o Relleno
El relleno de las celdas se puede gestionar utilizando la clase Table con el método DefaultCellPadding. Todas las propiedades relacionadas con el relleno se asignan a una instancia de la clase MarginInfo que toma información sobre los parámetros Left
, Right
, Top
y Bottom
para crear márgenes personalizados.
En el siguiente ejemplo, el ancho del borde de la celda se establece en 0.1 punto, el ancho del borde de la tabla se establece en 1 punto y el relleno de la celda se establece en 5 puntos.
public static void MargingPadding() {
// Instanciar el objeto Document llamando a su constructor vacío
Document doc = new Document();
Page page = doc.getPages().add();
// Instanciar un objeto tabla
Table tab1 = new Table();
// Añadir la tabla en la colección de párrafos de la sección deseada
page.getParagraphs().add(tab1);
// Establecer con anchos de columna de la tabla
tab1.setColumnWidths ("50 50 50");
// Establecer el borde de celda predeterminado usando el objeto BorderInfo
tab1.setDefaultCellBorder(new BorderInfo(BorderSide.All, 0.1F));
// Establecer el borde de la tabla usando otro objeto BorderInfo personalizado
tab1.setBorder (new BorderInfo(BorderSide.All, 1F));
// Crear objeto MarginInfo y establecer sus márgenes izquierdo, inferior, derecho y superior
MarginInfo margin = new MarginInfo();
margin.setTop (5f);
margin.setLeft (5f);
margin.setRight (5f);
margin.setBottom (5f);
// Establecer el relleno de celda predeterminado al objeto MarginInfo
tab1.setDefaultCellPadding(margin);
// Crear filas en la tabla y luego celdas en las filas
Row row1 = tab1.getRows().add();
row1.getCells().add("col1");
row1.getCells().add("col2");
row1.getCells().add();
TextFragment mytext = new TextFragment("col3 con una cadena de texto grande");
row1.getCells().get_Item(2).getParagraphs().add(mytext);
row1.getCells().get_Item(2).setWordWrapped(false);
Row row2 = tab1.getRows().add();
row2.getCells().add("item1");
row2.getCells().add("item2");
row2.getCells().add("item3");
// Guardar el PDF
doc.save(_dataDir + "MarginsOrPadding_out.pdf");
}
}
Para crear una tabla con esquinas redondeadas, use el valor RoundedBorderRadius
de la clase BorderInfo y establezca el estilo de esquina de la tabla en redondo.
public static void RoundedBorderRadius() {
Document doc = new Document();
Page page = doc.getPages().add();
// Instanciar un objeto de tabla
Table tab1 = new Table();
// Agregar la tabla en la colección de párrafos de la sección deseada
page.getParagraphs().add(tab1);
GraphInfo graph = new GraphInfo();
graph.setColor(Color.getRed());
// Crear un objeto BorderInfo en blanco
BorderInfo bInfo = new BorderInfo(BorderSide.All, graph);
// Establecer el borde como un borde redondeado donde el radio de la curva es 15
bInfo.setRoundedBorderRadius(15);
// Establecer el estilo de esquina de la tabla como Redondo.
tab1.setCornerStyle(BorderCornerStyle.Round);
// Establecer la información del borde de la tabla
tab1.setBorder(bInfo);
// Crear filas en la tabla y luego celdas en las filas
Row row1 = tab1.getRows().add();
row1.getCells().add("col1");
row1.getCells().add("col2");
row1.getCells().add();
TextFragment mytext = new TextFragment("col3 con una cadena de texto larga");
row1.getCells().get_Item(2).getParagraphs().add(mytext);
row1.getCells().get_Item(2).setWordWrapped(false);
Row row2 = tab1.getRows().add();
row2.getCells().add("item1");
row2.getCells().add("item2");
row2.getCells().add("item3");
// Guardar el PDF
doc.save(_dataDir + "BorderRadius_out.pdf");
}
Propiedad AutoFitToWindow en la enumeración ColumnAdjustmentType
public static void AutoFitToWindowProperty() {
// Instanciar el objeto Pdf llamando a su constructor vacío
Document doc = new Document();
// Crear la sección en el objeto Pdf
Page sec1 = doc.getPages().add();
// Instanciar un objeto de tabla
Table tab1 = new Table();
// Añadir la tabla en la colección de párrafos de la sección deseada
sec1.getParagraphs().add(tab1);
// Establecer los anchos de columna de la tabla
tab1.setColumnWidths("50 50 50");
tab1.setColumnAdjustment(ColumnAdjustment.AutoFitToWindow);
// Establecer el borde de celda predeterminado usando el objeto BorderInfo
tab1.setDefaultCellBorder(new BorderInfo(BorderSide.All, 0.1F));
// Establecer el borde de la tabla usando otro objeto BorderInfo personalizado
tab1.setBorder(new BorderInfo(BorderSide.All, 1F));
// Crear objeto MarginInfo y establecer sus márgenes izquierdo, inferior, derecho y superior
MarginInfo margin = new MarginInfo();
margin.setTop(5f);
margin.setLeft(5f);
margin.setRight(5f);
margin.setBottom(5f);
// Establecer el relleno de celda predeterminado al objeto MarginInfo
tab1.setDefaultCellPadding(margin);
// Crear filas en la tabla y luego celdas en las filas
Row row1 = tab1.getRows().add();
row1.getCells().add("col1");
row1.getCells().add("col2");
row1.getCells().add("col3");
Row row2 = tab1.getRows().add();
row2.getCells().add("item1");
row2.getCells().add("item2");
row2.getCells().add("item3");
// Guardar el documento actualizado que contiene el objeto tabla
doc.save(_dataDir + "AutoFitToWindow_out.pdf");
}
Obtener Ancho de la Tabla
A veces, es necesario obtener el ancho de la tabla dinámicamente. La clase Aspose.PDF.Table tiene un método GetWidth para este propósito. Por ejemplo, no has establecido el ancho de las columnas de la tabla explícitamente y has configurado ColumnAdjustment en AutoFitToContent. En este caso, puedes obtener el ancho de la tabla de la siguiente manera.
public static void GetTableWidth() {
// Crear un nuevo documento
Document doc = new Document();
// Agregar página en el documento
Page page = doc.getPages().add();
// Inicializar nueva tabla
Table table = new Table();
// Agregar la tabla en la colección de párrafos de la sección deseada
page.getParagraphs().add(table);
table.setColumnAdjustment(ColumnAdjustment.AutoFitToContent);
// Agregar fila en la tabla
Row row = table.getRows().add();
// Agregar celda en la tabla
row.getCells().add("Texto de la Celda 1");
row.getCells().add("Texto de la Celda 2");
// Obtener ancho de la tabla
System.out.println(table.getWidth());
}
Agregar objeto SVG a la celda de la tabla
Aspose.PDF para Java admite la función de agregar una celda de tabla en un archivo PDF. Al crear una tabla, es posible agregar texto o imágenes en las celdas. Además, la API también ofrece la función de convertir archivos SVG al formato PDF. Usando una combinación de estas funciones, es posible cargar una imagen SVG y agregarla en una celda de tabla.
El siguiente fragmento de código muestra los pasos para crear una instancia de tabla y agregar una imagen SVG dentro de una celda de tabla.
public static void AddSVGObjectToTableCell() {
// Instanciar objeto Documento
Document doc = new Document();
// Crear una instancia de imagen
com.aspose.pdf.Image img = new com.aspose.pdf.Image();
// Establecer tipo de imagen como SVG
img.setFileType (com.aspose.pdf.ImageFileType.Svg);
// Ruta para el archivo fuente
img.setFile (_dataDir + "SVGToPDF.svg");
// Establecer ancho para la instancia de imagen
img.setFixWidth (50);
// Establecer altura para la instancia de imagen
img.setFixHeight (50);
// Crear instancia de tabla
com.aspose.pdf.Table table = new com.aspose.pdf.Table();
// Establecer ancho para las celdas de la tabla
table.setColumnWidths ("100 100");
// Crear objeto fila y añadirlo a la instancia de tabla
com.aspose.pdf.Row row = table.getRows().add();
// Crear objeto celda y añadirlo a la instancia de fila
com.aspose.pdf.Cell cell = row.getCells().add();
// Añadir fragmento de texto a la colección de párrafos del objeto celda
cell.getParagraphs().add(new TextFragment("Primera celda"));
// Añadir otra celda al objeto fila
cell = row.getCells().add();
// Añadir imagen SVG a la colección de párrafos de la instancia de celda recién añadida
cell.getParagraphs().add(img);
// Crear objeto página y añadirlo a la colección de páginas de la instancia de documento
Page page = doc.getPages().add();
// Añadir tabla a la colección de párrafos del objeto página
page.getParagraphs().add(table);
// Guardar archivo PDF
doc.save(_dataDir + "AddSVGObject_out.pdf");
}
Añadir etiquetas HTML dentro de la tabla
Aspose.PDF para Java permite agregar un nuevo Fragmento HTML en un Párrafo de su archivo PDF.
public static void AddHTMLFragmentToTableCell() {
Document doc = new Document(_dataDir + "input.pdf");
// Inicializa una nueva instancia de la Tabla
Table table = new Table();
// Establece el color del borde de la tabla como LightGray
table.setBorder(new BorderInfo(BorderSide.All, .5f, Color.getLightGray()));
// establece el borde para las celdas de la tabla
table.setDefaultCellBorder(new BorderInfo(BorderSide.All, .5f, Color.getLightGray()));
// crea un bucle para añadir 10 filas
for (int row_count = 1; row_count < 10; row_count++) {
Cell cell;
// añade fila a la tabla
Row row = table.getRows().add();
// añade celdas a la tabla
cell = row.getCells().add();
cell.getParagraphs().add(new HtmlFragment("Columna <strong>(" + row_count + ", 1)</strong>"));
cell = row.getCells().add();
cell.getParagraphs().add(new HtmlFragment("Columna <span style='color:red'>(" + row_count + ", 2)</span>"));
cell = row.getCells().add();
cell.getParagraphs().add(new HtmlFragment("Columna <span style='text-decoration: underline'>(" + row_count + ", 3)</span>"));
}
// Agrega el objeto de tabla a la primera página del documento de entrada
doc.getPages().get_Item(1).getParagraphs().add(table);
// Guarda el documento actualizado que contiene el objeto de tabla
doc.save(_dataDir + "AddHTMLObject_out.pdf");
}
}
Insertar un salto de página entre las filas de la tabla
Por defecto, al crear una tabla dentro de un archivo PDF, la tabla fluye a las páginas subsecuentes cuando alcanza el margen inferior de la tabla. Sin embargo, podemos tener un requerimiento de insertar forzadamente un salto de página cuando se agregan un cierto número de filas a la tabla. El siguiente fragmento de código muestra los pasos para insertar un salto de página cuando se agregan 10 filas a la tabla.
public static void InsertPageBreak() {
// Crear una instancia de Document
Document doc = new Document();
// Agregar una página a la colección de páginas del archivo PDF
Page page = doc.getPages().add();
// Crear una instancia de tabla
Table tab = new Table();
// Establecer estilo de borde para la tabla
tab.setBorder (new BorderInfo(BorderSide.All, Color.getRed()));
// Establecer estilo de borde predeterminado para la tabla con color de borde rojo
tab.setDefaultCellBorder (new BorderInfo(BorderSide.All, Color.getRed()));
// Especificar el ancho de las columnas de la tabla
tab.setColumnWidths ("100 100");
// Crear un bucle para agregar 200 filas a la tabla
for (int counter = 0; counter <= 200; counter++) {
Row row = new Row();
tab.getRows().add(row);
Cell cell1 = new Cell();
cell1.getParagraphs().add(new TextFragment("Cell " + counter + ", 0"));
row.getCells().add(cell1);
Cell cell2 = new Cell();
cell2.getParagraphs().add(new TextFragment("Cell " + counter + ", 1"));
row.getCells().add(cell2);
// Cuando se agregan 10 filas, renderizar nueva fila en nueva página
if (counter % 10 == 0 && counter != 0)
row.setInNewPage(true);
}
// Agregar la tabla a la colección de párrafos del archivo PDF
page.getParagraphs().add(tab);
// Guardar el documento PDF
doc.save(_dataDir + "InsertPageBreak_out.pdf");
}
Ocultar Bordes de Celdas Combinadas
Al agregar celdas a una tabla, los bordes de las celdas combinadas pueden aparecer cuando se rompen a otra fila. Tales bordes combinados pueden hacerse invisibles como se muestra en el siguiente ejemplo de código.
Document doc = new Document();
com.aspose.pdf.Page page = doc.getPages().add();
//Instanciar un objeto de tabla que se anidará dentro de outerTable que se romperá
//dentro de la misma página
com.aspose.pdf.Table mytable = new com.aspose.pdf.Table();
mytable.setBroken(TableBroken.Vertical);
mytable.setDefaultCellBorder(new BorderInfo(BorderSide.All));
mytable.setRepeatingColumnsCount(2);
page.getParagraphs().add(mytable);
//Agregar fila de encabezado
com.aspose.pdf.Row row = mytable.getRows().add();
Cell cell = row.getCells().add("encabezado 1");
cell.setColSpan(2);
cell.setBackgroundColor(Color.getLightGray());
Cell header3 = row.getCells().add("encabezado 3");
Cell cell2 = row.getCells().add("encabezado 4");
cell2.setColSpan(2);
cell2.setBackgroundColor(Color.getLightBlue());
row.getCells().add("encabezado 6");
Cell cell3 = row.getCells().add("encabezado 7");
cell3.setColSpan(2);
cell3.setBackgroundColor(Color.getLightGreen());
Cell cell4 = row.getCells().add("encabezado 9");
cell4.setColSpan(3);
cell4.setBackgroundColor(Color.getLightCoral());
row.getCells().add("encabezado 12");
row.getCells().add("encabezado 13");
row.getCells().add("encabezado 14");
row.getCells().add("encabezado 15");
row.getCells().add("encabezado 16");
row.getCells().add("encabezado 17");
for (int rowCounter = 0; rowCounter < 1; rowCounter++)
{
//Crear filas en la tabla y luego celdas en las filas
com.aspose.pdf.Row row1 = mytable.getRows().add();
row1.getCells().add("col "+rowCounter+", 1");
row1.getCells().add("col "+rowCounter+", 2");
row1.getCells().add("col "+rowCounter+", 3");
row1.getCells().add("col "+rowCounter+", 4");
row1.getCells().add("col "+rowCounter+", 5");
row1.getCells().add("col "+rowCounter+", 6");
row1.getCells().add("col "+rowCounter+", 7");
row1.getCells().add("col "+rowCounter+", 8");
row1.getCells().add("col "+rowCounter+", 9");
row1.getCells().add("col "+rowCounter+", 10");
row1.getCells().add("col "+rowCounter+", 11");
row1.getCells().add("col "+rowCounter+", 12");
row1.getCells().add("col "+rowCounter+", 13");
row1.getCells().add("col "+rowCounter+", 14");
row1.getCells().add("col "+rowCounter+", 15");
row1.getCells().add("col "+rowCounter+", 16");
row1.getCells().add("col "+rowCounter+", 17");
}
doc.save(dataDir + "3_out.pdf");