我目前使用 FPDF 创建一些相当复杂的报告,并正在尝试升级到 TCPDF,但我发现我通过 TCPDF 运行的相同代码的速度大约慢了一倍。因为我的 PDF 已经需要一分钟的时间来生成,所以我真的无法承受这种减速,但我真的很想利用一些 TCPDF 功能(比如创建书签)。
如果有人有关于这个问题的一些信息,我真的很感激 - 无论是您为使 TCPDF 更快,还是只是确认它运行速度比 FPDF 慢,所以我可以忘记它并坚持使用 FPDF。
这是一个甜蜜的解决方案,为我剃须 2 分钟。PDF 在 3 秒内创建!
http://www.bitrealm.net/2010/08/tcpdf-is-slow-here-is-the-solution/
代替
$font = $this->_getTrueTypeFontSubset($font, $subsetchars);
有了这个:
/ 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);
}
http://www.tcpdf.org/performances.php
默认情况下,TCPDF 启用字体子集以减小嵌入的 Unicode TTF 字体的大小,这个过程非常慢并且需要大量内存,可以使用 setFontSubsetting(false) 方法关闭;
这对我来说是真正的解决方案。
自 5.9.067 版以来,TCPDF 的性能得到了显着改善。每个新版本似乎都表现得更好。此外,您可以将其设置为提高性能,如http://www.tcpdf.org/performances.php中所述
可以通过禁用配置文件中未使用的功能并关闭字体子集等慢速功能来调整 TCPDF 性能。在非 UTF8 模式下仅使用核心字体(如 Helvetica、Times 等)可以获得良好的性能。此外,您可以在服务器上安装 XCache 以提高 PHP 性能。查看官方http://www.tcpdf.org网站和论坛了解更多信息。