Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sanderdlm/chrome-pdf-bundle
Symfony bundle to generate PDFs with headless Chrome using chrome-php/chrome.
https://github.com/sanderdlm/chrome-pdf-bundle
chrome chrome-php pdf symfony symfony-bundle
Last synced: 3 months ago
JSON representation
Symfony bundle to generate PDFs with headless Chrome using chrome-php/chrome.
- Host: GitHub
- URL: https://github.com/sanderdlm/chrome-pdf-bundle
- Owner: sanderdlm
- License: mit
- Created: 2021-04-11T09:58:56.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2024-04-15T10:45:43.000Z (10 months ago)
- Last Synced: 2024-10-29T10:32:43.315Z (3 months ago)
- Topics: chrome, chrome-php, pdf, symfony, symfony-bundle
- Language: HTML
- Homepage:
- Size: 1.07 MB
- Stars: 6
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
ChromePdfBundle
===============The ChromePdfBundle is a Symfony bundle that leverages the [chrome-php/chrome](https://github.com/chrome-php/chrome) project to render HTML and save the output as a PDF file.
Installation
------------With [composer](https://getcomposer.org), require:
`composer require dreadnip/chrome-pdf-bundle`
Configuration
-------------The bundle relies on a working, up-to-date Chrome/Chromium instance to work. You must specify the binary in your .env file.
```yaml
# .env or .env.local
CHROME_BINARY="/usr/bin/chromium"
```Usage
-----The bundle registers two services:
- `chrome_pdf.pdf_generator` allows you to generate pdf files from HTML strings. You can autowire the `PdfGenerator` class in your application to get started quickly.
- `chrome_pdf.browser_factory` is the chrome-php/chrome BrowserFactory class offered as a service within your Symfony application. Use this if you want to fine-tune the PDF generation process. You can use the PdfGenerator class as a starting point and build your custom solution from that.### Basic example: render a pdf document in a controller
```php
use Dreadnip\ChromePdfBundle\Service\PdfGenerator;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Response;
use Twig\Environment;class TestController extends AbstractController
{
public function __invoke(PdfGenerator $pdfGenerator): Response
{
$html = $this->render('pdf.html.twig');$path = $pdfGenerator->generate($html, 'files/test.pdf');
return new BinaryFileResponse($path);
}
}
```### Advanced example: render a pdf document in a controller with custom options
```php
use Dreadnip\ChromePdfBundle\Service\PdfGenerator;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\Response;
use Twig\Environment;class TestController
{
public function __invoke(
Environment $twig,
PdfGenerator $pdfGenerator
): Response {
$html = $twig->render('pdf.html.twig');// Control everything by passing custom options
",
$printOptions = [
'printBackground' => true,
'displayHeaderFooter' => true,
'preferCSSPageSize' => true,
'headerTemplate'=> "
'footerTemplate' => "",
'scale' => 1.0,
];
// Setting headless to false helps you debug issues
$browserOptions = [
'headless' => false,
];$path = $pdfGenerator->generate(
html: $html,
path: 'files/test.pdf',
printOptions: $options,
browserOptions: $browserOptions,
timeout: 5000
);return new BinaryFileResponse($path);
}
}
```
[Print options](https://github.com/chrome-php/chrome#print-as-pdf) can be used to control the rendering of the PDF.[Browser options](https://github.com/chrome-php/chrome#options) are available to control the headless Chrome instance that will be used to render the PDF.
A list of all available options can be found in the chrome-php/chrome repository.
### Base template
The bundle comes with a base template that can be extended to build PDFs with. This includes helpers for page lay-out and breaking. The template comes with two blocks `styles` for CSS and `content` for the actual PDF content.
```html
{% extends '@ChromePdf/base.html.twig' %}{% block content %}
First page
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolores enim maxime quasi? Ab accusantium at commodi corporis, distinctio earum facilis harum ipsum maxime, nisi nostrum obcaecati odit officia quod voluptatem?
Second page
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolores enim maxime quasi? Ab accusantium at commodi corporis, distinctio earum facilis harum ipsum maxime, nisi nostrum obcaecati odit officia quod voluptatem?
{% endblock %}```
Credits
-------This bundle is nothing more than a simple wrapper around the awesome [chrome-php/chrome](https://github.com/chrome-php/headless-chromium-php) project.