asyncphp/paper

无需烦恼的HTML到PDF转换抽象库

0.1.0 2017-01-19 01:29 UTC

This package is auto-updated.

Last update: 2024-09-19 02:10:59 UTC


README

无需烦恼的HTML到PDF转换抽象库。

安装

composer require asyncphp/paper

为了获得最佳效果,您还应该安装PrinceWKHTMLtoDPF。要运行测试,您还需要安装diff-pdf。如果没有安装后者,您将无法运行测试。如果没有安装前者,相关的测试将被跳过,并且无法使用驱动程序。

使用方法

您可以直接使用任何驱动程序

use AsyncInterop\Loop;
use AsyncPHP\Paper\Driver\DomDriver;
use AsyncPHP\Paper\Runner\AmpRunner;

Loop::execute(Amp\wrap(function() use ($sample) {
    $driver = new DomDriver();
    $runner = new AmpRunner();

    $promise = $driver
        ->html($sample)
        ->size("A4")
        ->orientation("portrait")
        ->dpi(300)
        ->render($runner);

    $results = yield $promise;
}));

但是,使用工厂来创建预配置的驱动程序会更简单

use AsyncPHP\Paper\Factory;

$config = [
    "driver" => "dom",

    "dom" => [
        "options" => [
            "fontDir" => __DIR__ . "/fonts",
            // https://github.com/dompdf/dompdf/blob/master/src/Options.php
        ],
    ],

    "prince" => [
        "binary" => "/opt/prince/bin/prince",
        "tempPath" => __DIR__,
        "options" => [
            "--no-compress",
            "--http-timeout" => 10,
            // https://www.princexml.com/doc/command-line/#command-line
        ],
    ],

    "webkit" => [
        "binary" => "/usr/local/bin/wkhtmltopdf",
        "tempPath" => __DIR__,
        "options" => [
            "--grayscale",
            "--javascript-delay" => 500,
            // http://wkhtmltopdf.org/usage/wkhtmltopdf.txt
        ],
    ],

    "runner" => "amp",
];

$factory = new Factory();
$driver = $factory->createDriver($config);
$runner = $factory->createRunner($config);

yield $driver->html($sample)->render($runner);

Paper采用以异步为主的策略。例如,渲染PDF文件这样的操作非常适合并行处理架构。如果您在同步架构中渲染PDF文件遇到困难,可以使用SyncDriver装饰器

$driver = new SyncDriver(new DomDriver());

// ...or with the factory

$driver = $factory->createDriver([
    "driver" => "dom",
    "sync" => true,
]);

驱动程序

以下是当前支持的驱动程序列表

DOMPDF

  • 需要命令行工具: 不需要
  • 支持现代CSS: 不需要
  • 支持现代JS: 不需要
  • 生成矢量文件:
  • 开源 + 免费:

WKHTMLtoDPF

  • 需要命令行工具:
  • 支持现代CSS:
  • 支持现代JS:
  • 生成矢量文件:
  • 开源 + 免费:

Prince

  • 需要命令行工具:
  • 支持现代CSS:
  • 支持现代JS:
  • 生成矢量文件:
  • 开源 + 免费:

运行器

Paper支持AmpReact,用于打包和运行异步代码。您必须安装以下库组之一

Amp

composer require amphp/loop
composer require amphp/parallel
composer require async-interop/event-loop

React

composer require react/event-loop
composer require react/child-process
composer require jeremeamia/superclosure

查看examples文件夹以了解更多有关使用异步驱动程序的信息。

路线图

  • 默认边距设置器
  • 页眉HTML设置器
  • 页脚HTML设置器
  • 更多驱动程序(特别是DocRaptor – Prince的SaaS版本)

版本控制

此库遵循Semver。根据Semver,您将能够升级到该库的任何次要或补丁版本,而无需对公共API进行任何破坏性更改。Semver还要求我们明确定义此库的公共API。

所有具有public可见性的方法都是公共API的一部分。所有其他方法都不是公共API的一部分。在可能的情况下,我们将尝试在次要/补丁版本中保持protected方法的向后兼容性,但如果您正在重写方法,请在升级之前测试您的作品。