shuble/slurpy

pdftk 命令行工具的 PHP 封装,用于 PDF 和 PDF 表单填充

1.0.0 2013-04-14 08:26 UTC

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

Build Status

安装

如果您使用 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.pdfpage_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

完成。

鸣谢

许可证

Slurpy在MIT许可证下发布。有关更多详细信息,请参阅提供的LICENSE文件。