Ich baue den Versuch, mit FPDF einen PDF -Bericht in Python zu erstellen. Ich möchte einige Daten aus meiner in einem Datenrahmen gespeicherten Analyse entnehmen und Tabellen und Diagramme erstellen. Genau wie das, was Sie in Excel tun würden. Meine Probleme sind, dass ich nicht sehen kann, dass die Header so Text einwickeln, wie Sie es erhalten würden, wenn Sie die Funktion "Wrap Text" in Excel verwenden würden, wenn Sie eine Tabelle erstellen würden. Ich habe mehrere Iterationen ausprobiert und das Beste, was ich mir ausgedacht habe, ist unten: < /p>
Ich baue den Versuch, mit FPDF einen PDF -Bericht in Python zu erstellen. [url=viewtopic.php?t=14917]Ich möchte[/url] einige Daten aus meiner in einem Datenrahmen gespeicherten Analyse entnehmen und Tabellen und Diagramme erstellen. Genau wie das, was Sie in Excel tun würden. Meine Probleme sind, dass ich nicht sehen kann, dass die Header so Text einwickeln, wie Sie es erhalten würden, wenn Sie die Funktion "Wrap Text" in Excel verwenden würden, wenn Sie eine Tabelle erstellen würden. Ich habe mehrere Iterationen ausprobiert und das Beste, was ich mir ausgedacht habe, ist unten: < /p> [code]data1 = { 'Category': ['A', 'B', 'C', 'D'], 'Values': [10.1234, 20.5678, 15.9101, 25.1121] }
data2 = { 'Category': ['E', 'F', 'G', 'H'], 'I expect this to wrap': [30.2345, 40.6789, 35.3456, 45.7890] }
# Create a PDF class class PDF(FPDF): def header(self): self.set_font('Arial', 'B', 12) self.cell(0, 10, 'PDF Report with Charts and Tables', 0, 1, 'C') self.ln(10)
# Calculate column widths index_col_width = max(self.get_string_width(str(index)) for index in df.index) + 10 col_widths = {col: self.get_string_width(col) + 10 for col in df.columns} max_col_width = max(col_widths.values())
for col_name in df.columns: x_start = self.get_x() y_start = self.get_y() self.multi_cell(max_col_width, row_height, col_name, border=1, align='C', fill=True) self.set_xy(x_start + max_col_width, y_start)
self.ln(row_height)
# Data fill = False for index, row in df.iterrows(): fill = not fill self.set_fill_color(240, 240, 240) if fill else self.set_fill_color(255, 255, 255) self.cell(index_col_width, row_height, str(index), border=1, fill=True, align='L') for cell in row: formatted_cell = f"{cell:.2f}" if isinstance(cell, float) else str(cell) self.cell(max_col_width, row_height, formatted_cell, border=1, fill=True, align='L') self.ln(row_height)
# Create a PDF document pdf = PDF() pdf.set_auto_page_break(auto=True, margin=15)
# Add first table pdf.add_page(orientation='L') pdf.chapter_title('Table 1: Category vs Values') pdf.table(df1)
# Add second table pdf.add_page(orientation='L') pdf.chapter_title('Table 2: Category vs Values') pdf.table(df2)
# Create chart for demonstration plt.figure(figsize=(10, 5.63)) # Adjust figure size to fit within page plt.bar(df1['Category'], df1['Values'], color='skyblue') plt.title('Sample Bar Chart') plt.xlabel('Category') plt.ylabel('Values') plt.savefig('bar_chart.png') # Save the figure plt.close()
# Add chart pdf.add_page(orientation='L') pdf.chapter_title('Sample Bar Chart') pdf.image('bar_chart.png', x=10, y=30, w=250) # Adjust the positioning and size as needed
# Output the PDF pdf.output('report_test_2_check.pdf') [/code] Dies gibt mir die folgenden: