How to get CakePdf to work in CakePHP 3.x?

给你一囗甜甜゛ 提交于 2019-12-12 15:09:49

问题


I have installed CakePdf plugin in app/plugins folder and followed all the documentation possbile, thus my settings are as following:

// config/bootstrap.php

Plugin::load('CakePdf', ['bootstrap' => true, 'routes' => true]);

Configure::write('CakePdf', [
            'engine' => 'CakePdf.WkHtmlToPdf',
            'binary' => '/wkhtmltopdf/bin/wkhtmltopdf',
            'margin' => [
                'bottom' => 15,
                'left' => 50,
                'right' => 30,
                'top' => 45
            ],
            'orientation' => 'landscape',
            'download' => true
]);


// config/routes.php

Router::extensions(['pdf']);

// controller/AppController.php


    public function initialize()
{
    parent::initialize();

    $this->loadComponent('RequestHandler');
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
            'authenticate' => ['Form' => ['fields' => ['username' => 'email', 'password' => 'password']]],
            'loginAction' => ['controller' => 'Users', 'action' => 'login'],
            'loginRedirect' => ['controller' => 'Users', 'action' => 'index'],
            'logoutRedirect' => ['controller' => 'Users', 'action' => 'login'],
            'authorize' => 'Controller'
    ]);  
}

Here is how a sample agendaPdf action looks like:

function agendaPdf(){

    $agenda = 'sample agenda';
    $this->viewBuilder()->options([
        'pdfConfig' => [
            'orientation' => 'portrait',
            'filename' => 'agenda_123'
        ]
    ]);

    $this->set('agenda', $agenda);

}

I have PDF layouts done, as well as a PDF folder inside the templates folder for the model's actions, however, if I go to app/users/agendapdf.pdf, I am given the following messages:

The action agendapdf.pdf is not defined in UsersController Error: Create UsersController::agendapdf.pdf() in file: src/Controller/UsersController.php.

I would really like to know what could have went wrong and how I can fix it to work.


回答1:


CakePdf does not include any of the supported PDF engines, so i tried wkhtmltopdf( Refered Link).

Step by Step process:

1. Install wkhtmltopdf binary file in your local or server system (Ubuntu, Window, Mac) - Download link : [wkhtmltopdf][2]

2. Check the installed location of wkhtmltopdf binary file - (i am using    ubuntu so installed location is /usr/local/bin)

3. configure the wkhtmltopdf with cakephp:
    - in : config/bootstrap.php like below:

    Plugin::load('CakePdf', ['bootstrap' => true, 'routes' => true]);

    Configure::write('CakePdf', [
        'engine' => 'CakePdf.WkHtmlToPdf',
        'margin' => [
            'bottom' => 15,
            'left' => 50,
            'right' => 30,
            'top' => 45
        ],
        'orientation' => 'landscape',
        'download' => true
    ]);

    - Create a folder name "pdf" under your working template view folder:
        * for ex: src/template/(working view folder)/pdf (src/template/budget/pdf)

    - Create a file name "view.ctp" under newly created pdf folder under working directory:
        * for ex: src/template/(working view folder)/pdf/view.ctp (src/template/budget/pdf/view.ctp)

    - use below code in working controller - action(view - method)

            $this->viewBuilder()->options([
                'pdfConfig' => [
                    'orientation' => 'portrait',
                    'filename' => 'Invoice_' . $id
                ]
            ]);

        * for ex:

        public function view($id = null)
        {
            $budget = $this->budget->get($id);
            $this->viewBuilder()->options([
                'pdfConfig' => [
                    'orientation' => 'portrait',
                    'filename' => 'Invoice_' . $id
                ]
            ]);
            $this->set('budget', $budget);
        }

        - Hit the controller and action to download as PDF.
            * for ex: http://localhost:8765/projects/view/1.pdf

        - if you are facing "wkhtmltopdf binary is not found or not executable" error. copy your wkhtmltopdf file from "/usr/local/bin" to "/usr/bin"
            * cd /usr/local/bin
            * sudo cp wkhtmltoimage /usr/bin/wkhtmltoimage
            * sudo cp wkhtmltopdf /usr/bin/wkhtmltopdf


来源:https://stackoverflow.com/questions/36133675/how-to-get-cakepdf-to-work-in-cakephp-3-x

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!