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.