fyrts / chrome-devtools-pdf
使用Chrome DevTools Protocol生成PDF文件的简单PHP库
1.2.0
2022-12-19 15:01 UTC
Requires
This package is auto-updated.
Last update: 2024-09-19 18:56:36 UTC
README
ChromeDevToolsPdf通过fyrts/chrome-devtools-protocol提供了一个包装器,用于快速且可预测地使用Chrome DevTools Protocol生成PDF文件。
设置
首先安装最新版本的Chrome/Chromium,然后通过composer安装此包
composer require fyrts/chrome-devtools-pdf
您可以选择自己管理Chrome进程(最好使用进程管理器如Supervisord),或者让库在请求时启动一个进程。
要共享一个进程,请使用remote-debugging-port
标志启动Chrome,并使用connect()
方法
$instance = ChromeDevToolsPdf\Instance::connect(9222);
要按需启动Chrome,请使用launch()
方法,如果需要,提供可执行文件路径
$instance = ChromeDevToolsPdf\Instance::launch('/Applications/Google Chrome.app/Contents/MacOS/Google Chrome');
用法
可以从公开可访问的URL或原始HTML源代码生成PDF文件。
$instance = ChromeDevToolsPdf\Instance::launch(); $pdf = $instance->loadUrl('https://www.google.com'); $pdf->saveFile(__DIR__ . '/filename.pdf'); $instance->close();
$instance = ChromeDevToolsPdf\Instance::launch(); $pdf = $instance->loadHtml('<h1>Example</h1>'); $pdf->saveFile(__DIR__ . '/filename.pdf'); $instance->close();
要接收原始数据而不是直接保存文件,请使用generate()
方法代替
$instance = ChromeDevToolsPdf\Instance::launch(); $pdf = $instance->loadUrl('https://www.google.com'); Storage::put($__DIR__ . '/filename.pdf', $pdf->generate()); $instance->close();
通过在PDF对象上调用设置器来更改页面布局设置
$instance = ChromeDevToolsPdf\Instance::launch(); $pdf = $instance->loadUrl('https://www.google.com'); $pdf->setLandscape(true)->setMarginLeft(3); $pdf->setDisplayHeaderFooter(true)->setHeaderTemplate('Title: <span class="title"></span>'); $pdf->saveFile(__DIR__ . '/filename.pdf'); $instance->close();
以下是可以使用的选项
setLandscape(true|false)
– 纸张方向。默认为false。setDisplayHeaderFooter(true|false)
– 显示页眉和页脚。默认为false。setPrintBackground(true|false)
– 打印背景图形。默认为false。setScale(int|float)
– 页面渲染的缩放比例。默认为1。setPaperWidth(int|float)
和setPaperHeight(int|float)
– 英寸中的纸张宽度和高度。默认分别为8.5英寸和11英寸。setMarginTop(int|float)
、setMarginBottom(int|float)
、setMarginLeft(int|float)
和setMarginRight(int|float)
– 英寸中的上、下、左或右页边距。默认为1厘米(约0.4英寸)。setPageRanges(string)
– 要打印的纸张范围,例如,'1-5, 8, 11-13'。默认为空字符串,表示打印所有页面。setIgnoreInvalidPageRanges(true|false)
– 是否静默忽略无效但成功解析的页面范围,例如 '3-2'。默认为false。setHeaderTemplate(string)
– 打印页眉的HTML模板。应该是有效的HTML标记,并使用以下类来将打印值注入其中(例如,将生成包含标题的span)- date: 格式化的打印日期
- title: 文档标题
- url: 文档位置
- pageNumber: 当前页码
- totalPages: 文档中的总页数
setFooterTemplate(string)
– 打印页脚的HTML模板。应使用与headerTemplate相同的格式。setPreferCSSPageSize(true|false)
– 是否优先使用CSS定义的页面大小。默认为false,在这种情况下,内容将缩放以适应纸张大小。setPaperSize(array)
– 包含英寸中纸张宽度和高度的数组。默认分别为8.5英寸和11英寸。以下常量可用作预设- PaperSize::A0, PaperSize::A1, PaperSize::A2, PaperSize::A3, PaperSize::A4, PaperSize::A5, PaperSize::A6, PaperSize::A7和PaperSize::A8
- PaperSize::JUNIOR_LEGAL
- PaperSize::GOVERNMENT_LETTER
- PaperSize::LETTER
- PaperSize::LEGAL
- PaperSize::TABLOID
- PaperSize::LEDGER
该库可以异步实现。当打印多页时,这很有用。这样做时,请使用await()
方法来防止脚本提前终止。
$instance = ChromeDevToolsPdf\Instance::launch(); $pdf1 = $instance->loadUrl('https://www.google.com'); $pdf1->saveFileAsync(__DIR__ . '/filename-1.pdf'); $pdf2 = $instance->loadUrl('https://www.github.com'); $pdf2->saveFileAsync(__DIR__ . '/filename-2.pdf'); $pdf1->await(); $pdf2->await(); $instance->close();