Alguien que me pueda ayudar...no puedo generar un pdf :c


(Jorge+) #1

No llevo mucho que empeze a usar yii, y lo que actualmente estoy tratando de hacer es generar un pdf para credenciales, pero simplemente los errores no me han permitido continuar.
El error que actualemente me causa muchos problemas es este:
“DatosController cannot find the requested view “pdf”.”
La verdd ya hizo todo lo que he podido encontrar en foros sobre esto pero nada ha funcionado.
Les dejo los codigos que me dice yii que estan erroneos
Mi controller:
public function actionPdf($id)
{
$model=$this->loadModel($id);
$mPDF1 = Yii::app()->ePdf->mpdf(‘utf-8’,‘A4’,’’,’’,15,15,35,25,9,9,‘P’);
$mPDF1->useOnlyCoreFonts = true;
$mPDF1->SetTitle(“xxxxxxxxxx - Reporte”);
$mPDF1->SetAuthor("");
$mPDF1->watermark_font = ‘DejaVuSansCondensed’;
$mPDF1->watermarkTextAlpha = 0.1;
$mPDF1->SetDisplayMode(‘fullpage’);
$mPDF1->WriteHTML($this->render(‘pdf’,array(‘model’=>$this->loadModel($id),true)));
$mPDF1->Output(‘Reporte_’.date(‘YmdHis’),‘I’);
exit;
}
Ahora les dejare mi vista para el pdf, debo aclarar que no es .php sino .html:

body { font-family: "Aparajita"; font-size: 10pt; } .ppal{ padding-top: 25px; }
Alumno <?php echo $model->datos->Nombre; ?> de la especialidad de <?php echo $model->datos->Especialidad; ?>
E. S. D.

La verdad si alguien mo pudiera ayudar se los agradeceria muho, ya estoy desesperado de que simplemente no me puede salir por los errores ,xD Muchas gracias y pasen bueno dias, tardes o noches.

(Jiuly Rojas) #2

Este error dice que no puede encontrar la vista pdf en behaviors revisa si estas llamando a esta vista .

public function behaviors()
{

    return [
        'access' => [
            'class' => AccessControl::className(),
           
            'rules' => [
                [
                    'allow' => true,
                    'actions' => ['index','create','pdf'

(Admin) #3

Pero el archivo de vista debe ser .php… Estás usando php en la vista…


(Jorge+) #4

Resulto que si fue el problema que menciono bravantia, cuando decidi crear una nueva vista, pero esta vez en lugar de html la cree como un .php y ya no me marco erro…solo que ahora apesar de que tengo texto a mostrar no lo muestra solo me pone una hoja en blanco, decidi mejor poner toda la vista a mostrar en mi controlador y ni asi.
Les dejo el codigo que actualmente estoy usando para la vista:
$model=$this->loadModel($id);
$mPDF1 = Yii::app()->ePdf->mpdf(‘utf-8’,‘A4’,’’,’’,15,15,35,25,9,9,‘P’);
$mPDF1->useOnlyCoreFonts = true;
$mPDF1->SetTitle(“Credencial familiar ITC”);
$mPDF1->SetAuthor("");
$mPDF1->SetDisplayMode(‘fullpage’);
$mPDF1->WriteHTML($html);
$mPDF1->Output();
exit;
Para el WriteHTML lo de $html es la vista que ya tengo puesta en el controlador, es solamente un hola…pero como les digo no lo muestra :,c
Si me pudieran ayudar se los agradeceria


(Admin) #5

Yo lo pongo así y funcionando…

CONFIG/MAIN:
Saco aquí la configuración del componente y los estilos para la vista…

// Pdf
use kartik\mpdf\Pdf;
...
// N. setup Krajee Pdf component
		'pdf' => [
			'class' => Pdf::classname(),
			'format' => Pdf::FORMAT_A4,
			'orientation' => Pdf::ORIENT_PORTRAIT,
			'destination' => Pdf::DEST_BROWSER,
			'mode' => Pdf::MODE_CORE, // leaner size using standard fonts
			'marginLeft' => 30, //mm 
			'marginRight' => 15, //mm 
			'marginTop' => 20, //mm 
			'marginBottom' => 20, //mm 
			'marginHeader' => 10, //mm 
			'marginFooter' => 10, //mm 
			'cssFile' => '@vendor/kartik-v/yii2-mpdf/assets/kv-mpdf-bootstrap.min.css', // media print
			//'cssInline' => '.kv-heading-1{font-size:18px}', 
			'cssInline' => '
				h1 {font-size: 30px; margin-top: 10px; margin-bottom: 10px;}
				h2 {font-size: 20px; margin-top: 5px; margin-bottom: 5px;}
				h3 {font-size: 18px; margin-top: 5px; margin-bottom: 5px;}
				h4 {font-size: 16px; margin-top: 5px; margin-bottom: 5px;}
				p {font-size: 12px; margin: 0; padding: 0; }
				.pdf-tab-1{margin-left: 50px;}
				.pdf-tab-2{margin-left: 100px;}
				.pdf-tab-3{margin-left: 150px;}
				.jumbotron .box-sig {width: 25%; float: right; background: #FFF; padding: 3px; text-align: center;}
				.jumbotron p {font-size: 35px;}
				.jumbotron h1 {display: block; width: 100%; text-align: center;}
				.table {background: transparent;}
				.table-bordered {background: transparent;}
				.bra-ficha th {width: 20%; padding: 3px 6px; font-size: 12px; background: transparent;}
				.bra-ficha td {padding: 3px 6px; font-size: 13px; background: transparent;}
				.bra-list td {padding: 0 5px; font-size: 11px; line-height: 11px; background: transparent;}
				.bra-nombre {font-weight: bold; font-size: 14px; }
				.bra-imagen {max-height: 50px; }				
			', 
			// refer settings section for all configuration options
		],

CONTROLLER:
Ejemplo pasando parámetros a la vista, uso de header, footer, marca de agua…
Los títulos, cabecera y demás los tengo como parámentros en CONFIG/PARAMS como puedes ver…

public function actionPdf()
        {
    		$model1 = Nivel1::getNivel1All();
    		$titulo = "Listado Nivel1";
    		 
    		// PDF ----------------------------------------------------------------------------------------
    		Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;  // Primera linea FORMAT_RAW imprescindible
    		// Definido component pdf en /common/config/main con parametros generales
    		$pdf = Yii::$app->pdf;
    		$pdf->content = $this->renderPartial('_pdf', ['model1' => $model1, 'titulo' => $titulo]);
    		$pdf->options = [
    				'title' => Yii::$app->params['pdfCabecera'],
    				'subject' => Yii::$app->params['pdfCabecera'].'-'.Yii::$app->params['pdfSubcabecera'].'-'.$titulo,
    				// 'showWatermarkText'=>true,
    				'showWatermarkImage' => true,
    				'watermarkImgBehind' => true,
    			];
    		$pdf->methods = [
    				'SetHeader' => [Yii::$app->params['pdfCabecera'].'|'.Yii::$app->params['pdfSubcabecera'].'|'.$titulo],
    				'SetFooter' => [Yii::$app->params['pdfAutor'].'|'.Yii::$app->params['pdfFecha'].'|Página {PAGENO}'],
    				// 'SetWatermarkText'=>['Draft'],
    				// 'D': default i.e. original size of image - may depend on img_dpi, 'P':Resize to fit the full page size, keeping aspect ratio, 'F': Resize to fit the print-area (frame) respecting current page margins, keeping aspect ratio
    				'SetWatermarkImage'=>[Yii::$app->params['pdfWatermarkAbsUrl'], 0.5, 'D', array(30,80) ],
    			];
    		$pdf->filename = $titulo.' ('.Yii::$app->params['pdfFecha'].').pdf';
    		return $pdf->render();
    		// ------------------------------------------------------------------------------------------------
    	}

VIEW _pdf:

<?php
use yii\helpers\Html;

/* @var $this yii\web\View */
/* @var $model1 backend\models\Nivel1 */
/* @var $titulo */
?>

<div class="jumbotron">
	<h1><?= Html::encode($titulo);?></h1>
</div>

<?php 
foreach ($model1 as $m1) {
?>
	<h2> <?= $m1->orden.'. '.$m1->nombre; ?> </h2>
<?php }	?>