2010-02-17 12 views
5

Attualmente utilizzo FPDF per creare report abbastanza complicati e sto cercando di eseguire l'aggiornamento a TCPDF, ma ho scoperto che il mio stesso codice che scorre attraverso TCPDF è circa due volte più lento. Poiché i miei PDF richiedono già un minuto per generare non posso davvero permettermi di avere questo rallentamento, ma mi piacerebbe davvero approfittare di alcune funzionalità di TCPDF (come la creazione di segnalibri).TCPDF due volte più lento di FPDF con lo stesso codice

Se qualcuno ha qualche informazione su questo problema, lo apprezzerei molto: o cose che hai fatto per rendere TCPDF più veloce, o semplicemente conferma che funziona più lentamente di FPDF, quindi posso dimenticarlo e limitarmi a usare FPDF.

risposta

0

Le prestazioni di TCPDF possono essere regolate disabilitando le funzionalità non utilizzate sul file di configurazione e disattivando le funzioni lente come il subsettaggio dei font. Usando solo i font di base (come Helvetica, Times, ...) in modalità non UTF8 è possibile ottenere buone prestazioni. Inoltre puoi installare XCache sul tuo server per aumentare le prestazioni di PHP. Controllare il sito Web ufficiale e i forum http://www.tcpdf.org per ulteriori informazioni.

4

Ecco una soluzione dolce, mi fa la barba 2 minuti. I PDF sono creati in 3 secondi!

http://www.bitrealm.net/2010/08/tcpdf-is-slow-here-is-the-solution/

Sostituire

$font = $this->_getTrueTypeFontSubset($font, $subsetchars); 

con questo:

/ Alcal: $font2cache modification 
// This modification creates utf-8 fonts only the first time, 
// after that it uses cache file which dramatically reduces execution time 
if (!file_exists($fontfile.'.cached')){ 
// calculate $font first time 
$subsetchars = array_fill(0, 512, true); // fill subset for all chars 0-512 
$font = $this->_getTrueTypeFontSubset($font, $subsetchars); // this part is actually slow! 
// and then save $font to file for further use 
$fp=fopen($fontfile.'.cached','w'); 
$flat_array = serialize($font); // 
fwrite($fp,$flat_array); 
fclose($fp); 
} 
else { 
// cache file exist, load file 
$fp=fopen($fontfile.'.cached','r'); 
$flat_array = fread($fp,filesize($fontfile.'.cached')); 
fclose($fp); 
$font = unserialize($flat_array); 
} 
1

Dalla versione 5.9.067 TCPDF spettacoli sono stati drasticamente migliorati. Ogni nuova versione sembra funzionare meglio. Inoltre è possibile impostare per incrementare le prestazioni, come spiegato in http://www.tcpdf.org/performances.php

2

http://www.tcpdf.org/performances.php

by TCPDF predefinito consente carattere sottoinsiemi per ridurre la dimensione dei caratteri Unicode TTF incorporati, questo processo, che è molto lento e richiede un sacco di memoria, può essere disattivata usando il metodo setFontSubsetting (false);

Questa era la vera soluzione per me.

Problemi correlati