Error generación reporte PDF

Hola a todos!

Soy bastante novato con el Framework y tengo una app hecha en PHP, utilizando el framework Yii.

Cuando los reportes tienen muchos registros, la app muere… Pero si limito estos resultados a 1000 más o menos, en el código, todo funciona bien.

Los registros los estoy generando de la siguiente manera:

$val = count($dataProvider);

while ($i < $val) {

if(&#036;i%2==0)


&#036;html.='&lt;tr class=&quot;odd&quot;&gt;';


else


&#036;html.='&lt;tr class=&quot;even&quot;&gt;';


&#036;html.='&lt;td class=&quot;td&quot; align=&quot;left&quot; valign=&quot;top&quot;&gt;' . &#036;dataProvider[&#036;i][&quot;Nombre&quot;] . '&lt;/td&gt;';


&#036;html.='&lt;td class=&quot;td&quot; align=&quot;left&quot; valign=&quot;top&quot;&gt;' . &#036;dataProvider[&#036;i][&quot;rel_idDepartamento&quot;] . '&lt;/td&gt;';


&#036;html.='&lt;td class=&quot;td&quot; align=&quot;left&quot; valign=&quot;top&quot;&gt;' . &#036;dataProvider[&#036;i][&quot;Codigo&quot;] . '&lt;/td&gt;';


&#036;html .= '&lt;/tr&gt;';


&#036;i++;

}

¿Alguna idea de este problema? ¿Debo realizar alguna parametrización extra?

De antemano, mil gracias. Un saludo!

Creo que es conveniente usar alguna extensión como mpdf, y este código meterlo a un renderPartial




public function actionImprimir()

	{

		$registros = TuModelo::model()->findAll();

		

		$this->layout="pdf";

		$mPDF1 = Yii::app()->ePdf->mpdf();

		$stylesheet = file_get_contents(Yii::getPathOfAlias('webroot.themes.bootstrap.css') . '/print.css');

		$mPDF1->WriteHTML($stylesheet,1);

		$mPDF1->AddPage('L');

		$mPDF1->WriteHTML($this->renderPartial('imprimir', array('registros' => $registros),true),2);

		$mPDF1->Output();

	}



Esto debería de ayudarte, a mi me funciona bien con muchos registros.

Hola Roberto, muchas gracias!

Lo pondré en práctica.

Saludos.

ps es buena solución el utilizar una libreria alguna, pero eso no resuelve el problema, el problema aqui es fuera de EL FRAMEWORK, es tu tiempo de ejecución máximo…, para eso se utiizar la max_execution_time(), QUE ES PROPIO DE PHP, el tiempo máximo de ejecución POR DEFAULT es de 30 segundos, entonces si tu consulta es de cientos o miles de registros, logicamente esto depende de la red de cada quien y el tipo de servidor que tengamos y claro, como armemos nuestra consulta liberando segundos, funcionara asi como lo tienes, o con cualquier libreia, sea para pdf, o excel o etc, el problema aqui es que le tienes que incrementar el tiempo maximo de ejecución max_execution_time(90) o los segundos que tu creas convenientes, pero "CUIDADO", si tienes muchos usuarios y tu server no es muy bueno, si hacen muchas peticiones se pueden ir acabando tu memoria del server, y logicamente, tendras que ponerme mas segundos a el tiempo de ejecución, y poniendola esa linea antes donde generas la consulta o como extraes los datos con esta linea max_execution_time() es mas que suficiente, te vuelvo a repetir, eso es fuera de YII, es en si PHP PURO. Saludos

Si no es requerimietno imprimir todos los registros simultáneamente, entonces sería mejor utilizar paginación… El widget GridView hace excelentemente la tarea.

Y si es necesario obtener todos los registros de una vez (no suele ser común) entonces recomiendo exportar los datos, ya sea en CSV, .XLS, .XLSX o PDF.

Si necesita algún componente para exportación, podemos darle una mano :) Hay varios compatibles con Yii.

Saludos.