Tworzenie plików pdf za pomocą biblioteki CakePDF
W artykule pokażę jak tworzyć w CakePHP 3 dokumenty pdf za pomocą CakePDF. Najpierw instalujemy bibliotekę za pomocą composera.
composer require friendsofcake/cakepdf
composer require dompdf/dompdf composer require tecnickcom/tcpdf composer require mpdf/mpdfTeraz musimy załadować plugin CakePdf. W pliku Application.php w metodzie bootstrap ładujemy plugin.
public function bootstrap()
{
parent::bootstrap();
...
$this->addPlugin('CakePdf', ['bootstrap' => true]);
...
}
Jeśli zamierzasz korzystać z funkcji widoku PDF, która automatycznie renderuje i zwraca plik
PDF w celu wysłania go do przeglądarki, powinieneś również zarejestrować rozszerzenie pdf w pliku config/routes.php.
Router::scope('/', function (RouteBuilder $routes) {
$routes->addExtensions(['pdf']);
});
Teraz zajmiemy się konfiguracją plugina. W tym celu można napisać np. w pliku bootstrap.php za pomocą
Configure::write.
Configure::write('CakePdf', [
'engine' => 'CakePdf.Mpdf',
'margin' => [
'bottom' => 15,
'left' => 50,
'right' => 30,
'top' => 45
],
'orientation' => 'landscape'
]);
lub ustawić właściwość kontrolera $pdfConfig (tylko gdy jest używana z PdfView).
class DemosController extends AppController
{
public function view($id = null)
{
$demo = $this->Demos->get($id);
$this->viewBuilder()->options([
'pdfConfig' => [
'orientation' => 'portrait',
'filename' => 'File_' . $id
]
]);
$this->set('demo', $demo);
}
}
Obowiązkowo musisz podać engine w konfiguracji.
Wszystkie opcje konfiguracyjne możesz znaleźć na stronie.
Użycie CakePDF
Renderowanie jako pdf. Dotyczy to również wymuszonego pobierania tzw. force download. Możesz tworzyć pliki PDF i pliki layoutów dla akcji kontrolera i automatycznie je renderować. Umieść szablony widoku w podkatalogu "pdf", na przykład src/Template/Demos/pdf/view.ctp, układy będą w src/Template/Layout/pdf/default.ctp. Upewnij się ponadto, że klasa Twojego kontrolera ładuje komponent RequestHandler. W akcji kontrolera wystarczy dodać:
$this->viewBuilder()->setClassName('CakePdf.Pdf');
Zamiast renderowania pliku PDF w przeglądarce, można zmusić go do pobrania za pomocą opcji pobierania.
Dodatkowo możesz określić niestandardową nazwę pliku za pomocą opcji nazwy pliku.
$this->viewBuilder()->options([ 'pdfConfig' => [ 'download' => true, // This can be omitted if "filename" is specified. 'filename' => 'Invoice_' . $id // This can be omitted if you want file name based on URL. ]Tworzenie surowych plików pdf w celu załączenia do emaila lub przechowywania w systemie plików. Poniżej przykład wykorzystania jako załącznik do emaila.
$CakePdf = new CakePdf();
$CakePdf->templatePath('Panel'. DS . 'Demos' . DS . 'pdf');
$CakePdf->template('export_pdf', 'default');
$CakePdf->viewVars([
'demo' => $demo
]);
$outputPdf = $CakePdf->output();
$options['attachments'] = [
'Demo_file_'.pdf' => [
'mimetype' => 'application/pdf',
'contentId' => 'po-pdf',
'data' => $outputPdf
]
];
Można też zapisać $outputPdf na dysku.
