Integrar tablas PDF con fuentes de datos en Python
Contents
[
Hide
]
Crear PDF a partir de DataFrame
El create_pdf_from_dataframe función crea un nuevo PDF e inserta una tabla generada a partir de un DataFrame de pandas. Este enfoque es útil para flujos de trabajo de generación de informes donde sus datos ya existen en forma tabular.
La función realiza los siguientes pasos:
- Crear un documento PDF vacío con
ap.Document(). - Agregue una página al documento.
- Convierta el DataFrame en una tabla Aspose.PDF llamando
create_table_from_dataframe(df, max_rows). - Agregar la tabla a la página con
page.paragraphs.add(table). - Guarda el PDF en la ruta de salida.
from os import path
import sys
import pandas as pd
import aspose.pdf as ap
from config import set_license, initialize_data_dir
def create_pdf_from_dataframe(
outfile: str, df: pd.DataFrame, max_rows: int = 20
) -> None:
# Create new PDF document
document = ap.Document()
page = document.pages.add()
table = create_table_from_dataframe(df, max_rows)
# Add table object to first page of input document
page.paragraphs.add(table)
document.save(outfile)
Crear tabla a partir de DataFrame
El create_table_from_dataframe función convierte un DataFrame en un Aspose.PDF Table objeto que puedes añadir a cualquier página.
Hace lo siguiente:
- Crear un vacío
ap.Table()instancia. - Establecer bordes de tabla y celda para un formato consistente.
- Agregar una fila de encabezado usando los nombres de columna del DataFrame.
- Agregar filas de datos de
df.head(max_rows). - Devolver el objeto de tabla poblado.
from os import path
import sys
import pandas as pd
import aspose.pdf as ap
from config import set_license, initialize_data_dir
def create_table_from_dataframe(df: pd.DataFrame, max_rows: int = 20) -> ap.Table:
"""Create an Aspose.PDF table from a pandas DataFrame."""
# Initializes a new instance of the Table
table = ap.Table()
# Set the table border color as LightGray
table.border = ap.BorderInfo(ap.BorderSide.ALL, 1, ap.Color.light_gray)
# Set the border for table cells
table.default_cell_border = ap.BorderInfo(
ap.BorderSide.BOTTOM, 1, ap.Color.light_gray
)
# Add header row with column names
header_row = table.rows.add()
header_row.is_row_broken = False # Prevent header row from being split across pages
for column_name in df.columns:
cell = header_row.cells.add(str(column_name))
cell.background_color = ap.Color.light_gray
# Add data rows
for row_data in df.head(max_rows).itertuples(index=False):
row = table.rows.add()
for value in row_data:
row.cells.add(str(value))
return table