1

我正在处理大量相同的页面(字母),除了地址和其他一些次要细节。我相信最能减慢 PDF 创建速度的是我在每一页上都包含的徽标图像(即使它相当小)。

我希望通过缓存徽标来加快该过程,即通过加载文件一次并将其存储在变量中并让 TCPDF 使用它而不是每次都加载图像。TCPDF 可以加载一个“PHP 图像数据流”,给出的例子是这样的:

$imgdata = base64_decode('iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABlBMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDrEX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==');
$pdf->Image('@'.$imgdata);

但是,我不知道如何从文件中创建这样的图像流。

我的徽标是一个小的 (4kB) PNG 文件。如果我使用readfile($file)并将其发送到$pdf->Image前面的“@”,它会出错 - 关于已经设置为 chmod 777 的缓存文件夹(它是一个测试服务器 - 我将在实时服务器上处理适当的权限)。我相信我也尝试过base64_encode,但也没有用。

关于如何做到这一点的任何想法?

PS:我已经注意到我在 PDF 中包含的页面越多,它变得越慢,所以我会找到一个好的中间件(每个文件可能 200-250 页而不是当前的 500 页)。

谢谢!

4

1 回答 1

2

在 sourceforge 的 TCPDF 论坛上发布了同样的问题(sourceforge forum post),TCPDF 的作者回答了。

他说图像是在内部缓存的,但是如果图像需要处理,他建议使用XObject()模板系统(参见TCPDF 网站上的示例 62)。

我花了一段时间才让它工作(仍然不确定为什么一开始它对我不起作用),但是一旦我让它看起来与我的原始版本完全一样Image(),我用大约 3,000 个条目进行了一些测试,分为 PDF每个文件 500 页。

XObject()和之间根本没有速度提升Image()XObject()实际上似乎使生成的文件稍微大了一点(1.2MB 文件中为 2.5kB)。

虽然这并不能直接回答我原来的问题(如何Image('@'.$image)使用XObject()对我的处境有任何好处。

于 2013-04-02T18:33:48.003 回答