asyncphp / paper
无需烦恼的HTML到PDF转换抽象库
0.1.0
2017-01-19 01:29 UTC
Requires
- php: ^5.6|^7.0
Requires (Dev)
- amphp/loop: dev-master
- amphp/parallel: dev-master
- async-interop/event-loop: ^0.5.0
- dompdf/dompdf: ^0.7.0
- friendsofphp/php-cs-fixer: ^2.0
- jeremeamia/superclosure: ^2.3
- phpunit/phpunit: ^5.7
- react/child-process: ^0.4.1
- react/event-loop: ^0.4.2
Suggests
- amphp/loop: Needed for Amp Runner
- amphp/parallel: Needed for Amp Runner
- async-interop/event-loop: Needed for Amp Runner
- dompdf/dompdf: Needed for DOMPDF Driver
- jeremeamia/superclosure: Needed for React Runner
- prince: Needed for Prince Driver
- react/child-process: Needed for React Runner
- react/event-loop: Needed for React Runner
- wkhtmltopdf: Needed for WKHTMLtoPDF Driver
This package is auto-updated.
Last update: 2024-09-19 02:10:59 UTC
README
无需烦恼的HTML到PDF转换抽象库。
安装
composer require asyncphp/paper
为了获得最佳效果,您还应该安装Prince和WKHTMLtoDPF。要运行测试,您还需要安装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支持Amp和React,用于打包和运行异步代码。您必须安装以下库组之一
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
方法的向后兼容性,但如果您正在重写方法,请在升级之前测试您的作品。