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;">☎</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.