Type
magento2-module
Staempfli PDF generator.
magento2-module
OSL-3.0
None
None
None
None
None
Magento 2 module to ease the pdf generation using wkhtmltopdf features
composer require "staempfli/magento2-module-pdf":"~1.0"
This module needs wkhtmltopdf installed on your computer. You can download and install it from here:
NOTE: Do not install it using apt-get
on Linux systems. See troubleshooting section for more info.
Stores > Configuration > Advanced PDF Generation
This module can generate a PDF from any frontControllerAction
Create you Controller path with the correspinding Blocks and .phtml
templates
<!-- route_actions_generatePdf.xml -->
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
<container name="root">
<block class="Vendor\Package\Block\YourBlock" name="vendor.package.somename">
</container>
</layout>
Return pdf instance on Controller
<?php
namespace Vendor\Package\Controller\Actions;
use Magento\Framework\App\Action\Action;
use Staempfli\Pdf\Model\View\PdfResult;
use Staempfli\Pdf\Service\PdfOptions;
class GeneratePdf extends Action
{
public function execute()
{
return $this->renderPdfResult();
}
protected function renderPdfResult()
{
/** @var PdfResult $result */
$result = $this->resultFactory->create(PdfResult::TYPE);
$result->addGlobalOptions(
new PdfOptions(
[
PdfOptions::KEY_GLOBAL_TITLE => __('Return PDF'),
PdfOptions::KEY_PAGE_ENCODING => PdfOptions::ENCODING_UTF_8,
PdfOptions::KEY_GLOBAL_ORIENTATION => PdfOptions::ORIENTATION_PORTRAIT,
PdfOptions::FLAG_PAGE_PRINT_MEDIA_TYPE,
]
)
);
$result->addPageOptions(
new PdfOptions(
[
PdfOptions::KEY_PAGE_COOKIES => ${'_COOKIE'},
]
)
);
return $result;
}
}
Header and footer html can be added as follows:
Create your header.html
and footer.html
files inside your Module template dir
<!doctype html>
<!-- app/code/Vendor/Package/view/frontend/templates/pdf/header.html -->
<html>
<body>
Header text
</body>
</html>
<!doctype html>
<!-- app/code/Vendor/Package/view/frontend/templates/pdf/footer.html -->
<html>
<body>
Footer text
</body>
</html>
Attach those files to the Controller pdf generation
<?php
namespace Vendor\Package\Controller\Actions;
use Magento\Framework\App\Action\Action;
use Magento\Framework\View\Element\Template\File\Resolver as TemplateResolver;
use Staempfli\Pdf\Model\View\PdfResult;
use Staempfli\Pdf\Service\PdfOptions;
class GeneratePdf extends Action
{
/**
* @var TemplateResolver
*/
private $templateResolver;
public function __construct(
TemplateResolver $templateResolver,
Context $context
) {
parent::__construct($context);
$this->templateResolver = $templateResolver;
}
public function execute()
{
return $this->renderPdfResult();
}
protected function renderPdfResult()
{
/** @var PdfResult $result */
$result = $this->resultFactory->create(PdfResult::TYPE);
$result->addGlobalOptions(
new PdfOptions(
[
PdfOptions::KEY_GLOBAL_TITLE => __('Return PDF'),
PdfOptions::KEY_PAGE_ENCODING => PdfOptions::ENCODING_UTF_8,
PdfOptions::KEY_GLOBAL_ORIENTATION => PdfOptions::ORIENTATION_PORTRAIT,
PdfOptions::FLAG_PAGE_PRINT_MEDIA_TYPE,
PdfOptions::KEY_PAGE_HEADER_SPACING => "10",
]
)
);
$result->addPageOptions(
new PdfOptions(
[
PdfOptions::KEY_PAGE_COOKIES => ${'_COOKIE'},
PdfOptions::KEY_PAGE_HEADER_HTML_URL => $this->templateResolver
->getTemplateFileName('Vendor_Package::pdf/header.html'),
PdfOptions::KEY_PAGE_FOOTER_HTML_URL => $this->templateResolver
->getTemplateFileName('Vendor_ Package::pdf/footer.html'),
]
)
);
return $result;
}
}
NOTE: Only the header or only the footer as html
is not possible, either both or none. Otherwise top and bottom margins are ignored.
wkhtmltopdf
should not be installed via apt-get. See:
wkhtmltopdf
version 0.12.4. It can be fixed by installing 0.12.3
If you have any issues with this extension, open an issue on GitHub.
Any contribution is highly appreciated. The best way to contribute code is to open a pull request on GitHub.
Staempfli Webteam, Fabian Schmengler, integer_net and all other contributors
Open Software License ("OSL") v. 3.0
(c) 2018, Stämpfli AG