【问题标题】:Can I pre-load an image for use in TCPDF?我可以预加载图像以在 TCPDF 中使用吗?
【发布时间】:2013-04-01 22:02:12
【问题描述】:

我正在处理大量相同的页面(信件),除了地址和其他一些次要细节。我相信最能减慢 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 页)。

谢谢!

【问题讨论】:

    标签: php tcpdf


    【解决方案1】:

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

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

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

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

    虽然这不能直接回答我最初的问题(如何使用Image('@'.$image) 创建可以直接在 TCPDF 中使用的 PHP 数据流),但它告诉我我真正需要知道的内容 - 图像已经缓存,并且使用XObject() 进行缓存对我的情况没有任何好处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 2017-10-03
      • 1970-01-01
      • 2020-01-24
      • 2012-01-30
      • 2012-09-10
      • 2018-03-28
      相关资源
      最近更新 更多