Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TCPDF twice as slow as FPDF with same code

Tags:

php

pdf

fpdf

tcpdf

I currently use FPDF to create some fairly complicated reports and am trying to upgrade to TCPDF, but I've found that my same code running through TCPDF is about twice as slow. Because my PDFs already take up to a minute to generate I can't really afford to have this slowdown, but I'd really like to take advantage of some TCPDF features (like creating bookmarks).

If anyone has some information on this problem I'd really appreciate it - either things you did to make TCPDF faster, or just confirmation that it runs slower than FPDF, so I can forget about it and just stick with FPDF.

like image 401
Jacob Avatar asked Feb 17 '10 23:02

Jacob


3 Answers

Here is a sweet solution, shaves 2 minutes for me. PDFs are created in 3 seconds!

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

Replace

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

with this:

/ 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);
}
like image 178
Jossi Avatar answered Sep 20 '22 17:09

Jossi


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

By default TCPDF enables font subsetting to reduce the size of embedded Unicode TTF fonts, this process, that is very slow and requires a lot of memory, can be turned off using setFontSubsetting(false) method;

This was the real solution for me.

like image 24
jsonx Avatar answered Sep 20 '22 17:09

jsonx


Since version 5.9.067 TCPDF performances were drastically improved. Each new release seems performing better. Additionally you can set it to boost performances as explained at http://www.tcpdf.org/performances.php

like image 45
Nicola Asuni Avatar answered Sep 20 '22 17:09

Nicola Asuni