koolreport / cloudexport
Export to pdf, image using chromeheadless.io's cloud export service
Installs: 98 148
Dependents: 1
Suggesters: 0
Security: 0
Stars: 7
Watchers: 2
Forks: 1
Open Issues: 1
Requires
This package is auto-updated.
Last update: 2024-10-20 07:47:15 UTC
README
CloudExport
helps to export your report to PDF or other format using export service providers. ChromeHeadless.io is the first cloud service we implemented for CloudExport. ChromeHeadless.io is developed by us so you can assure the compatibility as well as the quality of result.
Installation
By downloading .zip file
- Download
- Unzip the zip file
- Copy the folder
cloudexport
intokoolreport
folder so that look like below
koolreport ├── core ├── cloudexport
By composer
composer require koolreport/cloudexport
ChromeHeadless.io
Overview
ChomeHeadless.io is an online service helps to convert HTML to PDF and other image format. Running on highly optimized hardware and software, the ChomeHeadless.io will save your time in installing headless browsers like Phantomjs or Google Chrome. It also saves you server resources which you may reserve for other crucial tasks. The Chromeheadless.io is in beta version so all are free.
Get Token Key
- Register an account in ChromeHeadless.io. An email with title "Welcome to ChromeHeadless.io" will be sent to you in few minutes after your sign up.
- Use account credential in welcome email to log in our system.
- Go to tokens management page
- Hit
Generate
button to generate token key.
Example
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");
Export engines
ChromeHeadless.io has three pdf export engines which are headless chrome, wkhtmltopdf, and phantomjs. Here're examples to use them:
$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");
Headless chrome has more features but wkhtmltopdf is faster for big files. Phantomjs has the advantage of header and footer callbacks which allow for custom header/footer for each page.
Extra settings
You may add some extra settings to guide ChromeHeadless.io to load your page.
$report->run()
->cloudExport("MyReportPDF")
->chromeHeadlessio("token-key")
->settings([
"pageWaiting"=>"load", // load, domcontentloaded, networkidle0, networkidle2
"useLocalTempFolder" => true,
"autoDeleteLocalTempFile" => true,
"serviceHost" => "http://localhost:8000", // default value: https://service.chromeheadless.io
"serviceUrl" => "http://localhost:8000/api/export",
])
->pdf($chromePDFOptions)
->toBrowser("myreport.pdf");
Export options
PDF for headless chrome engine
The pdf()
method will help to generate pdf file. It takes an array as parameter defining options for your PDF. Below are available options.
All options could be found at this link Headless Chrome pdf options
Example:
...
->pdf([
"scale"=>1,
"format"=>"A4",
"landscape"=>true
])
...
PDF for wkhtmltopdf engine
All options could be found at this link, section Global Options Wkhtmltopdf Docs
Example:
...
->pdf([
"--collate"=>true,
"--page-size"=>"A4",
"--orientation"=>"Landscape",
"--margin-top"=>"100px"
])
...
PDF options in view file for both headless chrome and wkhtmltopdf engines
Some pdf options could be set directly in the PDF view file instead of pdf() method.
header and footer
In the view file, use header and footer tags to set pdf's header and footer template:
Example:
<!-- 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>
Headless chrome: If either header or footer tag exists, pdf options' displayHeaderFooter will be true. PDF options' headerTemplate and footerTemplate options take priority over view file's header and footer tags. With header and footer tags, if there's no font-size style, a default style "font-size:10x" is used. Header and footer tags supports place holders like {date}, {title}, etc and img tag with link-type src. For img tag pdf options' headerTemplate and footerTemplate only support base64-type src.
<!-- Wkhtmltopdf pdf template -->
<header>
<div>
{page}{frompage}{topage}{webpage}{section}{subsection}{date}{isodate}{time}{title}{doctitle}{sitepage}{sitepages}
</div>
</header>
<footer>
...
</footer>
Wkhtmltopdf: The exact html content of the header and footer tags including img tags will be used as pdf header and footer with some substituted variables.
margin
In the view file, use the body tag's margin style to set pdf margin:
Example:
//MyReportPDF.view.php
<body style='margin: 1in 0.5in 1in 0.5in'>
...
</body>
If either header or footer tag exists but there's no body's margin top or bottom, a default margin top or bottom of 1 inch will be used
No template option
If you don't have any header/footer/margin in your template files, you could speed up pdf generating with noTemplateOption
property:
...
->pdf([
"noTemplateOption"=>true,
...
])
...
JPG for headless chrome
The jpg()
help to generate JPG file. It take an array as parameter defining options for your JPG. Below are list of properties:
Example:
...
->jpg([
"quality"=>80
"clip"=>[
"x"=>100,
"y"=>100,
"width"=>500,
"height"=>1000,
]
])
...
PNG for headless chrome
The png()
help to generate PNG file. It take an array as parameter defining options for your PNG. Below are list of properties:
Example:
...
->png([
"clip"=>[
"x"=>100,
"y"=>100,
"width"=>500,
"height"=>1000,
]
])
...
Get results
In all above examples we use method toBrowser()
to send the file to browser for user to download. Here are all options:
Examples:
$report->run()
->cloudExport("MyReportPDF")
->chromeHeadlessio("token-key")
->pdf()
->saveAs("../stores/myreport.pdf");