Generazione PDF in Yii1


(Peppedantini) #1

Salve a tutti, ho bisogno di generare file PDF che riproducano le pagine normalmente prodotte mediante view.

Ho provato ad utilizzare l’estensione pdf (http://www.yiiframework.com/extension/pdf) ma ho problemi con l’installazione. Le due librerie utilizzate (mpdf e html2pdf) infatti richiedono a loro volta la “tcpdf”, che però sembra debba essere installata attraverso composer.

Per l’applicazione non ho mai usato composer (e il wiki che ne descrive l’uso in Yii1 è deprecato) e non ho idea di come utilizzarlo per una singola libreria. Per altro mi chiedo se non c’è modo di installare la libreria senza passare per il composer, ma tutti i tentativi sono falliti.

Qualcuno può darmi una mano? Grazie

PS: ovviamente se c’è un’alternativa più semplice rispetto all’estensione che ho indicato, ben venga.


(Fabrizio Caldarelli) #2

Puoi installare TCPDF scaricando l’intero pacchetto da:

se non hai possibilità/modo di utilizzare composer.


(Peppedantini) #3

Grazie, è una delle cose che ho già fatto ma il problema è come configurarlo all’interno dell’applicazione per poterlo utilizzare.

Nel frattempo però, dopo mille sbattimenti, c’è uno spiraglio di luce. Contrariamente a quanto immaginavo, mPDF non usa TCPDF ma lo sostituisce. E l’uso dell’estensione “pdf” con mPDF sembra funzionare.

Se la mia intuizione è corretta, l’estensione non richiede entrambe le librerie ma anche una sola delle due, con la differenza che mPDF è autonomo mentre html2pdf richiede TCPDF.

Ulteriori chiarimenti sono sempre bene accetti.


(Admin) #4

Ciao Peppe mPDF come dici tu è autonomo e puoi trovare una guida qui https://mpdf.github.io/ su come utilizzarlo. Puoi creare il pdf all’ interno dell’ action del Controller usando l’ html;




$html = ' QUI INCLUDI TUTTO CIò CHE VUOI GENERARE , TABELLE ETC.'



In caso tu debba eseguire queries e poi inserire i dati recuperati dalle stesse all’ interno del pdf, ricordati che le query vanno eseguite fuori da $html.

Esempio;




Eseguo la queries immaginaria:


$recupero_utenti = User::model()->findAllByAttributes(array('id'=>2));

foreach($recupero_utenti as $dati);


$html='

<html>

<head>

<link rel="stylesheet" type="text/css" href="'.Yii::app()->theme->baseUrl.'/css/main.css">

</head>

<body>


<table style="width:100%">

<tr>

<td>

echo Questo utente si chiama'.$dati->nome.' e si &egrave; iscritto in data etc etc etc etc ';

</td>

</tr>

</tbody>

</table>

</body>

</html>

';


$mPDF1 = Yii::app()->ePdf->mpdf('utf-8', 'A4', 0, '', 4, 4, 4, 0, 0, 0);

$mPDF1->WriteHTML($html);

$mPDF1->Output('L OUTPUT CHE PREFERISCI, O VISUALIZZI O SALVI O FAI CIO CHE VUOI');



oppure creare una vista (COME SE CREASSI UNA VISTA NORMALE PER UN RENDER) e renderizarla attraverso:




$this->layout="//se vuoi crei anche un layout personalizzato per la vista";

$mPDF1 = Yii::app()->ePdf->mpdf('utf-8', 'A4', 0, '', 4, 4, 4, 0, 0, 0);---->questi puoi gestirli come credi (trovi tutto sulla guida mpdf)


$mPDF1->WriteHTML($this->render('nom-vista-da-renderizare',array('model'=>$model e altri attributi che invii dal Controller alla vista),true));


$mPDF1->Output('NOME DEL TUO FILE'.pdf', EYiiPdf::OUTPUT_TO_DOWNLOAD);	<<<<---- IN QUESTO CASO ESEGUE IL DOWNLOAD DEL FILE AL POSTO DI APRIRLO DIRETTAMENTE.



Spero queste informazioni possano aiutarti. Io uso mPDF e mi trovo molto bene.

Un Saluto