anam/phantommagick

PhantomMagick 提供了一个简单的 API,以简化将 HTML 转换为 PDF 或图像的过程

v2.0.0 2017-08-07 09:06 UTC

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

要求

安装

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

自定义尺寸是可选的。支持的格式有 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