spiritix / php-chrome-html2pdf
一个用于使用 Google Chrome 将 HTML 转换为 PDF 的 PHP 库
Requires
- php: ^8.1
- oat-sa/composer-npm-bridge: ^0.4
Requires (Dev)
- phpunit/phpunit: ^9.0
README
一个用于使用 Chrome/Chromium 将 HTML 转换为 PDF 的 PHP 库。
需要贡献者!请查看 开放问题,如果您有兴趣通过 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
<[字符串]> 纸张格式。如果设置,则优先于width
或height
选项。默认为 '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 对象。
注意
headerTemplate
和footerTemplate
标记有如下限制
- 模板内的脚本标签不会被执行。
- 模板内不可见页面样式。
注意 默认情况下,此库生成的 PDF 使用修改后的颜色进行打印。使用
-webkit-print-color-adjust
属性强制渲染精确颜色。
故障排除
- 确保您已安装所有 特定于操作系统的依赖项。
- 使用
$converter->setNodePath()
方法手动设置您的 Node.js 可执行文件路径。 - 页脚或页眉不可见?请参阅 此处。
贡献
欢迎以任何形式贡献。在提交拉取请求之前,请考虑以下准则
- 编码标准 - 主要遵循 PSR。
- 添加测试! - 如果您的 PR 没有测试,它将不会被接受。
许可
PHP Chrome HTML to PDF 是免费软件,根据 MIT 许可证条款分发。