30 нояб. 2017 г.

Формирование PDF в Yii2. Расширение yii2-mpdf

image

Расширение от kartik-v https://github.com/kartik-v/yii2-mpdf позволяет генерировать pdf файл из html кода страницы. Этот файл удобно сохранить или распечатать
Так как я всё ещё лишён composer и приходится вручную устанавливать компоузеровские расширения, важный момент - нужно отдельно установить класс mpdf и прописать в файл vendor/composer/autoload_classmap.php

 

return array(
    'mPDF' => $vendorDir.'/kartik-v/mpdf/mpdf.php',
);

Вот код моей функции в контроллере. Мне надо для каждой статьи иметь возможность сформировать на лету PDF, поэтому передаю в функцию $id.

public function actionMpdfBlog($id) {
        $this->layout = 'pdf';
        Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
        $headers = Yii::$app->response->headers;
        $headers->add('Content-Type', 'application/pdf');
        
        $model = $this->findModel($id);
        
        //$model = $this->findModel();
        $pdf = new Pdf([
            'mode' => Pdf::MODE_UTF8, // leaner size using standard fonts
            'content' => $this->render('viewpdf', ['model'=>$model]),
            'cssFile' => '@vendor/kartik-v/yii2-mpdf/assets/kv-mpdf-bootstrap.min.css',
            'cssInline' => '.img-circle {border-radius: 50%;}', 
            'options' => [
                'title' => $model->title,
                'subject' => 'PDF'
            ],
            'methods' => [
                'SetHeader' => ['<img src="/images/inspire2_logo_20.png" class="img-circle"> Школа брейк данса INSPIRE||inspire2.ru'],
                'SetFooter' => ['|{PAGENO}|'],
            ]
        ]);
        return $pdf->render();
    }

Вызывается она кнопкой в виде страницы

<?php echo Html::a('<img class="left" width="30px" src="/images/pdf.png" /> Распечатать .PDF', ['/blog/mpdf-blog?id='.$model->id], [
                                'class'=>'btn btn-default',
                                'target'=>'_blank', 
                                'data-toggle'=>'tooltip', 
                                'title'=>'Will open the generated PDF file in a new window'
                            ]);?>