Crear o Agregar Tabla en PDF usando Python
Creación de Tabla usando Python
Las tablas son importantes cuando se trabaja con documentos PDF. Proporcionan grandes características para mostrar información de manera sistemática. 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.
table = ap.Table()
Añadiendo Tabla en Documento PDF Existente
Para agregar una tabla a un archivo PDF existente con Aspose.PDF para Python a través de .NET, siga los siguientes pasos:
- Cargue el archivo fuente.
- Inicialice una tabla y configure sus columnas y filas.
- Establezca la configuración de la tabla (hemos establecido los bordes).
- Llene la tabla.
- Agregue la tabla a una página.
- Guarde el archivo.
Los siguientes fragmentos de código muestran cómo agregar texto en un archivo PDF existente.
import aspose.pdf as ap
# Cargar documento PDF fuente
doc = ap.Document(input_file)
# Inicializa una nueva instancia de la Tabla
table = ap.Table()
# Establecer el color del borde de la tabla como LightGray
table.border = ap.BorderInfo(ap.BorderSide.ALL, 5, ap.Color.from_rgb(apd.Color.light_gray))
# Establecer el borde para las celdas de la tabla
table.default_cell_border = ap.BorderInfo(ap.BorderSide.ALL, 5, ap.Color.from_rgb(apd.Color.light_gray))
# Crear un bucle para agregar 10 filas
for row_count in range(0, 10):
# Agregar fila a la tabla
row = table.rows.add()
# Agregar celdas a la tabla
row.cells.add("Columna (" + str(row_count) + ", 1)")
row.cells.add("Columna (" + str(row_count) + ", 2)")
row.cells.add("Columna (" + str(row_count) + ", 3)")
# Agregar objeto tabla a la primera página del documento de entrada
doc.pages[1].paragraphs.add(table)
# Guardar documento actualizado que contiene el objeto tabla
doc.save(output_file)
ColSpan y RowSpan en Tablas
Aspose.PDF para Python a través de .NET proporciona la propiedad col_span para fusionar las columnas en una tabla y la propiedad row_span para fusionar las filas.
Usamos la propiedad col_span
o row_span
en el objeto Cell
que crea la celda de la tabla. Después de aplicar las propiedades requeridas, la celda creada se puede agregar a la tabla.
import aspose.pdf as ap
# Inicializar el objeto Document llamando a su constructor vacío
pdf_document = ap.Document()
pdf_document.pages.add()
# Inicializa una nueva instancia de la Tabla
table = ap.Table()
# Establecer el color del borde de la tabla como LightGray
table.border = ap.BorderInfo(ap.BorderSide.ALL, 0.5, ap.Color.black)
# Establecer el borde para las celdas de la tabla
table.default_cell_border = ap.BorderInfo(ap.BorderSide.ALL, 0.5, ap.Color.black)
# Agregar la 1ra fila a la tabla
row1 = table.rows.add()
for cellCount in range(1, 5):
# Agregar celdas a la tabla
row1.cells.add("Test 1" + str(cellCount))
# Agregar la 2da fila a la tabla
row2 = table.rows.add()
row2.cells.add("Test 2 1")
cell = row2.cells.add("Test 2 2")
cell.col_span = 2
row2.cells.add("Test 2 4")
# Agregar la 3ra fila a la tabla
row3 = table.rows.add()
row3.cells.add("Test 3 1")
row3.cells.add("Test 3 2")
row3.cells.add("Test 3 3")
row3.cells.add("Test 3 4")
# Agregar la 4ta fila a la tabla
row4 = table.rows.add()
row4.cells.add("Test 4 1")
cell = row4.cells.add("Test 4 2")
cell.row_span = 2
row4.cells.add("Test 4 3")
row4.cells.add("Test 4 4")
# Agregar la 5ta fila a la tabla
row5 = table.rows.add()
row5.cells.add("Test 5 1")
row5.cells.add("Test 5 3")
row5.cells.add("Test 5 4")
# Agregar el objeto tabla a la primera página del documento de entrada
pdf_document.pages[1].paragraphs.add(table)
# Guardar el documento actualizado que contiene el objeto tabla
pdf_document.save(output_file)
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
Por favor, tenga en cuenta que también se admite la función para establecer el estilo de borde, márgenes y relleno de celdas para tablas. Antes de entrar en más detalles 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, puedes 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 relleno. Para establecer márgenes de celda, tenemos que establecer el relleno de celda.
Bordes
Para establecer los bordes de los objetos Table, Row y Cell, use las propiedades Table.border, Row.border y Cell.border. Los bordes de las celdas también se pueden establecer usando la propiedad default_cell_border de la clase Table o Row. 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 propiedad default_cell_padding de la clase Table. 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 puntos, el ancho del borde de la tabla se establece en 1 punto y el relleno de la celda se establece en 5 puntos.
import aspose.pdf as ap
# Instanciar el objeto Document llamando a su constructor vacío
doc = ap.Document()
page = doc.pages.add()
# Instanciar un objeto de tabla
tab1 = ap.Table()
# Agregar la tabla en la colección de párrafos de la sección deseada
page.paragraphs.add(tab1)
# Establecer los anchos de columna de la tabla
tab1.column_widths = "50 50 50"
# Establecer el borde de celda predeterminado usando el objeto BorderInfo
tab1.default_cell_border = ap.BorderInfo(ap.BorderSide.ALL, 0.1)
# Establecer el borde de la tabla usando otro objeto BorderInfo personalizado
tab1.border = ap.BorderInfo(ap.BorderSide.ALL, 1)
# Crear un objeto MarginInfo y establecer sus márgenes izquierdo, inferior, derecho y superior
margin = ap.MarginInfo()
margin.top = 5
margin.left = 5
margin.right = 5
margin.bottom = 5
# Establecer el relleno de celda predeterminado en el objeto MarginInfo
tab1.default_cell_padding = margin
# Crear filas en la tabla y luego celdas en las filas
row1 = tab1.rows.add()
row1.cells.add("col1")
row1.cells.add("col2")
row1.cells.add()
my_text = ap.text.TextFragment("col3 con una larga cadena de texto")
# Row1.Cells.Add("col3 con una larga cadena de texto para ser colocado dentro de la celda")
row1.cells[2].paragraphs.add(my_text)
row1.cells[2].is_word_wrapped = False
row2 = tab1.rows.add()
row2.cells.add("item1")
row2.cells.add("item2")
row2.cells.add("item3")
# Guardar el Pdf
doc.save(output_file)
Para crear una tabla con esquinas redondeadas, utiliza el valor rounded_border_radius de la clase BorderInfo y establece el estilo de las esquinas de la tabla a redondeado.
import aspose.pdf as ap
tab1 = ap.Table()
graph = ap.GraphInfo()
graph.color = ap.Color.red
# Crear un objeto BorderInfo en blanco
b_info = ap.BorderInfo(ap.BorderSide.ALL, graph)
# Establecer el borde como un borde redondeado donde el radio del redondeo es 15
b_info.rounded_border_radius = 15
# Establecer el estilo de esquina de la tabla como Redondeado
tab1.corner_style = ap.BorderCornerStyle.ROUND
# Establecer la información del borde de la tabla
tab1.border = b_info
Aplicar Diferentes Configuraciones de AutoAjuste a una Tabla
Al diseñar una tabla utilizando una herramienta visual como Microsoft Word, frecuentemente utilizarás una de las características de AutoAjuste para ajustar convenientemente el tamaño de la tabla al ancho deseado. Por ejemplo, puedes emplear la opción “AUTO_FIT_TO_WINDOW” para ajustar el ancho de la tabla a la página o AUTO_FIT_TO_CONTENT. Por defecto, al usar Aspose.Pdf para crear una nueva tabla, utiliza el column_adjustment con un valor “Customized”. En el siguiente fragmento de código, establecemos los parámetros del objeto MarginInfo y los objetos BorderInfo en la tabla. Prueba el ejemplo y evalúa el resultado.
import aspose.pdf as ap
# Instanciar el objeto Pdf llamando a su constructor vacío
doc = ap.Document()
# Crear la sección en el objeto Pdf
sec1 = doc.pages.add()
# Instanciar un objeto de tabla
tab1 = ap.Table()
# Agregar la tabla en la colección de párrafos de la sección deseada
sec1.paragraphs.add(tab1)
# Establecer anchos de columna de la tabla
tab1.column_widths = "50 50 50"
tab1.column_adjustment = ap.ColumnAdjustment.AUTO_FIT_TO_WINDOW
# Establecer el borde de celda predeterminado usando el objeto BorderInfo
tab1.default_cell_border = ap.BorderInfo(ap.BorderSide.ALL, 0.1)
# Establecer el borde de la tabla usando otro objeto BorderInfo personalizado
tab1.border = ap.BorderInfo(ap.BorderSide.ALL, 1)
# Crear un objeto MarginInfo y establecer sus márgenes izquierdo, inferior, derecho y superior
margin = ap.MarginInfo()
margin.top = 5
margin.left = 5
margin.right = 5
margin.bottom = 5
# Establecer el relleno de celda predeterminado al objeto MarginInfo
tab1.default_cell_padding = margin
# Crear filas en la tabla y luego celdas en las filas
row1 = tab1.rows.add()
row1.cells.add("col1")
row1.cells.add("col2")
row1.cells.add("col3")
row2 = tab1.rows.add()
row2.cells.add("item1")
row2.cells.add("item2")
row2.cells.add("item3")
# Guardar el documento actualizado que contiene el objeto tabla
doc.save(output_file)
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 get_width() para este propósito. Por ejemplo, no has establecido el ancho de las columnas de la tabla explícitamente y has configurado column_adjustment a ‘AUTO_FIT_TO_CONTENT’. En este caso, puedes obtener el ancho de la tabla de la siguiente manera.
import aspose.pdf as ap
# Crear un nuevo documento
doc = ap.Document()
# Agregar página en el documento
page = doc.pages.add()
# Inicializar nueva tabla
table = ap.Table()
table.column_adjustment = ap.ColumnAdjustment.AUTO_FIT_TO_CONTENT
# Agregar fila en la tabla
row = table.rows.add()
# Agregar celda en la tabla
cell = row.cells.add("Texto de la Celda 1")
cell = row.cells.add("Texto de la Celda 2")
# Obtener ancho de la tabla
print(table.get_width())
Agregar Imagen SVG a la Celda de la Tabla
Aspose.PDF para Python a través de .NET proporciona la capacidad de insertar celdas de tabla en un archivo PDF. Al construir una tabla, puede incluir tanto texto como imágenes dentro de estas celdas. Además, la API ofrece la funcionalidad de transformar archivos SVG en formato PDF. Al aprovechar estas funcionalidades juntas, puede cargar una imagen SVG y colocarla dentro de una celda de la tabla.
El siguiente fragmento de código demuestra el proceso de crear un objeto de tabla e incrustar una imagen SVG dentro de una de sus celdas.
import aspose.pdf as ap
# Instanciar objeto Document
doc = ap.Document()
# Crear una instancia de imagen
img = ap.Image()
# Establecer tipo de imagen como SVG
img.file_type = ap.ImageFileType.SVG
# Ruta para el archivo fuente
img.file = DIR_INPUT_TABLE + "SVGToPDF.svg"
# Establecer ancho para la instancia de imagen
img.fix_width = 50
# Establecer altura para la instancia de imagen
img.fix_height = 50
# Crear instancia de tabla
table = ap.Table()
# Establecer ancho para las celdas de la tabla
table.column_widths = "100 100"
# Crear objeto fila y añadirlo a la instancia de tabla
row = table.rows.add()
# Crear objeto celda y añadirlo a la instancia de fila
cell = row.cells.add()
# Añadir fragmento de texto a la colección de párrafos del objeto celda
cell.paragraphs.add(ap.text.TextFragment("Primera celda"))
# Añadir otra celda al objeto fila
cell = row.cells.add()
# Añadir imagen SVG a la colección de párrafos de la instancia de celda recientemente añadida
cell.paragraphs.add(img)
# Crear objeto página y añadirlo a la colección de páginas de la instancia de documento
page = doc.pages.add()
# Añadir tabla a la colección de párrafos del objeto página
page.paragraphs.add(table)
# Guardar archivo PDF
doc.save(output_file)
Insertar un salto de página entre las filas de la tabla
Por defecto, cuando creas una tabla dentro de un archivo PDF, la tabla se extenderá a través de múltiples páginas si se extiende más allá del margen inferior de la tabla. Sin embargo, hay situaciones en las que necesitamos forzar saltos de página después de que un número específico de filas se haya agregado a la tabla. El siguiente fragmento de código describe el proceso de insertar un salto de página cuando se han incluido 10 filas en la tabla.
import aspose.pdf as ap
# Instanciar la instancia del documento
doc = ap.Document()
# Añadir página a la colección de páginas del archivo PDF
doc.pages.add()
# Crear instancia de tabla
tab = ap.Table()
# Establecer estilo de borde para la tabla
tab.border = ap.BorderInfo(ap.BorderSide.ALL, ap.Color.red)
# Establecer estilo de borde predeterminado para la tabla con color de borde rojo
tab.default_cell_border = ap.BorderInfo(ap.BorderSide.ALL, ap.Color.red)
# Especificar el ancho de las columnas de la tabla
tab.column_widths = "100 100"
# Crear un bucle para añadir 200 filas a la tabla
for counter in range(0, 201):
row = ap.Row()
tab.rows.add(row)
cell1 = ap.Cell()
cell1.paragraphs.add(ap.text.TextFragment("Cell " + str(counter) + ", 0"))
row.cells.add(cell1)
cell2 = ap.Cell()
cell2.paragraphs.add(ap.text.TextFragment("Cell " + str(counter) + ", 1"))
row.cells.add(cell2)
# Cuando se añaden 10 filas, renderizar nueva fila en nueva página
if counter % 10 == 0 and counter != 0:
row.is_in_new_page = True
# Añadir tabla a la colección de párrafos del archivo PDF
doc.pages[1].paragraphs.add(tab)
# Guardar el documento PDF
doc.save(output_file)
Representar una Tabla en una Nueva Página
Por defecto, los párrafos se añaden a la colección de Párrafos de un objeto Página. Sin embargo, es posible representar una tabla en una nueva página en lugar de directamente después del objeto de nivel de párrafo añadido anteriormente en la página.
Ejemplo: Cómo Representar una Tabla en una Nueva Página usando Python
Para representar una tabla en una nueva página, use la propiedad is_in_new_page en la clase BaseParagraph. El siguiente fragmento de código muestra cómo hacerlo.
import aspose.pdf as ap
doc = ap.Document()
page_info = doc.page_info
margin_info = page_info.margin
margin_info.left = 37
margin_info.right = 37
margin_info.top = 37
margin_info.bottom = 37
page_info.is_landscape = True
table = ap.Table()
table.column_widths = "50 100"
# Página añadida.
cur_page = doc.pages.add()
for i in range(1, 121):
row = table.rows.add()
row.fixed_row_height = 15
cell1 = row.cells.add()
cell1.paragraphs.add(ap.text.TextFragment("Contenido 1"))
cell2 = row.cells.add()
cell2.paragraphs.add(ap.text.TextFragment("HHHHH"))
paragraphs = cur_page.paragraphs
paragraphs.add(table)
table1 = ap.Table()
table1.column_widths = "100 100"
for i in range(1, 11):
row = table1.rows.add()
cell1 = row.cells.add()
cell1.paragraphs.add(ap.text.TextFragment("LAAAAAAA"))
cell2 = row.cells.add()
cell2.paragraphs.add(ap.text.TextFragment("LAAGGGGGG"))
table1.is_in_new_page = True
# Quiero mantener la tabla 1 en la siguiente página por favor...
paragraphs.add(table1)
doc.save(output_file)