koolreport / cloudexport
使用chromeheadless.io的云导出服务导出为PDF或图片
Requires
This package is auto-updated.
Last update: 2024-09-20 07:28:48 UTC
README
CloudExport
帮助您通过导出服务提供商将报告导出到PDF或其他格式。 ChromeHeadless.io 是我们为CloudExport实现的第一款云服务。ChromeHeadless.io由我们开发,因此您可以确保兼容性以及结果的品质。
安装
通过下载.zip文件
- 下载
- 解压zip文件
- 将
cloudexport
文件夹复制到koolreport
文件夹,使其看起来如下
koolreport ├── core ├── cloudexport
通过composer
composer require koolreport/cloudexport
ChromeHeadless.io
概述
ChomeHeadless.io 是一个在线服务,帮助将HTML转换为PDF和其他图像格式。在高度优化的硬件和软件上运行,ChromeHeadless.io将节省您安装无头浏览器(如Phantomjs或Google Chrome)的时间。它还可以节省您的服务器资源,您可以将其保留用于其他关键任务。Chromeheadless.io处于测试版,因此所有服务均为免费。
获取令牌密钥
- 在 ChromeHeadless.io 上注册一个账户。注册后几分钟内,您将收到一封标题为“欢迎来到ChromeHeadless.io”的电子邮件。
- 使用欢迎邮件中的账户凭证登录我们的系统。
- 转到 令牌管理 页面
- 点击
生成
按钮以生成令牌密钥。
示例
MyReport.php
class MyReport extends \koolreport\KoolReport
{
//Register cloud export service in your report
use \koolreport\cloudexport\Exportable;
}
MyReportPDF.view.php
<html> <body> <h1>This is my first export using Chromeheadless.io</h1> <p>Chromeheadless.io save your time and resources in exporting html, report to PDF.</p> </body> </html>
index.php
require_once "../koolreport/core/autoload.php";
require_once "MyReport.php";
$report = new MyReport;
$report->run()
->cloudExport("MyReportPDF")
->chromeHeadlessio("token-key")
->pdf()
->toBrowser("myreport.pdf");
导出引擎
ChromeHeadless.io拥有三个PDF导出引擎:无头Chrome、wkhtmltopdf和Phantomjs。以下是使用它们的示例
$report->run()
->cloudExport("MyReportPDF")
->chromeHeadlessio("token-key")
->pdf($chromePDFOptions)
->toBrowser("myreport.pdf");
$report->run()
->cloudExport("MyReportPDF")
->khtml("token-key")
->pdf($khtmlPDFOption)
->toBrowser("myreport.pdf");
$report->run()
->cloudExport("MyReportPDF")
->phantomjs("token-key")
->pdf($phantomjsPDFOption)
->toBrowser("myreport.pdf");
无头Chrome具有更多功能,但wkhtmltopdf在处理大文件时更快。Phantomjs的优势在于头部和页脚回调,这允许为每一页自定义头部和页脚。
额外设置
您可以添加一些额外设置来指导ChromeHeadless.io加载您的页面。
$report->run()
->cloudExport("MyReportPDF")
->chromeHeadlessio("token-key")
->settings([
"pageWaiting"=>"load", // load, domcontentloaded, networkidle0, networkidle2
"useLocalTempFolder" => true,
"autoDeleteLocalTempFile" => true,
"serviceHost" => "https://:8000", // default value: https://service.chromeheadless.io
"serviceUrl" => "https://:8000/api/export",
])
->pdf($chromePDFOptions)
->toBrowser("myreport.pdf");
导出选项
无头Chrome引擎的PDF
pdf()
方法可以帮助生成PDF文件。它接受一个数组作为参数,定义PDF的选项。以下是一些可用的选项。
所有选项都可以在以下链接中找到 Headless Chrome pdf options
示例
...
->pdf([
"scale"=>1,
"format"=>"A4",
"landscape"=>true
])
...
wkhtmltopdf引擎的PDF
所有选项都可以在此链接中找到,部分为全局选项 Wkhtmltopdf Docs
示例
...
->pdf([
"--collate"=>true,
"--page-size"=>"A4",
"--orientation"=>"Landscape",
"--margin-top"=>"100px"
])
...
对于无头Chrome和wkhtmltopdf引擎的PDF选项
某些PDF选项可以直接在PDF视图文件中设置,而不是在pdf()方法中。
头部和页脚
在视图文件中,使用header和footer标签设置PDF的头部和页脚模板
示例
<!-- Headless chrome pdf template -->
<header>
<div id="header-template"
style="font-size:10px !important; color:#808080; padding-left:10px">
<span>Header: </span>
{date}
{title}
{url}
{pageNumber}
{totalPages}
<span id='pageNum' class="pageNumber"></span>
<img src='http://www.chromium.org/_/rsrc/1438879449147/config/customLogo.gif?revision=3' />
</div>
</header>
<footer>
...
</footer>
无头Chrome:如果存在header或footer标签,pdf选项的displayHeaderFooter将为true。PDF选项的headerTemplate和footerTemplate选项将优先于视图文件的header和footer标签。使用header和footer标签时,如果没有font-size样式,则使用默认样式"font-size:10x"。头部和页脚标签支持占位符如{date}、{title}等,以及具有link-type src的img标签。对于img标签,pdf选项的headerTemplate和footerTemplate仅支持base64类型的src。
<!-- Wkhtmltopdf pdf template -->
<header>
<div>
{page}{frompage}{topage}{webpage}{section}{subsection}{date}{isodate}{time}{title}{doctitle}{sitepage}{sitepages}
</div>
</header>
<footer>
...
</footer>
Wkhtmltopdf:使用标题和页脚标签的确切HTML内容(包括img标签)作为PDF的页眉和页脚,其中一些变量将被替换。
边距
在视图文件中,使用body标签的边距样式设置PDF边距。
示例
//MyReportPDF.view.php
<body style='margin: 1in 0.5in 1in 0.5in'>
...
</body>
如果存在标题或页脚标签,但没有body的顶部或底部边距,则将使用默认的1英寸顶部或底部边距。
无模板选项
如果您在模板文件中没有标题/页脚/边距,可以使用noTemplateOption
属性来加快PDF生成速度。
...
->pdf([
"noTemplateOption"=>true,
...
])
...
无头Chrome的JPG
jpg()
帮助生成JPG文件。它接受一个数组作为参数,定义了JPG的选项。以下是属性列表:
示例
...
->jpg([
"quality"=>80
"clip"=>[
"x"=>100,
"y"=>100,
"width"=>500,
"height"=>1000,
]
])
...
无头Chrome的PNG
png()
帮助生成PNG文件。它接受一个数组作为参数,定义了PNG的选项。以下是属性列表:
示例
...
->png([
"clip"=>[
"x"=>100,
"y"=>100,
"width"=>500,
"height"=>1000,
]
])
...
获取结果
在上面的所有示例中,我们使用toBrowser()
方法将文件发送到浏览器以供用户下载。以下是所有选项:
示例
$report->run()
->cloudExport("MyReportPDF")
->chromeHeadlessio("token-key")
->pdf()
->saveAs("../stores/myreport.pdf");