NucleosDompdfBundle
NucleosDompdfBundle copied to clipboard
📜 This bundle provides a wrapper for using dompdf inside symfony.
NucleosDompdfBundle
This bundle provides a wrapper for using dompdf inside Symfony.
Installation
Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:
composer require nucleos/dompdf-bundle
Enable the Bundle
Then, enable the bundle by adding it to the list of registered bundles in config/bundles.php
file of your project:
// config/bundles.php
return [
// ...
Nucleos\DompdfBundle\NucleosDompdfBundle::class => ['all' => true],
];
Configure the Bundle
# config/packages/nucleos_dompdf.yaml
nucleos_dompdf:
defaults:
defaultFont: 'helvetica'
# See https://github.com/dompdf/dompdf/wiki/Usage#options for available options
Usage
Whenever you need to turn a html page into a PDF use dependency injection for your service:
use Nucleos\DompdfBundle\Factory\DompdfFactoryInterface;
use Nucleos\DompdfBundle\Wrapper\DompdfWrapperInterface;
final class MyService
{
public function __construct(DompdfFactoryInterface $factory)
{
$this->factory = $factory;
}
public function render()
{
// ...
/** @var Dompdf\Dompdf $dompdf */
$dompdf = $this->factory->create();
// Or pass an array of options:
$dompdf = $this->factory->create(['chroot' => '/home']);
// ...
}
}
final class MyOtherService
{
public function __construct(DompdfWrapperInterface $wrapper)
{
$this->wrapper = $wrapper;
}
public function stream()
{
// ...
$html = '<h1>Sample Title</h1><p>Lorem Ipsum</p>';
/** @var Symfony\Component\HttpFoundation\StreamedResponse $response */
$response = $this->wrapper->getStreamResponse($html, "document.pdf");
$response->send();
// ...
}
public function binaryContent()
{
// ...
return $this->wrapper->getPdf($html);
// ...
}
}
Render pdf using Twig
If you use Twig to create the content, make sure to use renderView()
instead of render()
.
Otherwise you might get the following HTTP header printed inside your PDF:
HTTP/1.0 200 OK Cache-Control: no-cache
$html = $this->renderView('my_pdf.html.twig', array(
// ...
));
$this->wrapper->getStreamResponse($html, 'document.pdf');
Using asset() to link assets
First, make sure your chroot
is correctly set and isRemoteEnabled
is true.
# config/packages/nucleos_dompdf.yaml
nucleos_dompdf:
defaults:
chroot: '%kernel.project_dir%/public/assets'
isRemoteEnabled: true
Second, use {{ absolute_url( asset() ) }}
<img src={{ absolute_url( asset('assets/example.jpg') ) }}>
Events
The dompdf wrapper dispatches events to conveniently get the inner dompdf instance when creating the PDF.
-
dompdf.output
is dispatched ingetPdf()
-
dompdf.stream
is dispatched instreamHtml()
See Symfony Events and Event Listeners for more info.
License
This bundle is under the MIT license.