Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -565,6 +565,20 @@ class ReportGenerator:
|
|
| 565 |
logging.info("ReportGenerator: HTML report generated successfully.")
|
| 566 |
return full_html
|
| 567 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 568 |
def handle_generate_report(query_name: str, user_name: str, final_report: str):
|
| 569 |
try:
|
| 570 |
report_generator = ReportGenerator()
|
|
@@ -576,12 +590,13 @@ def handle_generate_report(query_name: str, user_name: str, final_report: str):
|
|
| 576 |
}
|
| 577 |
if len(final_report) > MAX_MESSAGE_LENGTH:
|
| 578 |
final_report = compress_text(final_report, MAX_MESSAGE_LENGTH)
|
| 579 |
-
|
| 580 |
-
|
| 581 |
-
|
| 582 |
-
|
|
|
|
| 583 |
tmp_path = tmp_file.name
|
| 584 |
-
logging.info(f"handle_generate_report:
|
| 585 |
return "Report generated successfully.", gr.update(value=tmp_path, visible=True)
|
| 586 |
except Exception as e:
|
| 587 |
logging.error(f"handle_generate_report error: {e}", exc_info=True)
|
|
|
|
| 565 |
logging.info("ReportGenerator: HTML report generated successfully.")
|
| 566 |
return full_html
|
| 567 |
|
| 568 |
+
def generate_report_pdf(self, solution_content: str, metadata: dict = None) -> bytes:
|
| 569 |
+
"""
|
| 570 |
+
Generate a PDF report by first creating the HTML report and converting it with xhtml2pdf.
|
| 571 |
+
"""
|
| 572 |
+
# Create the HTML content
|
| 573 |
+
html_report = self.generate_report_html(solution_content, metadata)
|
| 574 |
+
# Convert the HTML to PDF using xhtml2pdf (pisa)
|
| 575 |
+
pdf_buffer = io.BytesIO()
|
| 576 |
+
pisa_status = pisa.CreatePDF(html_report, dest=pdf_buffer)
|
| 577 |
+
if pisa_status.err:
|
| 578 |
+
raise Exception("Error converting HTML to PDF")
|
| 579 |
+
logging.info("ReportGenerator: PDF report generated successfully from HTML.")
|
| 580 |
+
return pdf_buffer.getvalue()
|
| 581 |
+
|
| 582 |
def handle_generate_report(query_name: str, user_name: str, final_report: str):
|
| 583 |
try:
|
| 584 |
report_generator = ReportGenerator()
|
|
|
|
| 590 |
}
|
| 591 |
if len(final_report) > MAX_MESSAGE_LENGTH:
|
| 592 |
final_report = compress_text(final_report, MAX_MESSAGE_LENGTH)
|
| 593 |
+
# Get the PDF content from the HTML report
|
| 594 |
+
pdf_bytes = report_generator.generate_report_pdf(solution_content=final_report, metadata=metadata)
|
| 595 |
+
# Write the PDF content to a temporary file for download.
|
| 596 |
+
with tempfile.NamedTemporaryFile(delete=False, suffix='.pdf') as tmp_file:
|
| 597 |
+
tmp_file.write(pdf_bytes)
|
| 598 |
tmp_path = tmp_file.name
|
| 599 |
+
logging.info(f"handle_generate_report: PDF report generated at {tmp_path}")
|
| 600 |
return "Report generated successfully.", gr.update(value=tmp_path, visible=True)
|
| 601 |
except Exception as e:
|
| 602 |
logging.error(f"handle_generate_report error: {e}", exc_info=True)
|