Al tener diferentes datos, es muy lógico que vamos a querer exportar esto a un formato, en este caso a PDF. Por suerte, YII trae algunas extensiones que nos facilitan mucho esto, ya que ocupan librerías de PHP para trabajar con PDF, como mpdf y html2pdf.
La extensión que utilizaremos será yii-pdf, la cual la podemos descargar desde http://www.yiiframework.com/extension/pdf/
Al descargarla, debemos ubicar el directorio dentro de extensions, quedando:
/protected/extensions/yii-pdf
Luego debemos descargar las librerías que utiliza esta extensión, las podemos descargar desde:
http://www.mpdf1.com/mpdf/download
http://html2pdf.fr/en/download
Estas las podemos ubicar en el directorio vendors (el directorio vendors lo debemos crear), quedando:
/protected/vendors/mpdf
/protected/vendors/html2pdf
*Vendors es donde dejamos los elementos creados por terceros, que no son creados específicamente para el framework YII.
En sí, no son necesarias ambas, sino, que la extensión nos permite utilizar cualquiera de las dos.
Volviendo a la web de la extensión, copiamos el código en el fichero main.php, quedando algo como lo siguiente:
'components'=>array( 'ePdf' => array( 'class' => 'ext.yii-pdf.EYiiPdf', 'params' => array( 'mpdf' => array( 'librarySourcePath' => 'application.vendors.mpdf.*', 'constants' => array( '_MPDF_TEMP_PATH' => Yii::getPathOfAlias('application.runtime'), ), 'class'=>'mpdf', ), 'HTML2PDF' => array( 'librarySourcePath' => 'application.vendors.html2pdf.*', 'classFile' => 'html2pdf.class.php', ) ), ), //Resto del código
*El ejemplo que sale en la web, es mucho más extenso, pero elimine lo comentado.
Ahora debemos configurar el controlador de donde queremos generar los PDF, según mi punto de vista, a diferencia del excel, en PDF no quiero generar todos los datos, sino, quiero generar fichas, por lo cual, se generará un PDF por registro, producto de lo anterior, debemos crear la función crearPDF, de la siguiente forma:
public function actionCrearPdf($id){ $mPDF1 = Yii::app()->ePdf->mpdf(); $mPDF1->WriteHTML( $this->render('pdf',array( 'model'=>$this->loadModel($id), true )) ); $mPDF1->Output(); }
Luego, debemos crear una vista llamada pdf.php (puede tener otro nombre), por ejemplo, debería quedar algo como /protected/views/usuarios/pdf.php, este fichero debe componerse de la siguiente forma:
RUN: $model->rut-$model->dv Nombres: $model->nombre HERE; $mpdf = new mPDF('utf-8','LETTER','','',15,15,25,12,5,7); $mpdf->SetHeader(Yii::app()->name); $mpdf->SetFooter('Pie de página'); $mpdf->SetWatermarkImage("/images/logo.jpg"); $mpdf ->showWatermarkImage = true; $mpdf->WriteHTML($html); $mpdf->Output('Ficha-Usuario_'.$model->rut.'-'.$model->dv.'.pdf','I'); exit; ?> Apellidos: $model->apellidos
En el ejemplo anterior, tenemos una tabla que va mostrando los atributos del modelo, en este caso RUN,NOMBRE, APELLIDOS, luego empezamos a configurar mpdf. Con esto ya tenemos configurado para generar el PDF, ahora, agregaremos un ícono para acceder al PDF, para esto, vamos a la vista admin.php, y buscamos donde tenemos:
array ( 'class'=>'CButtonColumn', ),y lo reemplazamos por:
array( 'class'=>'CButtonColumn', 'template' => '{view} {update} {delete} {pdf}', 'buttons'=>array( 'pdf' => array( 'label'=>'Generar PDF', 'url'=>"CHtml::normalizeUrl(array('crearpdf', 'id'=>\$data->idusuarios))", 'imageUrl'=>Yii::app()->request->baseUrl.'/images/pdf_icon.png', 'options' => array('class'=>'pdf'), ), ), ),
*Debemos tener una imagen de pdf, por ejemplo /images/pdf_icon.png
Con esto, ya tenemos todo listo, y nos aparecerá un botón para acceder al pdf, como lo siguiente:
2 comentarios:
Amigo me sigue dando un error me sale esto
Illegal string offset 'ID'
Publicar un comentario