WebKit Report Service
Converts SVG reports to PDF and PNG formats using WKWebView.
Implementation
Located in Minuta/Sources/Services/WebKitReportService.swift.
Protocol
protocol ReportService: Sendable {
func generatePDF(
records: [TimeRecord],
tags: [Tag],
options: ReportOptions
) async throws -> Data
func generateSVG(
records: [TimeRecord],
tags: [Tag],
options: ReportOptions
) async throws -> Data
func generatePNG(
records: [TimeRecord],
tags: [Tag],
options: ReportOptions
) async throws -> Data
} Conversion Pipeline
- Build ReportData from records
- Render SVG via 307-svg-renderer
- Load SVG into WKWebView
- Convert:
- PDF:
webView.pdf() - PNG:
webView.takeSnapshot()at 2x resolution
- PDF:
Error Types
enum ReportError: Error {
case renderingFailed(String)
case pdfGenerationFailed
case svgGenerationFailed
case pngGenerationFailed
case invalidData(String)
} Usage
Called from ShareExportSheet when user selects a format:
- Preview loads in sheet
- Save/Share uses generated data
Related
- 307-svg-renderer - SVG generation
- 306-report - Data models
- 402-ios - UI integration