Coverage for src / tracekit / reporting / renderers / pdf.py: 100%

20 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-01-11 23:04 +0000

1"""Enhanced PDF report generation. 

2 

3High-quality PDF report generation with embedded plots, metadata, 

4and PDF/A compliance for archival (enhancements to existing PDF module). 

5 

6 

7References: 

8 - REPORT-008: PDF Report Generation 

9""" 

10 

11from __future__ import annotations 

12 

13from dataclasses import dataclass 

14from typing import TYPE_CHECKING, Any 

15 

16if TYPE_CHECKING: 

17 from tracekit.reporting.core import Report 

18 

19 

20@dataclass 

21class PDFRenderer: 

22 """PDF report renderer. 

23 

24 Attributes: 

25 dpi: Plot rendering DPI (default 300 for print quality). 

26 embed_fonts: Embed fonts for consistency (default True). 

27 vector_graphics: Use vector graphics for plots (default True). 

28 table_of_contents: Include TOC (default True). 

29 pdfa_compliance: Generate PDF/A-1b output (default False). 

30 page_numbering: Include page numbers (default True). 

31 

32 References: 

33 REPORT-008: PDF Report Generation Engine 

34 """ 

35 

36 dpi: int = 300 

37 embed_fonts: bool = True 

38 vector_graphics: bool = True 

39 table_of_contents: bool = True 

40 pdfa_compliance: bool = False 

41 page_numbering: bool = True 

42 

43 

44def render_to_pdf( 

45 report: Report, 

46 output_path: str | None = None, 

47 **kwargs: Any, 

48) -> bytes: 

49 """Render report to PDF. 

50 

51 Args: 

52 report: Report object to render. 

53 output_path: Optional output path (if None, returns bytes). 

54 **kwargs: Additional PDF rendering options. 

55 

56 Returns: 

57 PDF data as bytes (if output_path is None). 

58 

59 Example: 

60 >>> from tracekit.reporting.core import Report, ReportConfig 

61 >>> report = Report(config=ReportConfig(title="Test Report")) 

62 >>> pdf_bytes = render_to_pdf(report) 

63 

64 References: 

65 REPORT-008: PDF Report Generation Engine 

66 """ 

67 # Import existing PDF module 

68 from tracekit.reporting.pdf import generate_pdf_report 

69 

70 # Merge kwargs with defaults 

71 renderer = PDFRenderer(**kwargs) 

72 

73 # Generate PDF 

74 pdf_bytes = generate_pdf_report( 

75 report, 

76 dpi=renderer.dpi, 

77 embed_fonts=renderer.embed_fonts, 

78 vector_graphics=renderer.vector_graphics, 

79 table_of_contents=renderer.table_of_contents, 

80 pdfa_compliance=renderer.pdfa_compliance, 

81 ) 

82 

83 # Save if path provided 

84 if output_path: 

85 with open(output_path, "wb") as f: 

86 f.write(pdf_bytes) 

87 

88 return pdf_bytes 

89 

90 

91__all__ = [ 

92 "PDFRenderer", 

93 "render_to_pdf", 

94]