benjivm/merge-pdf

合并多个PDF文件的库

1.0.1 2024-06-10 17:30 UTC

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 中的问题。长期解决方案是切换到不同的后端。非常欢迎建议!