Reportes en Yii (Exportar a PDF)

| 2013-05-1 | No hay comentarios »

Lo primero que necesitamos para exportar a PDF es descargar la extensión EYiiPdf y ponerlo en la carpeta extensions, posteriormente debemos descargar http://www.mpdf1.com/mpdf/download y ponerlo en la carpeta vendors con el nombre de mpdf dentro de protected.

– En el main.php (config) debemos de agregar en el array components lo siguiente:


'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', // the literal class filename to be loaded from the vendors folder
 /*'defaultParams' => array( // More info: http://mpdf1.com/manual/index.php?tid=184
 'mode' => '', // This parameter specifies the mode of the new document.
 'format' => 'A4', // format A4, A5, ...
 'default_font_size' => 0, // Sets the default document font size in points (pt)
 'default_font' => '', // Sets the default font-family for the new document.
 'mgl' => 15, // margin_left. Sets the page margins for the new document.
 'mgr' => 15, // margin_right
 'mgt' => 16, // margin_top
 'mgb' => 16, // margin_bottom
 'mgh' => 9, // margin_header
 'mgf' => 9, // margin_footer
 'orientation' => 'P', // landscape or portrait orientation
 )*/
 ),
 ),
 ),

– En el controlador productos (voy a usar de ejemplo) debemos agregar lo siguiente:

Para entender el ejemplo dejo la tabla productos:

CREATE TABLE `productos` (
`id_producto` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id_categoria` int(10) NOT NULL,
`id_marca` int(10) NOT NULL,
`descripcion` varchar(150) NOT NULL,
`unidad_medida` varchar(80) NOT NULL,
`id_igv` int(10) NOT NULL,
`precio_compra` float(30,0) NOT NULL,
`descuento` float(10,2) DEFAULT NULL,
PRIMARY KEY (`id_producto`),
KEY `fk1` (`id_categoria`),
KEY `fk2` (`id_marca`),
KEY `fk3` (`id_igv`),
CONSTRAINT `fk1` FOREIGN KEY (`id_categoria`) REFERENCES `categorias` (`id_categoria`),
CONSTRAINT `fk2` FOREIGN KEY (`id_marca`) REFERENCES `marcas` (`id_marca`),
CONSTRAINT `fk3` FOREIGN KEY (`id_igv`) REFERENCES `igv` (`id_igv`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
public function actionGenerarPdf()
 {
 $model =Productos::model()->findAll(); //Consulta para buscar todos los registros
 $mPDF1 = Yii::app()->ePdf->mpdf('utf-8','A4','','',15,15,35,25,9,9,'P'); //Esto lo pueden configurar como quieren, para eso deben de entrar en la web de MPDF para ver todo lo que permite.
 $mPDF1->useOnlyCoreFonts = true;
 $mPDF1->SetTitle("JuzgadoSys - Reporte");
 $mPDF1->SetAuthor("JuzgadoSys");
 $mPDF1->SetWatermarkText("JuzgadoSys");
 $mPDF1->showWatermarkText = true;
 $mPDF1->watermark_font = 'DejaVuSansCondensed';
 $mPDF1->watermarkTextAlpha = 0.1;
 $mPDF1->SetDisplayMode('fullpage');
 $mPDF1->WriteHTML($this->renderPartial('pdfReport', array('model'=>$model), true)); //hacemos un render partial a una vista preparada, en este caso es la vista pdfReport
 $mPDF1->Output('Reporte_Productos'.date('YmdHis'),'I');  //Nombre del pdf y parámetro para ver pdf o descargarlo directamente.
 exit;
 }

– En la vista deseada (yo lo uso en el admin.php) debemos agregar un link o un botón con imagen para exportar a PDF:


<?php echo CHtml::link(CHtml::image(Yii::app()->baseUrl."/images/pdf.jpg","PDF",array("title"=>"Exportar a PDF")),array("generarpdf")); ?>

– Agregar una vista dentro de la carpeta views (en este caso /views/productos/ pdfReport.php) en el nombre modelo (yo lo uso con el nombre de pdfReport.php) debemos agregar un link o un botón con imagen para exportar a PDF:


<?php $contador=count($model); if ($model !== null):?>
<html>
<head>
<style>
 body {font-family: sans-serif;
 font-size: 10pt;
 }
 p { margin: 0pt;
 }
 td { vertical-align: top; }
 .items td {
 border-left: 0.1mm solid #000000;
 border-right: 0.1mm solid #000000;
 }
 table thead td { background-color: #EEEEEE;
 text-align: center;
 border: 0.1mm solid #000000;
 }
 .items td.blanktotal {
 background-color: #FFFFFF;
 border: 0mm none #000000;
 border-top: 0.1mm solid #000000;
 }
 .items td.totals {
 text-align: right;
 border: 0.1mm solid #000000;
 }
</style>
</head>
<body>

<!--mpdf
 <htmlpageheader name="myheader">
 <table width="100%"><tr>
 <td width="50%" style="color:#0000BB;"><span style="font-weight: bold; font-size: 14pt;">Juzgado de Paz de Hohenau</span><br />República del Paraguay<br /><span style="font-size: 15pt;">&#9742;</span> 0775-232355</td>
 <td width="50%" style="text-align: right;"><b>Listado de Productos</b></td>
 </tr></table>
 </htmlpageheader>

<htmlpagefooter name="myfooter">
 <div style="border-top: 1px solid #000000; font-size: 9pt; text-align: center; padding-top: 3mm; ">
 Página {PAGENO} de {nb}
 </div>
 </htmlpagefooter>

<sethtmlpageheader name="myheader" value="on" show-this-page="1" />
 <sethtmlpagefooter name="myfooter" value="on" />
 mpdf-->
<div style="text-align: right"><b>Fecha: </b><?php echo date("d/m/Y"); ?> </div>
<b>Total Resultados:</b> <?php echo $contador; ?>
 <table class="items" width="100%" style="font-size: 9pt; border-collapse: collapse;" cellpadding="5">
 <thead>
 <tr>
 <td width="16.666666666667%">ID</td>
 <td width="16.666666666667%">Categoría</td>
 <td width="16.666666666667%">Marca</td>
 <td width="16.666666666667%">Descripción</td>
 <td width="16.666666666667%">Unidad de medida</td>
 <td width="16.666666666667%">Precio Compra</td>
 <td width="6.666666666667%">% Dcto</td>
 <td width="6.666666666667%">% IVA</td>
 </tr>
 </thead>
 <tbody>
 <!-- ITEMS -->
 <?php foreach($model as $row): ?>
 <tr>
 <td align="center">
 <?php echo $row->id_producto; ?>
 </td>
 <td align="center">
 <?php echo $row->categoria->desc_categoria; ?>
 </td>
 <td align="center">
 <?php echo $row->marca->desc_marca; ?>
 </td>
 <td align="center">
 <?php echo $row->descripcion; ?>
 </td>
 <td align="center">
 <?php echo $row->unidad_medida; ?>
 </td>
 <td align="center">
 <?php echo MyModel::formatoPrecio($row->precio_compra); ?>
 </td>
 <td align="center">
 <?php echo ($row->descuento); ?>
 </td>
 <td align="center">
 <?php echo ($row->idIgv->desc); ?>
 </td>
 </tr>
 <?php endforeach; ?>
 <!-- FIN ITEMS -->
 <tr>
 <td class="blanktotal" colspan="8" rowspan="8"></td>
 </tr>
 </tbody>
 </table>
 </body>
 </html>
<?php endif; ?>

Con eso ya podrán exportar a PDF sin problema alguno.

Acerca del autor: Rodrigo Paszniuk

Ingeniero Informático, amante de la tecnología, la música, el ciclismo y aprender cosas nuevas.

Posts Relacionados

  • Phalcon – Framework PHP – Extensión de C
  • Reportes gráficos en Yii
  • Backup en Yii
  • Manual intermedio de Yii framework (PHP)



SEGUÍNOS EN FACEBOOK


GITHUB