ibrand/phantomagick

PhantomMagick提供简单的API,简化了HTML转换成PDF或图片的过程

dev-master 2020-12-01 03:45 UTC

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集成

要求

安装

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)
自定义宽度和高度

自定义尺寸是可选的。支持的格式有cmpxin

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