马一丁

Optimize PDF Export Logic When Using report_engine_only.py

@@ -324,10 +324,7 @@ def save_pdf(document_ir_path: str, query: str) -> Optional[str]: @@ -324,10 +324,7 @@ def save_pdf(document_ir_path: str, query: str) -> Optional[str]:
324 from ReportEngine.renderers import PDFRenderer 324 from ReportEngine.renderers import PDFRenderer
325 renderer = PDFRenderer() 325 renderer = PDFRenderer()
326 326
327 - # 生成PDF字节流  
328 - pdf_bytes = renderer.render_to_bytes(document_ir, optimize_layout=True)  
329 -  
330 - # 保存PDF文件 327 + # 准备输出路径
331 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") 328 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
332 query_safe = "".join( 329 query_safe = "".join(
333 c for c in query if c.isalnum() or c in (" ", "-", "_") 330 c for c in query if c.isalnum() or c in (" ", "-", "_")
@@ -340,13 +337,24 @@ def save_pdf(document_ir_path: str, query: str) -> Optional[str]: @@ -340,13 +337,24 @@ def save_pdf(document_ir_path: str, query: str) -> Optional[str]:
340 pdf_filename = f"final_report_{query_safe}_{timestamp}.pdf" 337 pdf_filename = f"final_report_{query_safe}_{timestamp}.pdf"
341 pdf_path = pdf_dir / pdf_filename 338 pdf_path = pdf_dir / pdf_filename
342 339
343 - pdf_path.write_bytes(pdf_bytes) 340 + # 使用 render_to_pdf 方法直接生成PDF文件(与regenerate_latest_pdf.py一致)
  341 + logger.info(f"开始渲染PDF: {pdf_path}")
  342 + result_path = renderer.render_to_pdf(
  343 + document_ir,
  344 + pdf_path,
  345 + optimize_layout=True
  346 + )
344 347
  348 + # 显示文件大小
  349 + file_size = result_path.stat().st_size
  350 + size_mb = file_size / (1024 * 1024)
345 logger.success(f"✓ PDF 已保存: {pdf_path}") 351 logger.success(f"✓ PDF 已保存: {pdf_path}")
346 - return str(pdf_path) 352 + logger.info(f" 文件大小: {size_mb:.2f} MB")
  353 +
  354 + return str(result_path)
347 355
348 except Exception as e: 356 except Exception as e:
349 - logger.error(f"❌ PDF 生成失败: {e}") 357 + logger.exception(f"❌ PDF 生成失败: {e}")
350 return None 358 return None
351 359
352 360