使用 kartik-mPDF 扩展在 PDF 中打印 gridview 搜索

Print gridview search in PDF using kartik-mPDF extension

我正在使用 kartik-mpdf 库生成我的网格视图的 pdf,问题是我想将 $dataProvider 和 $searchModel 从 index.php 传递到将作为 pdf 文档呈现的视图(pdf.php), 因此,当我搜索索引并单击“Generar pdf”按钮时,它会调用 AlumnoController 上的操作 GenerarPdf 并将索引操作的相同 $searchModel 和 $dataProvider 加载到 pdf.php gridview 中并生成 pdf文件。

这是代码。 AlumnoController.php - actionGenerarPdf

public function actionGenerarPdf($searchModel, $dataProvider) 
    {
        Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
        $formatter = \Yii::$app->formatter;
        $pdf = new Pdf([
            'mode' => Pdf::MODE_CORE, // leaner size using standard fonts
            'destination' => Pdf::DEST_BROWSER,
            //Se renderiza la vista "pdf" (que abrirá la nueva ventana)
            'content' => $this->renderPartial('pdf', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider
                ]),
            'options' => [
            // any mpdf options you wish to set
            ],
            'methods' => [
                'SetTitle' => 'SIE: Sistema de Informacion Estudiantil',
                'SetSubject' => 'Generating PDF files via yii2-mpdf extension has never been easy',
                'SetHeader' => ['SIE: Sistema de Información Estudiantil||Generado el: ' . $formatter->asDate(date("r"))],
                'SetFooter' => ['|Página {PAGENO}|'],
                'SetAuthor' => 'SIE: Sistema de información Estudiantil',
                'SetCreator' => 'Juan Carlos Reyes Suazo',
//              'SetKeywords' => 'Sie, Yii2, Export, PDF, MPDF, Output, yii2-mpdf',
            ]
        ]);
        return $pdf->render();
    }

index.php

<p>
        <?php 
            if (User::isSuperAdmin(Yii::$app->user->identity->id)){
                echo Html::a('Crear Alumno', ['create'], ['class' => 'btn btn-success']); 
                echo Html::a('Ver PDF', [
                    '/alumno/generar-pdf', 
                    'searchModel' => $searchModel, 
                    'dataProvider' => $dataProvider
                        ], 
                        [
                    'class' => 'btn btn-success', 
                    'target'=>'_blank', 
                    'data-toggle'=>'tooltip', 
//    'title'=>'Will open the generated PDF file in a new window'
                ]);
            }
        ?>
    </p>

pdf.php

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            //'id',
            ['attribute' => 'nombre',
             'format' => 'raw',
             'value'=>function ($data) {
                        return Html::a($data['nombre'],['alumno/view', 'id' => $data['id']]);
                      },
             ],
            //'rut',
            ['attribute' => 'curso_id',
             'format' => 'raw',
             'value'=>function ($data) {
                        return Html::a($data['curso_id'],['curso/view', 'id' => $data['curso_id']]);
                      },
             ],
            //'fecha_nacimiento',
            //'fono',
            //'direccion',
            //'email:email',
            //'apoderado',
            ['attribute' => 'apoderado',
             'format' => 'raw',
             'value'=>function ($data) {
                          if ($data->apoderado_id != null)
                              return Html::a($data->apoderado->nombre, ['apoderado/view', 'id' => $data['apoderado_id']]);
                          else
                              return null;

                      },
             ],
            //'apoderado_suplente',
            //'fono_apoderado',
            //'fono_apoderado_sup',
            //'antecedentes_medicos',
            //'grupo_sanguineo',
            //'programa_integracion',
            //'taller_artistico',
            //'anotaciones',

            ['class' => ActionColumn::className(), 'template' => '{update} {delete}'],
        ],
    ]); ?>

我收到错误请求 (#400)

Se recibieron datos erróneos para el parámetro “searchModel”

如有任何帮助,我们将不胜感激。

我使用会话解决了这个问题,我在 actionGenerarPdf 中生成了 $searchModel 和 $dataProvider,而不是通过按钮发送它们。

我会引用来自 yii 论坛的@softark

"You can’t pass $searchModel and $dataProvider as the query parameters to an action method, because they are not such simple variables that could be converted to simple strings.

So you have to create the search model and the data provider in your actionGenerarPdf method.

In order to get back the search parameters used in the index action, you can store the query parameters in the session and retrieve them in actionGenerarPdf."

https://forum.yiiframework.com/t/print-gridview-search-in-pdf-using-kartik-mpdf-extension-solved/124925

这是代码

public function actionIndex()
    {
        
        $searchModel = new AlumnoSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        
        $session = Yii::$app->session;
        $session->open();
        $session['query_params'] = json_encode(Yii::$app->request->queryParams);
        $session->close();
    
        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }
public function actionGenerarPdf() 
    {
        $session = Yii::$app->session;
        $session->open();
        $queryParams = isset($session['query_params']) ? json_decode($session['query_params'], true) : [];
        $session->close();
        $searchModel = new AlumnoSearch();
        $dataProvider = $searchModel->search($queryParams);
        Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
        $formatter = \Yii::$app->formatter;
        $pdf = new Pdf([
            'mode' => Pdf::MODE_CORE, // leaner size using standard fonts
            'defaultFontSize' => 18,
            'orientation' => Pdf::ORIENT_PORTRAIT,
            'destination' => Pdf::DEST_BROWSER,
            //Se renderiza la vista "pdf" (que abrirá la nueva ventana)
            'content' => $this->renderPartial('pdf', ['searchModel' => $searchModel, 'dataProvider' => $dataProvider]),
            'options' => [
            // any mpdf options you wish to set
            ],
            'methods' => [
                'SetTitle' => 'SIE: Sistema de Informacion Estudiantil',
                'SetSubject' => 'Generating PDF files via yii2-mpdf extension has never been easy',
                'SetHeader' => ['SIE: Sistema de Información Estudiantil||Generado el: ' . $formatter->asDate(date("r"))],
                'SetFooter' => ['|Página {PAGENO}|'],
                'SetAuthor' => 'SIE: Sistema de información Estudiantil',
                'SetCreator' => 'Juan Carlos Reyes Suazo',
//              'SetKeywords' => 'Sie, Yii2, Export, PDF, MPDF, Output, yii2-mpdf',
            ]
        ]);
        return $pdf->render();
    }

我希望这可以帮助其他想要实现相同目标的人