Guiyom commited on
Commit
c257904
·
verified ·
1 Parent(s): 96211e0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -5
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
- html_report = report_generator.generate_report_html(solution_content=final_report, metadata=metadata)
580
- # Optionally, you could write the HTML to a temporary file for download as .html
581
- with tempfile.NamedTemporaryFile(delete=False, suffix='.html') as tmp_file:
582
- tmp_file.write(html_report.encode("utf-8"))
 
583
  tmp_path = tmp_file.name
584
- logging.info(f"handle_generate_report: Report generated at {tmp_path}")
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)