ibrand / phantomagick
PhantomMagick提供简单的API,简化了HTML转换成PDF或图片的过程
Requires
- php: >=7.0
- anam/phantomjs-linux-x86-binary: ~2.1.1
- aws/aws-sdk-php: ^3.87
- league/flysystem: ~1.0
- league/flysystem-aws-s3-v3: ^1.0
- overtrue/flysystem-qiniu: ^1.0
Requires (Dev)
- mockery/mockery: ~0.9
- orchestra/testbench: ~3.5
- phpunit/phpunit: ~6.0
This package is auto-updated.
Last update: 2024-09-29 05:56:12 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');
边距
边距是可选的,默认为1cm。
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。