# FAQ

- 1. Esattamente qual'è la licenza di FPDF? Ci sono limitazioni all'utilizzo?
- 2. Quando tento di generare un PDF, ricevo il seguente messaggio di errore: "Some data has already been output, can't send PDF file".
- 3. I caratteri accentati vengono sostituiti da strani caratteri come Ã©.
- 4. Tento di inserire il simbolo dell'Euro ma non funziona.
- 5. Provo a visualizzare una variabile nel metodo Header, ma non viene stampato nulla.
- 6. Ho definito i metodi Header e Footer nella mia classe PDF ma non appare nulla.
- 7. Non riesco a far funzionare le interruzioni di linea. Inserisco i \n nella stringa stampata da MultiCell ma non funziona.
- 8. Per generare il PDF uso jQuery, ma non viene mostrato.
- 9. Ho disegnato un frame di dimensioni molto precise, ma quando viene stampato noto alcune differenze.
- 10. Vorrei utilizzare l'intera superficie della pagina, ma quando stampo restano sempre alcuni margini. Come posso eliminarli?
- 11. Come posso impostare uno sfondo nel mio PDF?
- 12. Come posso impostare una specifica intestazione o un piede nella prima pagina?
- 13. Vorrei poter utilizzare estensioni rese disponibili tramite diversi script. Come posso combinarle?
- 14. Come posso aprire il PDF in una nuova scheda?
- 15. Come posso inviare il PDF tramite email?
- 16. Qual'è il limite delle dimensioni dei file che posso generare con FPDF?
- 17. Posso modificare un PDF con FPDF?
- 18. Vorrei creare un motore di ricerca in PHP e indicizzare i file PDF. Posso farlo utilizzando FPDF?
- 19. Posso convertire una pagina HTML in PDF con FPDF?
- 20. Posso concatenare files PDF con FPDF?

- 1. Esattamente qual'è la licenza di FPDF? Ci sono limitazioni all'utilizzo?

  FPDF è rilasciata con licenza permissiva: non vi sono restrizioni di utilizzo. Puoi incorporarla liberamente nelle tue applicazioni (commerciali o meno), con o senza modifiche.

- 2. Quando tento di generare un PDF, ricevo il seguente messaggio di errore: "Some data has already been output, can't send PDF file".

  Non devi inviare al browser nient'altro che il solo PDF: non HTML, nessuno spazio o ritorno di carrello. Un caso comune consiste nell'avere uno spazio bianco indesiderato alla fine dello script di un file incluso.
  Se non riesci a determinare da dove possa derivare l'errore, il seguente altro messaggio di errore eventualmente apparso appena prima potrà aiutarti:
  Warning: Cannot modify header information - headers already sent by (output started at script.php:X).
  Ciò significa che lo script.php genera qualche output alla riga X. Vai a tale linea di codice e correggila. Nel caso in cui tale messaggio non appaia, prima controlla di non aver disabilitato i messaggi d'errore e poi aggiungi all'inizio del tuo script le seguenti linee:

      ob_end_clean();

- 3. I caratteri accentati vengono sostituiti da strani caratteri come Ã©.

  Non utilizzare la codifica UTF-8. I font standard FPDF utilizzano ISO-8859-1 o windows-1252. Vi è la possibilità di effettuare una conversione verso ISO-8859-1 tramite utf8_decode():

      $str = utf8_decode($str);

  Ma alcuni caratteri, come il simbolo di Euro, non possono essere convertiti correttamente. Se l'estensione iconv è disponibile, la via migliore è la seguente:

      $str = iconv('UTF-8', 'windows-1252', $str);

- 4. Tento di inserire il simbolo dell'Euro ma non funziona.

  I font standard hanno il simbolo dell'euro alla posizione 128. Puoi definire per convenienza una costante come questa:

      define('EURO', chr(128));

- 5. Provo a visualizzare una variabile nel metodo Header, ma non viene stampato nulla.

  Devi utilizzare la parola chiave `global` per accedere alle variabili globali, per esempio:

      function Header()
      {
          global $title;

          $this->SetFont('Arial', 'B', 15);
          $this->Cell(0, 10, $title, 1, 1, 'C');
      }

  In alternativa, puoi utilizzare una proprietà dell'oggetto:

      function Header()
      {
          $this->SetFont('Arial', 'B', 15);
          $this->Cell(0, 10, $this->title, 1, 1, 'C');
      }

      $pdf->title = 'My title';

- 6. Ho definito i metodi Header e Footer nella mia classe PDF ma non appare nulla.

  Devi creare un oggetto dalla classe PDF, non FPDF:

      $pdf = new PDF();

- 7. Non riesco a far funzionare le interruzioni di linea. Inserisco i \n nella stringa stampata da MultiCell ma non funziona.

  Devi chiudere la stringa tra virgolette, non tra apici singoli.

- 8. Per generare il PDF uso jQuery, ma non viene mostrato.

  Non usare una richiesta AJAX per recuperare il file PDF.

- 9. Ho disegnato un frame di dimensioni molto precise, ma quando viene stampato noto alcune differenze.

  Per rispettare le dimensioni, scegli "Nessuno" nel settaggio della scala di stampa al posto di "Restringi all'area di stampa" nel box di dialogo della stampa.

- 10. Vorrei utilizzare l'intera superficie della pagina, ma quando stampo restano sempre alcuni margini. Come posso eliminarli?

  Tutte le stampanti hanno dei margini fisici (diversi a seconda del modello), ed è quindi impossibile rimuoverli e stampare su tutta la superficie della carta.

- 11. Come posso impostare uno sfondo nel mio PDF?

  Per un'immagine, effettua una chiamata a Image() all'interno del metodo Header(), prima di ogni altro output. Per impostare un colore di sfondo usa Rect().

- 12. Come posso impostare una specifica intestazione o un piede nella prima pagina?

  Semplicemente, testa il numero di pagina:

      function Header()
      {
          if($this->PageNo()==1)
          {
              //First page
              ...
          }
          else
          {
              //Other pages
              ...
          }
      }

- 13. Vorrei poter utilizzare estensioni rese disponibili tramite diversi script. Come posso combinarle?

  Utilizza un'ereditarietà a catena. Se hai due classi, diciamo A in a.php:

      require('fpdf.php');

      class A extends FPDF
      {
      ...
      }

  e B in b.php:

      require('fpdf.php');

      class B extends FPDF
      {
      ...
      }

  poi, effettua B extend A:

      require('a.php');

      class B extends A
      {
      ...
      }

  e la tua classe extend B:

      require('b.php');

      class PDF extends B
      {
      ...
      }

      $pdf = new PDF();

- 14. Come posso aprire il PDF in una nuova scheda?

  Basta fare quanto si fa per una pagina HTML o per altro: aggiungere un target = "_blank" al proprio link o form.

- 15. Come posso inviare il PDF tramite email?

  Come ogni altro file, ma una via semplice è utilizzare PHPMailer e il suo sistema di allegati in-memory:

      $mail = new PHPMailer();
      ...
      $doc = $pdf->Output('S');
      $mail->AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf');
      $mail->Send();

- 16. Qual'è il limite delle dimensioni dei file che posso generare con FPDF?

  Non c'è un limite particolare. Ci sono comunque alcune restrizioni:
  - La massima dimensione di memoria allocata per gli script PHP è impostata. Per documenti molto grandi, specialmetne con immagini, questo limite potrebbe essere raggiunto (il file viene generato nella memoria). Questo parametro è configurabile nel file php.ini.
  - Il tempo massimo di esecuzione è impostato di default a 30 secondi. Questo limite può naturalmente essere raggiunto con facilità. E' configurato nel file php.ini e può essere alterato dinamicamente con la funzione set_time_limit().

- 17. Posso modificare un PDF con FPDF?

  Grazie all'estensione FPDI, è possibile importare pagine da un documento PDF preesistente. Poi, puoi aggiungere ad esse altro contenuto.

- 18. Vorrei creare un motore di ricerca in PHP e indicizzare i file PDF. Posso farlo utilizzando FPDF?

  No, ma esiste una utility scritta in C e rilasciata sotto licenza GPL, pdftotext, che consente di estrarre il contenuto testuale da un PDF. E' fornita col il pacchetto Xpdf.

- 19. Posso convertire una pagina HTML in PDF con FPDF?

  Non pagine del "mondo reale". No, ma esiste una utility scritta in C e rilasciata sotto licenza GPL, HTMLDOC, che permette di farlo ottenendo buoni risultati.

- 20. Posso concatenare files PDF con FPDF?

  Non direttamente, ma è possibile utilizzare FPDI per raggiungere tale obiettivo. Esistono anche alcuni tools liberi a linea di comando: pdftk e mbtPdfAsm.