Back to top

Autore Topic: Pdf nei componenti sviluppati.  (Letto 6047 volte)

mau_develop

  • Visitatore
Pdf nei componenti sviluppati.
« il: 04 Dic 2010, 22:03:48 »
Siccome è una domanda che ogni tanto viene posta vedo di dare una soluzione, grabbata dal post di un utente di joomla.org, che sembra funzionare.

Joomla usa tcpdf e quindi con tcpdf volevo restare, dopo vediamo come usare alternative.

Innanzitutto la versione di tcpdf usata da joomla è vecchia e non supporta moltissime cose che rendono molto più semplice l'utilizzo.
Quello che ho rilevato purtroppo è che se si fa l'upgrade, che è molto semplice, basta sostituire la cartella in /libraries, non funzionano più gli script di joomla, ...probabilmente c'è qualche incompatibilità, ...maaa nessun problema :)

Scarichiamo ugualmente l'ultima versione di tcpdf e la mettiamo in una cartella assets/libraries del nostro componente.

A qs punto vedete un po' voi come fare con l'mvc, io avevo una view.pdf e lì l'ho usata ma ho notato dei piccoli malfunzionamenti, probabilmente dovuti a qs... magari modificherò...

allora diciamo.. pulsante che chiama il metodo miopdf() nel controller che istanzia una view('miaview', pdf);

nella view.pdf.php:
----------------------------

function display($tpl = null) {
      //parent::display();
      // create new PDF document
      require_once(JPATH_COMPONENT.DS.'assets'.DS.'libraries'.DS.'tcpdf'.DS.'config'.DS.'lang'.DS.'ita.php');
      require_once(JPATH_COMPONENT.DS.'assets'.DS.'libraries'.DS.'tcpdf'.DS.'tcpdf.php');
      
      $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
      
      // set document information
      $pdf->SetCreator(PDF_CREATOR);
      $pdf->SetAuthor('Nicola Asuni');
      $pdf->SetTitle('TCPDF Example 001');
      $pdf->SetSubject('TCPDF Tutorial');
      $pdf->SetKeywords('TCPDF, PDF, example, test, guide');
      
      // set default header data
      $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING);
      
      // set header and footer fonts
      $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
      $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
      
      // set default monospaced font
      $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
      
      //set margins
      $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
      $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
      $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
      
      //set auto page breaks
      $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
      
      //set image scale factor
      $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
      
      //set some language-dependent strings
      $pdf->setLanguageArray($l);
      
      // ---------------------------------------------------------
      
      // set default font subsetting mode
      $pdf->setFontSubsetting(true);
      
      // Set font
      // dejavusans è un UTF-8 Unicode font, se vuoi solamente stampare ASCII chars, puoi usare core fonts come
      // helvetica o times per ridurre le dimensioni del file.
      $pdf->SetFont('dejavusans', '', 14, '', true);
      
      // Add a page
      // Questo metodo ha varie opzioni, guarda la documentazione
      $pdf->AddPage();

      // Set some content to print
      $html = '
      <h1>Welcome to <a href="http://www.tcpdf.org" style="text-decoration:none;color:black;"><span style="background-color:#CC0000;"> TC<span style="color:white;">PDF</span> </span>[/url]!</h1>
      This is the first example of TCPDF library.
      <p>This text is printed using the writeHTMLCell() method but you can also use: Multicell(), writeHTML(), Write(), Cell() and Text().</p>
      <p>Please check the source code documentation and other examples for further information.</p>
      <p style="color:#CC0000;">TO IMPROVE AND EXPAND TCPDF I NEED YOUR SUPPORT, PLEASE MAKE A DONATION!</p>';
   
      // Print text using writeHTMLCell()
      $pdf->writeHTMLCell($w=0, $h=0, $x='100', $y='', $html, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=true);
      
      // Close and output PDF document
      // Questo metodo ha varie opzioni, guarda la documentazione
      $pdf->Output('example_001.pdf', 'D');

   }

in questo modo è indipendente da tcpdf usato da joomla.
Come si può vedere, negli script vengono usate molte costanti definite nella configurazione (define) che trovate nelle sue cartelle, dove c'è ampia documentazione ed esempi d'uso.

Dicevamo prima... usare altre classi invece di tcpdf... non cambia nulla, mettete la cartella accanto a tcpdf
fate l'import che normalmente joomla fa con jimport:

      require_once(JPATH_COMPONENT.DS.'assets'.DS.'libraries'.DS.'CLASSE_CARTELLA'.DS.'CLASSE_FILE.php');

... e così con tutti i files richiesti dalla classe.

Attenzione a non usare classi non compatibili con utf-8

M.

Offline ilsikulo

  • Nuovo arrivato
  • *
  • Post: 6
    • Mostra profilo
Re:Pdf nei componenti sviluppati.
« Risposta #1 il: 15 Gen 2011, 14:09:25 »
Ciao
innanzitutto complimenti per il post. Stavo considerando l'aggiornamento all'ultima versione di tcpdf nel mio componente e ho seguito la tua guida.
Purtroppo seguendo la procedura che descrivi mi appare il seguente errore:

Fatal error: Cannot redeclare class TCPDF

Capisco esattamente a cosa è dovuto, ovviamente viene ridichiarata la classe TCPD durante l'inclusione della libreria. Come risolvere??.....Non riesco a trovare una soluzione che non preveda la disabilitazione della libreria standard di joomla (non vorrei arrivare a questo dal momento che vorrei mantenere la possibilità di esportare gli articoli come pdf)
Qualche idea?.....

mau_develop

  • Visitatore
Re:Pdf nei componenti sviluppati.
« Risposta #2 il: 15 Gen 2011, 15:09:49 »
non saprei.

M.

Offline dero

  • Esploratore
  • **
  • Post: 107
  • Sesso: Maschio
    • Mostra profilo
Re:Pdf nei componenti sviluppati.
« Risposta #3 il: 23 Ago 2011, 11:42:58 »
Ho lavorato parecchio per fare due esportazioni pdf con questo componente.
Direi divertente e dai risultati piacevoli.
Ho solo un problema.
Ho un'immagine di sfondo che deve vedersi in background. Quando trova il testo breve che rientra in una pagina funziona perfettamente. Se invece il testo sfocia in una seconda pagina non mi trovo l'immagine di sfondo.
Sai dirmi cosa posso modificare?
grazie
Perchè non riesco a mettere la firma nel mio sito???

mau_develop

  • Visitatore
Re:Pdf nei componenti sviluppati.
« Risposta #4 il: 23 Ago 2011, 12:57:25 »
Accidenti!... non ricordavo nemmeno più questo articolo... e pensare che l'altro giorno sono ricascato nel problema e ho dovuto rispulciare vecchi archivi... che bamba! :)

cmq... aggiorno un po'...

-  con la 1.7 cambia! ...non ha la classe implementata e quindi se la volete ve la dovete implementare così, negli articoli o fate voi un plugin o non rimane che phoca pdf.
Sostanzialmente il tutorial è cmq valido... usi quasi nulla di J

-Fatal error: Cannot redeclare class TCPDF
Quando capita qs errore è perchè:
- i dati non sono raw, o
-...parte qualche header html prima degli header pdf, in qs caso consiglio di racchiudere il codice in una var che implementerete ad ogni riga con: $pippo .= '<tagcode>';
- ricordatevi degli headers! non è un documento html è pdf... altrimenti non lo aprite o conterrà errori.

@ dero... e per venire alla tua domanda.... credo che il problema sia di tcpdf.
hai guardato tra i vari tutorial se esiste qualche tricks? difficile non sia già capitato a qualcuno, quando ho tempo ci guardo.

M.

Offline dero

  • Esploratore
  • **
  • Post: 107
  • Sesso: Maschio
    • Mostra profilo
Re:Pdf nei componenti sviluppati.
« Risposta #5 il: 24 Ago 2011, 09:05:50 »
Io ho cercato parecchio in giro, ma non riesco a capire quale sia l'impostazione da modificare.
Se riesci a darmi un'indicazione mi fai una cortesia.
Nell'esempio vengono create pagine nuove con lo sfondo ogni volta. Io pesco dati dal db e non posso fare come lui.
Perchè non riesco a mettere la firma nel mio sito???

Offline tampe125

  • Appassionato
  • ***
  • Post: 366
    • Mostra profilo
Re:Pdf nei componenti sviluppati.
« Risposta #6 il: 24 Ago 2011, 11:32:41 »
per mettere l'immagine come sfondo devi estendere la classe tcpdf perchè devi lavorare con i breakMargin.
ci sono diventato un po' scemo anch'io, guarda questo esempio http://www.tcpdf.org/examples/example_051.phps , se lo copi pari pari dorvebbe funzionare tutto.
www.fabbricabinaria.it
Soluzioni originali ad esigenze quotidiane

Offline dero

  • Esploratore
  • **
  • Post: 107
  • Sesso: Maschio
    • Mostra profilo
Re:Pdf nei componenti sviluppati.
« Risposta #7 il: 24 Ago 2011, 12:04:10 »
io l'ho messa l'immagine, ma mi appare nella prima pagina e basta!

Perchè non riesco a mettere la firma nel mio sito???

Offline tampe125

  • Appassionato
  • ***
  • Post: 366
    • Mostra profilo
Re:Pdf nei componenti sviluppati.
« Risposta #8 il: 24 Ago 2011, 14:29:08 »
non devi solo mettere l'immagine, devi estendere la classe perchè nella funzione che "costruisce" l'header devi prima salvarti il margine per il break, poi setti l'immagine e poi rimetti il vecchio margine.

cmq anch'io mi sono trovato nella solita situazione e ho risolto seguendo passo passo l'esempio che ti ho dato
www.fabbricabinaria.it
Soluzioni originali ad esigenze quotidiane

Offline dero

  • Esploratore
  • **
  • Post: 107
  • Sesso: Maschio
    • Mostra profilo
Re:Pdf nei componenti sviluppati.
« Risposta #9 il: 25 Ago 2011, 08:53:06 »
Funziona...  ;D
grazie davvero
Non avevo notato un paio di cose nonostante mi basassi sullo stesso esempio.
Davo per scontato che il problema fosse un altro
Perchè non riesco a mettere la firma nel mio sito???

 



Web Design Bolzano Kreatif