anam / phantommagick
PhantomMagick 提供了一个简单的 API,以简化将 HTML 转换为 PDF 或图像的过程
Requires
- php: >=5.4.0
- league/flysystem: ~1.0
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.4
This package is not auto-updated.
Last update: 2024-09-14 16:55:36 UTC
README
对于 PhantomMagick 版本 1,请使用 1.0.2 分支!
PhantomMagick 提供了一个简单的 API,以简化将 HTML 转换为 PDF 或图像的过程。它特别适合生成发票或捕获网站截图等操作。它不依赖于框架,但为 Laravel 4/5 提供了简单的包装。
功能
- 将 HTML 转换为 PDF
- 将 HTML 转换为图像(PNG、JPG 或 GIF)
- 支持多页 PDF
- 捕获网页截图
- 将 PDF 或图像保存到本地磁盘或云端(S3、Dropbox 或 Rackspace)
- 框架无关,可选 Laravel 集成
要求
- PHP 5.5+
- PhantomJS
安装
PhantomMagick 通过 Composer 提供
$ composer require anam/phantommagick
依赖关系
PhantomJS 必须安装才能使用 PhantomMagick。
有几种安装 PhantomJS 的方法
手动安装二进制文件
您可以从以下链接下载官方的 PhantomJS 二进制文件
http://phantomjs.org/download.html.
通过 Composer 安装二进制文件
只需拉取 anam/phantomjs-linux-x86-binary
包以获取适用于 64 位 Linux 系统的最新 PhantomJS 二进制文件。
composer require anam/phantomjs-linux-x86-binary
集成
Laravel 4 和 Laravel 5 集成
尽管 PhantomMagick
不依赖于框架,但它支持 Laravel 并自带服务提供者和包装,便于集成。
安装 PhantomMagick 后,打开 Laravel 包含的 config/app.php
文件,并添加以下行。
在 $providers
数组中添加以下服务提供者。
'Anam\PhantomMagick\ConverterServiceProvider'
将此包的包装添加到 $aliases
数组。
'Converter' => 'Anam\PhantomMagick\Facades\Converter'
您现在可以在以下示例中使用此包装,而不是自己实例化转换器。
使用方法
PDF 转换
$conv = new \Anam\PhantomMagick\Converter(); $conv->source('http://google.com') ->toPdf() ->save('/your/destination/path/google.pdf');
多页 PDF
use Anam\PhantomMagick\Converter; $conv = new Converter(); $conv->addPage('<html><body><h1>Welcome to PhantomMagick</h1></body></html>') ->addPage('http://facebook.com') ->addPage('/html/file/from/local/drive/example.html') ->save('/your/destination/path/multipage.pdf');
请注意,对于多页 PDF
- 仅支持绝对路径,因此请避免使用相对路径
- 推荐使用内联样式或内联样式表
图像转换
PhantomMagick 支持 HTML 到 PNG/JPG/GIF 转换。
$conv = new \Anam\PhantomMagick\Converter(); $conv->source('http://google.com') ->toPng() ->save('/your/destination/path/google.png');
HTML 到 PNG
$conv->toPng()
HTML 到 JPG
$conv->toJpg()
HTML 到 GIF
$conv->toGif()
下载文件
use Anam\PhantomMagick\Converter; Converter::make('http://google.com') ->toPdf() ->download('google.pdf'); Converter::make('http://yahoo.com') ->toPng() ->download('yahoo.png');
要显示在浏览器中而不是强制下载文件,您可以向方法传递第二个参数。
$conv->download('google.pdf', true);
或只需简单调用
$conv->serve();
保存到云端
PhantomMagick 利用 Flysystem 将转换后的文件保存到云端。
PhantomMagick 目前支持
- Amazon S3
- Dropbox
- Rackspace
Amazon S3
首先通过 Composer 安装所需的 S3 依赖项。
composer require aws/aws-sdk-php composer require league/flysystem-aws-s3-v3
use Anam\PhantomMagick\Converter; use Aws\S3\S3Client; $client = S3Client::factory([ 'credentials' => [ 'key' => 'AWS_KEY', 'secret' => 'AWS_SECRET', ], 'region' => 'your-region', 'version' => 'latest', ]); $conv = new Converter(); $conv->adapter($client, 'bucket-name', 'optional/path/prefix') ->acl('public') ->source('http://google.com') ->toPdf() ->save('google.pdf');
Dropbox
首先通过 Composer 安装所需的 Dropbox 依赖项。
composer require dropox/dropbox-sdk composer require flysystem-dropbox
use Anam\PhantomMagick\Converter; use Dropbox\Client; $client = new Client('DROPBOX_TOKEN', 'DROPBOX_APP'); $conv = new Converter(); $conv->adapter($client) ->source('https://google.com') ->toPdf() ->save('dropbox_example.pdf');
Rackspace
首先通过 Composer 安装所需的 Rackspace 依赖项。
composer require rackspace/php-opencloud composer require league/flysystem-rackspace
use Anam\PhantomMagick\Converter; use OpenCloud\OpenStack; use OpenCloud\Rackspace; $client = new OpenStack(Rackspace::US_IDENTITY_ENDPOINT, array( 'username' => 'RACKSPACE_USERNAME', 'password' => 'RACKSPACE_PASSWORD' )); $store = $client->objectStoreService('cloudFiles', 'SYD'); $container = $store->getContainer('phantom-magick'); $conv = new Converter(); $conv->adapter($container) ->source('https://google.com') ->toPdf() ->save('rackspace_example.pdf');
设置
全局选项
二进制文件
如果您已手动自行安装,可以设置 phantomjs
二进制文件的路径,或者如果您的 shell 中没有 phantomjs
命令,您可以设置 phantomjs
。如果您通过 Composer(使用 anam/phantomjs-linux-x86-binary
包)安装,PhantomMagick 将足够智能地自动找到该文件。
$conv->setBinary('/phantomjs/binary/path/phantomjs');
数据源
PhantomMagick仅支持HTML,数据可以通过URL或本地磁盘提供。如果您需要使用原始HTML数据,可以使用多页PDF转换。然而,原始数据有一些限制;它不支持相对路径,并且仅支持内联样式和内部CSS。
new Converter('/Path/to/file/example.html'); // or Converter::make('/Path/to/file/example.html'); //or $conv->source('/Path/to/file/example.html'); // or $conv->source('http://google.com');
对于原始HTML
$conv->addPage('<html><body><h1>Raw HTML</h1></body></html>');
PDF选项
格式
格式是可选的。支持的格式有:'A3', 'A4', 'A5', 'Legal', 'Letter', 'Tabloid'。
$conv->format('A4');
页边距
页边距是可选的,默认为1厘米。
array('margin' => '1cm')
方向
方向('portrait', 'landscape')是可选的,默认为'portrait'。
$conv->portrait(); $conv->landscape();
缩放因子
缩放因子是可选的,默认为1(其中1为100%缩放)。
array('zoomfactor' => 1)
自定义宽度和高度
自定义尺寸是可选的。支持的格式有 cm
、px
和 in
。
array('width' => '900px', height => '700px')
示例
$options = [ 'format' => 'A4', 'zoomfactor' => 1, 'orientation' => 'portrait', 'margin' => '1cm' ]; $conv->setPdfOptions($options); // or $conv->pdfOptions($options); // or $conv->toPdf($options);
图像选项
宽度
宽度是可选的,默认为1280px(720p),并且仅接受整数。
$conv->width(1280);
高度
高度是可选的,并且仅接受整数。
$conv->height(1280);
注意:如果只提供宽度,则将渲染整个网页。但是,如果同时提供了宽度和高度,图像将被裁剪到给定的宽度和高度。
质量
质量是可选的,默认为80。质量必须在1-100之间。
$conv->quality(90);
#####示例
$options = [ 'width' => 1280, 'quality' => 90 ]; $conv->setImageOptions($options); // or $conv->imageOptions($options); // or $conv->toPng($options); // or $conv->toJpg($options); // or $conv->toGif($options);
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅LICENSE。