benjivm / merge-pdf
合并多个PDF文件的库
1.0.1
2024-06-10 17:30 UTC
Requires
- php: ^7.1||^8.0
- setasign/fpdi: ^2
- tecnickcom/tcpdf: ^6.2.22
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.9
- phpspec/prophecy: ^1.19
- phpunit/phpunit: ^10
- smalot/pdfparser: ~0.13
- symfony/var-dumper: ^7.1
Conflicts
This package is auto-updated.
Last update: 2024-09-10 18:00:10 UTC
README
原始PHP库 hanneskod/libmergepdf 的个人项目分支,用于合并多个PDF文件。使用风险自负。
安装
composer require benjivm/merge-pdf
用法
将 bar.pdf 的前十页添加到 foo.pdf
use Benjivm\MergePdf\Merger; use Benjivm\MergePdf\Pages; $merger = new Merger; $merger->addFile('foo.pdf'); $merger->addFile('bar.pdf', new Pages('1-10')); $createdPdf = $merger->merge();
从迭代器批量添加文件
use Benjivm\MergePdf\Merger; $merger = new Merger; $merger->addIterator(['A.pdf', 'B.pdf']); $createdPdf = $merger->merge();
合并1.5版本及以后的PDF文件
默认的 FPDI
驱动无法处理1.5版本或更高版本的压缩PDF文件。可以通过使用稍微实验性的 TCPDI
驱动来规避此限制。
use Benjivm\MergePdf\Merger; use Benjivm\MergePdf\Driver\TcpdiDriver; $merger = new Merger(new TcpdiDriver);
使用不可变合并器
可以通过直接使用 driver
来实现不可变。
use Benjivm\MergePdf\Driver\Fpdi2Driver; use Benjivm\MergePdf\Source\FileSource; use Benjivm\MergePdf\Pages; $merger = new Fpdi2Driver; $createdPdf = $merger->merge( new FileSource('foo.pdf'), new FileSource('bar.pdf', new Pages('1-10')) );
已知问题
- 在合并时,页面内容流之外的超链接和其他内容将被删除。这是由于FPDI的限制,并且无法使用当前策略解决。更多信息请参阅 FPDI。
- TCPDI(在 TcpdiDriver 中用于合并具有新功能的PDF文件)似乎没有得到维护。这使得对于某些类型的文件,合并变得脆弱,错误信息往往毫无帮助。本包无法修复 TCPDI 中的问题。长期解决方案是切换到不同的后端。非常欢迎建议!