Как сделать PDF из HTML, используя CakePdf?Я следовал инструкциям, приведенным в github, но получил сообщение об ошибке «Не удалось загрузить документ PDF»? - PullRequest
0 голосов
/ 02 декабря 2018

Я установил плагины CakePdf, используя composer.Поэтому в папке моего поставщика у меня есть плагин CakePdf и другие зависимости.

Я скачал wkhtmltopdf и установил его в каталог.Каталог: C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe

Затем, запустив команду ./bin/cake plugin load CakePdf -b, я добавил плагин в src/application.php

$this->addPlugin('CakePdf', ['bootstrap' => true]);

Затем я написал следующую строку в config/routes.php как раз перед Router::scope

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

И в config/bootstrap.php

Configure::write('CakePdf', [
    'engine' => [
        'className' => 'CakePdf.WkHtmlToPdf',
        'binary' => 'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe',
        'options' => [
            'print-media-type' => false,
            'outline' => true,
            'dpi' => 96
        ],
    ],
]);

Теперь в моем действии abc controller view я написал

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

У меня также естьсоздал view.ctp внутри src/Templates/abc/pdf/view.ctp и default.pdf макет внутри src/Templates/Layout/pdf/default.ctp.

Теперь, когда я перехожу к localhost/abc/view/1.pdf, я получаю сообщение об ошибке Failed to load PDF document!

Не удалось загрузить документ PDF

Мне бы очень хотелось узнать, что могло пойти не так и как я могу это исправить?

1 Ответ

0 голосов
/ 07 июля 2019

В моем случае у меня были файлы макета и шаблона AdminLTE, настроенные в методе beforeRender AppController, поэтому он переопределял мой макет и шаблон непосредственно перед предоставлением представления.

Я изменил метод beforeRender класса AppController на что-то подобное:

    public function beforeRender(Event $event)
    {
        switch ($this->request->params['_ext']) {
          case 'pdf':
            break;
          default:
            $this->viewBuilder()->setTheme('AdminLTE');
            $this->viewBuilder()->setClassName('AdminLTE.AdminLTE');
            break;
        }
    }

и плагин CakePdf начал генерировать PDF-файлы, как и должно быть.

...