v0.3.0 Release
This release introduces the Unified Pdf API - one seamless interface for extracting, creating, and editing PDFs. Plus comprehensive PDF creation capabilities with tables, graphics, forms, and security.
🎯 Unified Pdf API (Extract + Create + Edit)
- Single API for all operations
Pdf::open("input.pdf")- Open existing PDF for reading and editingPdf::from_markdown(content)- Create new PDF from MarkdownPdf::from_html(content)- Create new PDF from HTMLPdf::from_text(content)- Create new PDF from plain textPdf::from_image(path)- Create PDF from image file
- DOM-like page navigation -
pdf.page(0)for querying and modifying content - Fluent builder pattern -
PdfBuilderfor advanced configuration - Seamless save -
pdf.save("output.pdf")orpdf.save_encrypted()
📄 PDF Creation
- DocumentBuilder API - Fluent PDF generation
- Page sizing (Letter, A4, custom dimensions)
- Text rendering with Base14 fonts and styling
- Image embedding (JPEG/PNG) with positioning
- Table Rendering -
TableRendererfor styled tables- Headers, borders, cell spans, alternating row colors
- Column width control (fixed, percentage, auto)
- Cell alignment and padding
- Graphics API - Advanced visual effects
- RGB, CMYK, grayscale colors
- Linear and radial gradients
- Tiling patterns with presets
- Blend modes and transparency (ExtGState)
- Page Templates - Reusable page elements
- Headers and footers with placeholders
- Page numbering formats
- Text-based watermarks
- Barcode Generation (requires
barcodesfeature)- QR codes with configurable size and error correction
- Code128, EAN-13, UPC-A, Code39, ITF barcodes
✏️ PDF Editing
- Editor API - DOM-like editing with round-trip preservation
- Content addition without breaking existing structure
- Resource management for fonts and images
- Annotation Support - Full read/write for all types
- Text markup: highlights, underlines, strikeouts, squiggly
- Notes: sticky notes, comments, popups
- Shapes: rectangles, circles, lines, polygons, polylines
- Drawing: ink/freehand annotations
- Stamps: standard and custom stamps
- Special: file attachments, redactions, carets
- Form Fields - Interactive form creation
- Text fields (single/multiline, password, comb)
- Checkboxes, radio button groups
- Dropdown and list boxes
- Push buttons with actions
- Form flattening
- Link Annotations - Navigation support (external URLs, internal pages)
- Outline Builder - Bookmark/TOC creation (hierarchical, styled)
- PDF Layers - Optional Content Groups (OCG) management
🔒 Security & Compliance
- Encryption on Write
- AES-256 (V=5, R=6) - Modern 256-bit encryption
- AES-128 (V=4, R=4) - Modern 128-bit encryption
- RC4 variants for legacy support
- Granular permission controls (print, copy, modify, annotate)
- Digital Signatures (foundation, requires
signaturesfeature)- ByteRange calculation for signature placeholders
- PKCS#7/CMS signature structure support
- X.509 certificate parsing
- PDF/A Validation - ISO 19005 compliance (A-1, A-2, A-3)
- PDF/X Validation - ISO 15930 print production compliance
- PDF/UA Validation - ISO 14289 accessibility compliance
📚 Document Features
- Page Labels - Custom page numbering (Roman, letters, prefixes)
- XMP Metadata - Dublin Core properties, custom namespaces
- Embedded Files - File attachments with MIME types
- Linearization - Web-optimized PDFs for streaming
- Text Search - Regex patterns with position tracking
- Page Rendering (requires
renderingfeature) - Render to PNG/JPEG - Office Conversion (requires
officefeature)- DOCX, XLSX, PPTX to PDF conversion
- Auto-detection and OfficeConfig customization
🐛 Bug Fixes
- Outline action handling - Correctly dereference actions indirectly referenced by outline items (PR #16 by @jvantuyl)
🏆 Community Contributors
🥇 @jvantuyl - PR #16 fixing outline action dereferencing! Uncovered a subtle PDF spec detail (Section 9.4.1) - some PDFs embed actions directly while others use indirect references. Your comprehensive tests ensure this won't regress. 🔍✨
🙏 @mert-kurttutan - Thanks for honest feedback on README clutter (Issue #15). Your perspective as a new user helped us realize we were overwhelming people. The resulting documentation cleanup makes PDFOxide more approachable. 📚
✅ Verification
- All library and integration tests pass
- Format checks and clippy pass
- Security audits pass
- Tested on Ubuntu, macOS, Windows
📥 Installation
Rust (crates.io)
cargo add pdf_oxidePython (PyPI)
pip install pdf_oxideRelease Date: January 10, 2026
Branch: main
Tag: v0.3.0
Closes: #15, #16