spiritix/php-chrome-html2pdf

一个用于使用 Google Chrome 将 HTML 转换为 PDF 的 PHP 库

v1.8.1 2024-09-05 08:45 UTC

README

一个用于使用 Chrome/Chromium 将 HTML 转换为 PDF 的 PHP 库。

PHP Checks Node.js Checks Code Climate Total Downloads Latest Stable Version Latest Unstable Version License

需要贡献者!请查看 开放问题,如果您有兴趣通过 Hangouts 进行快速介绍,请给我发邮件。

工作原理

此库基于 puppeteer,一个由 Chrome DevTools 团队维护的无头 Chrome Node API。

它提供了一个简单的 PHP 包装器,围绕 Node API,专注于生成美观的 PDF 文件。

与其他 HTML 到 PDF 转换器(如 wkhtmltopdf)、相应的 PHP 包装器 或类似库相比,它基于当前版本的 Chrome 而不是过时且未维护的 WebKit 构建。因此,此库完全支持 CSS3、HTML5、SVGs、SPAs 以及人们现在使用的所有其他花哨功能。

要求

安装

可以通过 Composer 安装 PHP Chrome HTML to PDF,通过在项目的 composer.json 中要求 spiritix/php-chrome-html2pdf 包来安装。或者简单地运行此命令

composer require spiritix/php-chrome-html2pdf

所需的 JS 包将自动在后台安装。

用法

使用此库非常简单。选择输入和输出处理程序,将它们传递给转换器,如果您喜欢,可以设置一些选项,然后根据输出处理程序,对生成的 PDF 文件进行操作。

use Spiritix\Html2Pdf\Converter;
use Spiritix\Html2Pdf\Input\UrlInput;
use Spiritix\Html2Pdf\Output\DownloadOutput;

$input = new UrlInput();
$input->setUrl('https://www.google.com');

$converter = new Converter($input, new DownloadOutput());

$converter->setOption('landscape', true);

$converter->setOptions([
    'printBackground' => true,
    'displayHeaderFooter' => true,
    'headerTemplate' => '<p>I am a header</p>',
]);

$converter->setLaunchOptions([
      'ignoreHTTPSErrors' => true, 
      'headless' => true, 
      'executablePath' => '/usr/bin/google-chrome-stable', 
      'args' => [
        '--no-sandbox',
        '--disable-web-security',
        '--font-render-hinting=none',
        '--proxy-server="direct://"',
        '--proxy-bypass-list=*',
        '--media-cache-size=0',
        '--disk-cache-size=0',
        '--disable-application-cache',
        '--disk-cache-dir=/dev/null',
        '--media-cache-dir=/dev/null'
      ]
   ]
);


$output = $converter->convert();
$output->download('google.pdf');

输入处理程序

以下输入处理程序可用

  • StringInput - 接受 HTML 内容作为字符串
  • UrlInput - 从 URL 获取 HTML 内容

输出处理程序

以下输出处理程序可用

  • StringOutput - 返回二进制 PDF 内容作为字符串
  • FileOutput - 将 PDF 文件存储在服务器的文件系统中
  • DownloadOutput - 强制浏览器下载 PDF 文件
  • EmbedOutput - 强制浏览器嵌入 PDF 文件

选项

  • scale <[number]> 页面渲染的缩放比例。默认为 1
  • displayHeaderFooter <[boolean]> 显示页眉和页脚。默认为 false
  • headerTemplate <[string]> 打印页眉的 HTML 模板。应该是有效的 HTML 标记,并使用以下类将打印值注入其中
    • date 格式化的打印日期
    • title 文档标题
    • url 文档位置
    • pageNumber 当前页码
    • totalPages 文档中的总页数
  • footerTemplate <[string]> 打印页脚的 HTML 模板。应使用与 headerTemplate 相同的格式。
  • printBackground <[布尔值]> 打印背景图形。默认为 false
  • landscape <[布尔值]> 纸张方向。默认为 false
  • pageRanges <[字符串]> 打印的纸张范围,例如,'1-5, 8, 11-13'。默认为空字符串,表示打印所有页面。
  • format <[字符串]> 纸张格式。如果设置,则优先于 widthheight 选项。默认为 'Letter'。
  • width <[字符串]> 纸张宽度,接受带有单位的值。
  • height <[字符串]> 纸张高度,接受带有单位的值。
  • margin <[数组]> 纸张边距,默认无。
    • top <[字符串]> 顶部边距,接受带有单位的值。
    • right <[字符串]> 右边距,接受带有单位的值。
    • bottom <[字符串]> 底部边距,接受带有单位的值。
    • left <[字符串]> 左边距,接受带有单位的值。
  • preferCSSPageSize <[布尔值]> 给任何在页面中声明的 CSS @page 大小比宽度、高度或格式选项中的声明优先级。默认为 false,这将根据纸张大小调整内容。
  • omitBackground <[布尔值]> 隐藏默认的白色背景,并允许以透明度捕获截图。默认为 false
  • timeout <[数字]> 最大时间(以毫秒为单位),默认为 30 秒,传递 0 以禁用超时。
  • mediaType <?[字符串]> 改变页面的 CSS 媒体类型。唯一允许的值是 'screen''print'null。传递 null 禁用媒体模拟。
  • viewport <[数组]>
    • width <[数字]> 以像素为单位的页面宽度。
    • height <[数字]> 以像素为单位的页面高度。
    • deviceScaleFactor <[数字]> 指定设备缩放因子(可以将其视为 dpr)。默认为 1
    • isMobile <[布尔值]> 是否考虑 meta viewport 标签。默认为 false
    • hasTouch<[布尔值]> 指定视口是否支持触摸事件。默认为 false
    • isLandscape <[布尔值]> 指定视口是否在横幅模式中。默认为 false
  • pageWaitFor <[整数]> 等待的毫秒数。
  • cookies<[数组]> 要设置的 Cookie 对象。

注意 headerTemplatefooterTemplate 标记有如下限制

  1. 模板内的脚本标签不会被执行。
  2. 模板内不可见页面样式。

注意 默认情况下,此库生成的 PDF 使用修改后的颜色进行打印。使用 -webkit-print-color-adjust 属性强制渲染精确颜色。

故障排除

  • 确保您已安装所有 特定于操作系统的依赖项
  • 使用 $converter->setNodePath() 方法手动设置您的 Node.js 可执行文件路径。
  • 页脚或页眉不可见?请参阅 此处

贡献

欢迎以任何形式贡献。在提交拉取请求之前,请考虑以下准则

  • 编码标准 - 主要遵循 PSR。
  • 添加测试! - 如果您的 PR 没有测试,它将不会被接受。

许可

PHP Chrome HTML to PDF 是免费软件,根据 MIT 许可证条款分发。