go-pdf
Go PDF rendering library using Gopdf graphics.
Project Structure
go-pdf/
├── pkg/
│ └── gopdf/ # Core library
│ ├── renderer.go # PDF rendering functionality
│ └── reader.go # PDF reading functionality
├── cmd/ # Example programs
│ ├── example.go # Basic usage example
│ ├── circle_comparison.go # Circle drawing comparison
│ ├── render_demo.go # Rendering demonstration
│ ├── render_pdf.go # PDF rendering with layer merging
│ ├── render_pdf_complete.go # Complete PDF rendering demo
│ └── merge_layers.go # Layer merging utility
├── go.mod
├── go.sum
├── test.pdf # Test PDF file
└── README.md
Features
- PDF Rendering: Render graphics to PDF using Gopdf
- PNG Export: Export rendered content as PNG images
- Layer Merging: Merge multiple image layers
- Image to PDF: Convert images to PDF format
- High DPI Support: Configurable DPI for high-quality output
- Image Filters: Support for FlateDecode, DCTDecode, ASCIIHexDecode, RunLengthDecode
- Font Loader: Cross-platform font search and management with CJK support
- Rendering Comparison: Tools to compare rendering quality with Poppler
Installation
Usage
Basic Example
package main import ( "go-pdf/pkg/gopdf" ) func main() { // Create renderer renderer := gopdf.NewPDFRenderer(600, 400) renderer.SetDPI(150) // Render to PDF renderer.RenderToPDF("output.pdf", func(ctx gopdf.Context) { ctx.SetSourceRGB(0.2, 0.4, 0.8) ctx.Rectangle(50, 50, 200, 100) ctx.Fill() }) }
Running Examples
# Basic example go run cmd/example.go # Render demo go run cmd/render_demo.go # Render PDF with layer merging go run cmd/render_pdf.go # Merge layers go run cmd/merge_layers.go
API Reference
PDFRenderer
NewPDFRenderer(width, height float64) *PDFRenderer
Creates a new PDF renderer with specified dimensions (in points).
SetDPI(dpi float64)
Sets the rendering DPI (default: 72).
RenderToPDF(outputPath string, drawFunc func(ctx gopdf.Context)) error
Renders graphics to a PDF file.
RenderToPNG(outputPath string, drawFunc func(ctx gopdf.Context)) error
Renders graphics to a PNG file.
CreatePDFFromImage(imagePath, outputPath string) error
Creates a PDF from an image file.
PDFReader
NewPDFReader(pdfPath string) *PDFReader
Creates a new PDF reader.
RenderPageToPNG(pageNum int, outputPath string, dpi float64) error
Renders a PDF page to PNG .
RenderPageToImage(pageNum int, dpi float64) (image.Image, error)
Renders a PDF page to an image.Image.
Dependencies
Recent Improvements
Image Filters
- ✅ FlateDecode (zlib decompression)
- ✅ DCTDecode (JPEG decoding)
- ✅ ASCIIHexDecode
- ✅ RunLengthDecode
- ✅ PNG Predictor support
Font Handling
- ✅ Cross-platform font search (Windows/macOS/Linux)
- ✅ Font substitution mechanism
- ✅ CJK font support
- ✅ Font fallback chains
- ✅ Font metrics caching
Testing Tools
- ✅ Rendering comparison with Poppler
- ✅ PSNR/MSE quality metrics
- ✅ Difference image generation
- ✅ Batch comparison support
Testing
# Run unit tests cd test go test -v # Run rendering comparison (requires Poppler tools) go run compare_rendering.go ../test.pdf # Run benchmarks go test -bench=. -benchmem
License
MIT License