- Add ReportLab template renderer with JSON-based template system - Implement template schema validation and helper functions - Add database migration for template_json columns - Update visual editor to generate ReportLab JSON alongside HTML/CSS - Maintain backward compatibility with legacy templates - Add comprehensive migration documentation BREAKING CHANGE: Existing PDF templates need to be saved again through the visual editor to generate the new template_json format. Templates will continue to work using the legacy fallback generator until saved.
8.1 KiB
PDF Template Library Alternatives Research
Current Solution Analysis
Current Stack
- Visual Editor: Konva.js (canvas-based drag-and-drop editor)
- PDF Generation: WeasyPrint (HTML/CSS to PDF)
- Template Storage: Database (HTML, CSS, JSON design state)
- Custom Code: ~3000+ lines of JavaScript + Python for editor and generation
Current Issues
- Maintenance burden: Significant custom code for editor, template generation, page size handling
- Page size bugs: Hardcoded dimensions, DPI conversion complexity
- Limited CSS support: WeasyPrint doesn't support all modern CSS features
- Preview accuracy: Browser preview (96 DPI) vs PDF (72 DPI) conversion issues
Alternative Solutions
Option 1: ReportLab (Python-native PDF generation)
Pros:
- Very reliable and mature (used in production for decades)
- Precise control over layout and positioning
- No HTML/CSS parsing needed
- Excellent documentation and community support
- Built-in support for all page sizes
- Fast generation
Cons:
- No HTML/CSS support (requires rewriting templates)
- No drag-and-drop editor available
- Requires learning ReportLab's API
- Layout code is more verbose
- Would need to build visual editor from scratch or use a different approach
Integration Effort: High (would need to rewrite all templates and possibly build new editor) Maintenance: Low (mature library, less custom code) Cost: Free (open source)
Rating: ⭐⭐⭐ (Good for reliability, but requires significant rewrite)
Option 2: xhtml2pdf/pisa
Pros:
- HTML/CSS to PDF (similar to WeasyPrint)
- Simpler API than WeasyPrint
- Based on ReportLab underneath (reliable rendering)
- Lighter weight than WeasyPrint
Cons:
- Limited CSS support (similar to WeasyPrint)
- Less active development
- Still requires custom editor
- Same DPI/preview issues as WeasyPrint
Integration Effort: Medium (can reuse HTML/CSS templates, but need to test compatibility) Maintenance: Medium (still need custom editor code) Cost: Free (open source)
Rating: ⭐⭐ (Marginal improvement over WeasyPrint)
Option 3: Puppeteer/Pyppeteer (Headless Chrome)
Pros:
- Full modern CSS support (uses Chrome's rendering engine)
- Accurate preview (same rendering as browser)
- Supports JavaScript in templates
- Excellent HTML/CSS compatibility
- Active development
Cons:
- Requires Chrome/Chromium installation (larger deployment size)
- Slower than WeasyPrint (needs to start browser process)
- Higher memory usage
- May have issues with fonts/webfonts
- Still requires custom editor
Integration Effort: Medium (can reuse HTML/CSS templates, minimal changes needed) Maintenance: Medium (still need custom editor, but better CSS support) Cost: Free (open source)
Rating: ⭐⭐⭐⭐ (Good CSS support, but deployment overhead)
Option 4: Commercial APIs (PDF-API.io, CraftMyPDF, DocRaptor)
PDF-API.io
Pros:
- Built-in drag-and-drop template designer
- REST API integration (no library management)
- Handles page sizes automatically
- Preview functionality built-in
- Professional support available
Cons:
- Monthly cost ($29-299+/month depending on usage)
- External dependency (API calls)
- Template storage on their servers (or via API)
- Less control over rendering
- Requires internet connectivity
- Vendor lock-in
Integration Effort: Low-Medium (API-based, but need to redesign template storage) Maintenance: Very Low (they handle rendering) Cost: $$ (Pay-per-use or subscription)
Rating: ⭐⭐⭐⭐ (Good if budget allows, reduces maintenance significantly)
CraftMyPDF.com
Pros:
- Drag-and-drop template editor
- REST API
- Expressions and advanced formatting
- Template management via API
Cons:
- Similar to PDF-API.io (cost, external dependency)
- Vendor lock-in
- Requires internet connectivity
Integration Effort: Low-Medium Maintenance: Very Low Cost: $$ (Subscription-based)
Rating: ⭐⭐⭐⭐ (Similar to PDF-API.io)
DocRaptor (by Expected Behavior)
Pros:
- High-quality HTML to PDF conversion
- Based on PrinceXML engine
- Good CSS support
- REST API
Cons:
- No built-in template editor
- Still requires custom editor
- Monthly cost ($15-500+/month)
- External dependency
Integration Effort: Medium (API-based, but still need editor) Maintenance: Medium (still need editor, but better rendering) Cost: $$ (Subscription-based)
Rating: ⭐⭐⭐ (Better rendering, but still need custom editor)
Option 5: Keep Current + Improvements
Pros:
- Already implemented and working
- Full control over features
- No external dependencies
- No additional costs
Cons:
- Maintenance burden remains
- Need to fix bugs (page sizes, DPI issues)
- Limited CSS support from WeasyPrint
- Custom code complexity
Integration Effort: Low (just fix existing issues) Maintenance: High (custom code to maintain) Cost: Free (but developer time)
Rating: ⭐⭐⭐ (Fixes can make it work, but maintenance burden remains)
Recommendation Matrix
| Solution | Integration Effort | Maintenance Burden | Feature Completeness | Cost | Overall Rating |
|---|---|---|---|---|---|
| ReportLab | High | Low | Medium (no editor) | Free | ⭐⭐⭐ |
| xhtml2pdf | Medium | Medium | Medium | Free | ⭐⭐ |
| Puppeteer/Pyppeteer | Medium | Medium | High | Free | ⭐⭐⭐⭐ |
| PDF-API.io | Low-Medium | Very Low | High | $$ | ⭐⭐⭐⭐ |
| CraftMyPDF | Low-Medium | Very Low | High | $$ | ⭐⭐⭐⭐ |
| DocRaptor | Medium | Medium | High | $$ | ⭐⭐⭐ |
| Current + Fixes | Low | High | Medium | Free | ⭐⭐⭐ |
Recommended Path Forward
Short Term (Fix Current Issues)
- ✅ Fix page_size extraction in quote preview
- ✅ Add wrapper dimension updates in PDF generation
- ✅ Add comprehensive logging
- Document the current solution better
- Create unit tests for page size handling
Medium Term (Evaluate Migration)
If maintenance becomes too burdensome or new features are needed:
Best Option for Feature-Rich Solution:
- Puppeteer/Pyppeteer if you need full CSS support and can handle deployment overhead
- Keeps HTML/CSS approach, minimal template changes needed
- Better preview accuracy (same rendering engine)
Best Option for Maintenance Reduction:
- PDF-API.io or CraftMyPDF if budget allows
- Eliminates most custom PDF generation code
- Built-in editor reduces JavaScript maintenance
- Monthly cost but saves significant developer time
Best Option for Reliability:
- ReportLab if you're willing to rewrite templates
- Most reliable, but requires significant refactoring
- Would need new editor approach (form-based rather than visual)
Long Term Considerations
-
If staying with current solution:
- Refactor editor code into reusable components
- Extract page size logic into a service class
- Create better abstractions for template generation
- Consider TypeScript for JavaScript to catch more bugs
-
If migrating to Puppeteer:
- Can reuse most templates with minimal changes
- Better CSS support enables more design flexibility
- Preview and PDF will match perfectly (same engine)
- Need to handle Chrome deployment in Docker
-
If using Commercial API:
- Plan for vendor lock-in
- Ensure API reliability/SLA meets requirements
- Consider backup generation method
- Factor ongoing costs into budget
Conclusion
For immediate needs: Fix the current solution (already done). It works, just needs the bugs fixed.
For long-term maintainability: Consider Puppeteer/Pyppeteer if you want better CSS support without vendor lock-in, or commercial API if budget allows and you want to minimize maintenance.
For maximum reliability: ReportLab is the gold standard, but requires significant refactoring.
The current fixes should resolve the immediate issues. Evaluate migration based on:
- How often new features are needed
- Developer time spent on PDF-related bugs
- Whether CSS limitations are blocking features
- Budget for commercial solutions