ttbooking/phpgs

PHP Wrapper for Ghost Script

2.0.2 2024-03-13 08:48 UTC

This package is auto-updated.

Last update: 2024-09-13 09:51:20 UTC


README

本包提供 GhostScript 的 PHP Wrapper。它还提供了一个简单的工具用于 PDF 页面的拆分/合并。

安装

composer require ttbooking/phpgs

用法

执行器

对于通用用途,将 执行器 作为 Ghost Script 的通用包装器

use Webit\PHPgs\ExecutorBuilder;
use Webit\PHPgs\Input;
use Webit\PHPgs\Output;
use Webit\PHPgs\Options\Options;
use Webit\PHPgs\Options\Device;

/** @var \Webit\PHPgs\Executor $executor */
$executor = ExecutorBuilder::create()->setGhostScriptBinary('/path/to/the/binary/of/gs')->build();

$input = Input::singleFile('/path/to/your/input_file');
$output = Output::create('/path/to/your/tempdir/output.pdf');

// Please note Options class is immutable (every change creates a new instance)
$options = Options::create(Device::pdfWrite())
            // set predefined options (see Options class for all predefined options)
            ->withNoTransparency()
            ->useCropBox()
            ->useCIEColor()
            // change any option you need
            ->withOption('-dWhatever', 'value of whatever');
            
$executor->execute($input, $output, $options);

PDF操作器

PDF操作器 提供了简化的 PDF 拆分/合并接口

合并

use Webit\PHPgs\Pdf\PdfManipulator;

$pdfManipulator = new PdfManipulator($executor);

$input = Input::multipleFiles(
    array(
        'one.pdf',
        'two.pdf',
        'three.pdf'
    )
);

$output = Output::create('/temp-dir/random-5322/output.pdf');

$customOptions = Options::create(); // optional

$pdfManipulator->merge($input, $output, $customOptions);

拆分页面

use Webit\PHPgs\Pdf\PdfManipulator;

$pdfManipulator = new PdfManipulator($executor);

$input = Input::singleFile('multipage.pdf');

// multi page output
$output = Output::create('/temp-dir/random-12322/output-%d.pdf');

// single page output
// $output = Output::create('/temp-dir/random-12322/output.pdf');

$customOptions = Options::create(); // optional

// splitting pages from 5 to 10
$pdfManipulator->split($input, $output, 5, 10, $customOptions);
// produces output-5.pdf, output-6.pdf, ...

// splitting pages from 5 to the last page
$pdfManipulator->split($input, $output, 5, null, $customOptions);
// produces output-5.pdf, output-6.pdf, ...

// splitting pages from 1 to 10
$pdfManipulator->split($input, $output, null, 10, $customOptions);
// produces output-1.pdf, output-2.pdf, ..., output-10.pdf

注意:为了保证多页面拆分能够正确工作,输出必须始终引用一个 目录。

测试

docker-compose run --rm php5 ./vendor/bin/phpunit