kandorlab / phantommagick
PhantomMagick提供了一个简单的API,简化了将HTML转换为PDF或图片的过程
Requires
- php: >=5.4.0
- league/flysystem: ~1.0|~2.0|~3.0
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.4
This package is not auto-updated.
Last update: 2024-09-27 12:51:22 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
二进制文件的路径,或者phantomjs
命令不在您的shell中可用。如果您通过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。