shuble / slurpy
pdftk 命令行工具的 PHP 封装,用于 PDF 和 PDF 表单填充
Requires
- php: >=5.3.0
- symfony/process: *
This package is auto-updated.
Last update: 2024-09-15 00:59:55 UTC
README
Slurpy 是一个用于处理 PDF 的 pdftk 命令行工具的 PHP 封装。这个库主要受到 KnpLabs 的 Snappy 的启发,Snappy 是一个用于从 HTML 生成图像或 PDF 的库。Slurpy 的一些代码直接来自 Snappy。
为了使用 Slurpy,您需要下载适用于 Windows、Mac OSX 或 Linux 的 pdftk。
安装
如果您使用 composer,请在您的 composer.json
中添加以下行
{ "require" : { "shuble/slurpy": "*" } }
然后运行以下命令
wget https://getcomposer.org.cn/composer.phar
php composer.phar install
现在,只需添加自动加载器
<?php require 'vendor/autoload.php';
或者,如果您不使用 composer,则需要引入提供的自动加载器
<?php require 'path/to/slurpy/src/autoload.php';
然后继续安装 pdftk(如果尚未安装)。请参考 pdftk 网站,并根据您的系统获取安装程序或源代码。
就是这样,您就完成了。
简单使用
有关每个操作的更多详细信息,请参阅 pdftk 文档。
创建工厂
Slurpy 包含一个简单的工厂,用于处理 pdftk 的简单操作。每次调用工厂方法都会返回一个 Slurpy 实例,然后您只需在 Slurpy 实例上调用 generate
方法来处理操作。
<?php // Create a new factory instance, give it your path to pdftk binary $factory = new \Shuble\Slurpy\Factory('/path/to/pdftk'); $slurpy = $factory->generateFdf('path/to/input.pdf', 'path/to/output.fdf'); $slurpy->generate();
连接 PDF 文件
连接操作将输入 PDF 中的页面组合成一个新的 PDF。使用连接合并 PDF 页面或从文档中拆分 PDF 页面。您还可以使用它来旋转 PDF 页面。新 PDF 中的页面顺序由输入数组中的顺序指定。
<?php use Shuble\Slurpy\Operation\OperationArgument\PageRange; $inputs = array( '/path/to/file1.pdf', '/path/to/file2.pdf', array( 'filepath' => '/path/to/file3.pdf', 'password' => 'pa$$word', 'start_page' => 1, 'end_page' => 'end', 'qualifier' => PageRange::QUALIFIER_ODD, 'rotation' => PageRange::ROTATION_EAST, ) ); $output = '/path/to/output.pdf'; $slurpy = $factory->cat($inputs, $output);
现在,/path/to/ouput.pdf
包含了 3 个 PDF 文件,其中第三个 PDF 文件仅将奇数页面旋转到东边。
打乱 PDF 文件
打乱操作将输入 PDF 中的页面整理成一个新的 PDF。与连接操作类似,但它一次处理一个页面范围来组装输出 PDF。如果一个范围用完了页面,它会继续处理剩余的范围。这个功能是为了帮助整理扫描纸质文档后的 PDF 页面而设计的。
<?php use Shuble\Slurpy\Operation\OperationArgument\PageRange; $inputs = array( '/path/to/file1.pdf', '/path/to/file2.pdf', array( 'filepath' => '/path/to/file3.pdf', 'password' => 'pa$$word', 'start_page' => 1, 'end_page' => 'end', 'qualifier' => PageRange::QUALIFIER_ODD, 'rotation' => PageRange::ROTATION_EAST, ) ); $output = '/path/to/output.pdf'; // Creates a Slurpy instance $slurpy = $factory->shuffle($inputs, $output);
背景
背景操作将 PDF 水印应用到单个输入 PDF 的背景上。它仅使用背景 PDF 的第一页,并将其应用到输入 PDF 的每一页。该页根据需要缩放和旋转以适应输入页。如果输入 PDF 没有透明背景(例如,从页面扫描创建的 PDF),则最终背景将不可见——请使用 stamp 操作代替。
如果您想使用多背景操作,也可以传递第四个参数 $multi
。
multibackground
与背景操作相同,但它将背景 PDF 的每一页应用到输入 PDF 的对应页。如果输入 PDF 的页面比 stamp PDF 多,则最终的 stamp 页在输入 PDF 中重复这些剩余的页面。
<?php $input = '/path/to/input.pdf'; // or array('filepath' => '/path/to/input.pdf', 'password' => 'S3cr3t'); $background = '/path/to/background.pdf'; $output = '/path/to/output.pdf'; $multi = false // [Default], Or true for multibackground operation // Creates a Slurpy instance $slurpy = $factory->background($input, $background, $output, $multi);
爆炸
《burst》操作将单个输入PDF文档拆分为单独的页面。如果指定了printf风格的格式字符串,则指定结果页面的命名。例如,如果您向Slurpy提供输出为page_%02d.pdf
,则结果页面将是page_01.pdf
、page_02.pdf
等等。
注意,您可能需要将
output
指定为完整路径,例如/path/to/pdfs/page_%04d.pdf
<?php $input = '/path/to/input.pdf'; // or array('filepath' => '/path/to/input.pdf', 'password' => 'S3cr3t'); $output = '/path/to/folder/pg_%02d.pdf'; $slurpy = $factory->burst($input, $output);
生成fdf
《generateFdf》操作读取单个输入PDF文件,并生成适合fillForm
操作的FDF文件。它使用输出文件名保存此FDF文件。
<?php $input = '/path/to/input.pdf'; // or array('filepath' => '/path/to/input.pdf', 'password' => 'S3cr3t'); $output = '/path/to/folder/output.fdf'; $slurpy = $factory->generateFdf($input, $output);
填写表单
《fillForm》操作使用给定的fdf或xfdf数据文件填写单个输入PDF表单。默认情况下,在填写表单后,输出PDF字段保持活动状态。您可以通过将第四个参数指定为true
来禁用输出PDF中的字段,这将使生成的PDF文件flatten
。
注意,Slurpy很快将能够使用简单的键/值对作为数据来填写表单,而不是使用fdf或xfdf文件。
<?php $input = '/path/to/input.pdf'; // or array('filepath' => '/path/to/input.pdf', 'password' => 'S3cr3t'); $data = '/path/to/data.fdf'; // or data.xfdf $output = '/path/to/folder/output.fdf'; $slurpy = $factory->fillForm($input, $data, $output); // Or to flatten the resulting pdf. $slurpy = $factory->fillForm($input, $data, $output, true);
单元测试
运行以下命令
phpunit
完成。
鸣谢
- dorian ALKOUM - baikunz@gmail.com
许可证
Slurpy在MIT许可证下发布。有关更多详细信息,请参阅提供的LICENSE文件。