imal-h/pdf-box
最新稳定版本:v3.1.5
Composer 安装命令:
composer require imal-h/pdf-box
包简介
The most advanced, driver-based PDF manipulation library for PHP v3.0. Supports Ghostscript, Chrome Headless (HTML to PDF), OpenSSL (Signing), and PDFtk (Forms).
关键字:
README 文档
README
Try out before you actually use it
docker run --pull always -p 9090:80 treineticprojects/demo_opensource:latest
PDFLib v3.1
The most advanced, driver-based PDF manipulation library for PHP.
PDFLib v3.1 is the mature, stable release of the new driver-based architecture. It allows you to switch between powerful backends like Ghostscript, PDFtk, OpenSSL, and Tesseract for different tasks, all under a single, beautiful fluent API.
👉 Try the Interactive Demo | 📚 Read the Documentation
🛡️ Stability Guarantee (v4.0 Ready)
We take backward compatibility seriously.
The v3.1 architecture introduces a strict separation between the API (Facade) and the Execution Logic (Drivers).
- Zero Breaking Changes Promise: This structure allows us to upgrade the underlying engine (e.g., adding Cloud/Async support in v4.0) without changing a single line of your application code.
- Pipeline Pattern: Operations like
rotate()orocr()are queued, decoupling your intent from immediate execution. Use PDFLib with confidence knowing the API is frozen and stable.
🚀 What's New in v3.1?
- OCR Support: Extract text from images and PDFs using Tesseract.
- Redaction: Securely blackout sensitive text.
- Metadata: Read/Write PDF metadata.
- Laravel Wrapper: First-party ServiceProvider and Facade.
- Stateful Chaining: Queue multiple operations (
->rotate()->watermark()->save()).
📦 Requirements
- PHP >= 8.1
- Ghostscript >= 9.16 (for GhostscriptDriver)
- Google Chrome or Chromium (for HTML to PDF)
- pdftk (PDF Toolkit) (for Form Filling)
👉 See Installation Guide for detailed setup instructions on macOS, Ubuntu, and Windows.
🔧 Installation
composer require imal-h/pdf-box
✨ Features
| Feature | Description | Driver |
|---|---|---|
| HTML to PDF | Generate PDF from HTML/CSS | Chrome |
| Digital Sign | Sign PDFs with X.509 Certs | OpenSSL |
| OCR | Extract text from PDF/Images | Tesseract |
| Redact | Blackout sensitive text | Ghostscript |
| Fill Forms | Fill AcroForms (FDF) | PDFtk |
| Inspect Forms | Get Field Names | PDFtk |
| Convert | PDF to Images (PNG/JPG) | Ghostscript |
| Merge | Combine multiple PDFs | Ghostscript |
| Split | Extract pages or ranges | Ghostscript |
| Compress | Optimize PDF file size | Ghostscript |
| Encrypt | Password protection and permissions | Ghostscript |
| Watermark | Overlay text on pages | Ghostscript |
| Rotation | Rotate pages 90/180/270° | Ghostscript |
| Metadata | Edit Title, Author, Keywords | Ghostscript |
| Flatten | Burn forms into content | Ghostscript |
📖 Usage
HTML to PDF (New in v3.0)
Generate PDFs from HTML content or URLs using Chrome Headless.
use ImalH\PDFLib\PDF; // From HTML String PDF::init() ->driver(PDF::DRIVER_CHROME) ->convertFromHtml('<h1>Hello World</h1>', 'output.pdf'); // From URL (Coming Soon) // PDF::init()->driver(PDF::DRIVER_CHROME)->fromUrl('https://google.com')->save('output.pdf');
Digital Signatures (New in v3.0)
Digitally sign PDFs using OpenSSL (requires tecnickcom/tcpdf).
use ImalH\PDFLib\PDF; PDF::init() ->driver(PDF::DRIVER_OPENSSL) ->from('contract.pdf') ->sign('certificate.crt', 'private_key.pem', 'signed_contract.pdf', [ 'info' => [ 'Name' => 'John Doe', 'Location' => 'Colombo, LK', 'Reason' => 'Digital Contract Signature' ] ]);
Note: If you use a self-signed certificate (like in testing), PDF viewers will show "Signature Validity Unknown". For a green "Trusted" checkmark, use a certificate issued by a recognized Certificate Authority (CA) or explicitly trust your self-signed certificate in the viewer's settings.
Laravel Integration
Publish the config file:
php artisan vendor:publish --tag=pdflib-config
Use the Facade in your controllers:
use ImalH\PDFLib\Laravel\Facades\PDF; // The driver is automatically configured from config/pdflib.php PDF::from('upload.pdf')->ocr('output.txt');
OCR (New in v3.1)
Extract text from scanned PDFs or images.
PDF::init() ->driver(PDF::DRIVER_TESSERACT) ->from('scanned_doc.pdf') // Automatically converts PDF to Image internally ->ocr('extracted_text');
Redaction (New in v3.1)
Permanently remove sensitive text.
PDF::init() ->driver(PDF::DRIVER_GHOSTSCRIPT) ->from('invoice.pdf') ->redact('Confidential', 'clean_invoice.pdf');
Interactive Forms
Fill PDF forms programmatically using pdftk.
use ImalH\PDFLib\PDF; // 1. Inspect Fields (Optional) $fields = PDF::init()->driver(PDF::DRIVER_PDFTK)->getFormFields('form_template.pdf'); // returns ['full_name', 'date', ...] // 2. Fill Form PDF::init() ->driver(PDF::DRIVER_PDFTK) ->from('form_template.pdf') ->fillForm([ 'full_name' => 'Imal Perera', 'date' => '2025-01-01' ], 'filled_form.pdf');
The Modern Way (Fluent API)
use ImalH\PDFLib\PDF; // Convert PDF Page 1 to JPEG PDF::init() ->driver(PDF::DRIVER_GHOSTSCRIPT) ->from('document.pdf') ->to('output_folder') ->convert();
The Legacy Way (v2.x Facade)
Existing code continues to work without changes, but is marked as deprecated.
use ImalH\PDFLib\PDFLib; // Legacy Class $pdfLib = new PDFLib(); $pdfLib->setPdfPath("document.pdf") ->setOutputPath("output_folder") ->convert();
Example: Advanced Chain
PDF::init() ->from('source.pdf') ->from('source.pdf') ->encrypt('userPass', 'ownerPass', 'processed.pdf');
(Note: Current driver operations like encrypt, rotate, and watermark are immediate and require a destination path. Fully stateful chaining for these methods is planned for v3.1)
🔮 Roadmap
Want to see what's coming next (v3.1+)? Check out our Roadmap.
🤝 Contributing
We welcome contributions! Please see CONTRIBUTING for details on our new coding standards (Pint, PHPStan) and architecture.
📄 License
The MIT License (MIT). Please see License File.
Initiative of Treinetic (Pvt) Ltd.
统计信息
- 总下载量: 391.17k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 59
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2016-09-05
