gpt4 book ai didi

php - 生成带有图像的 PDF 太慢

转载 作者:可可西里 更新时间:2023-11-01 12:19:16 25 4
gpt4 key购买 nike

我目前遇到的一个大瓶颈是每次有人下订单时生成 PDF。对于单个订单来说这没什么大不了的,但是当短时间内有很多订单时,这个过程就很慢了。

PDF 需要文本信息、二维码、条形码、 Logo 和 1 个或多个(最多 20 个以上)1/4 宽度的图像。

带有 DOMPDF 的当前进程:

  1. 使用 PHP 创建的 QR 码图像并保存为 png
  2. 创建条码图像并保存为 png
  3. DomPDF 生成 PDF

新思路:

  1. HTML2PDF 创建 PDF,并使用它的 qr 和条形码标签生成条形码

理论上这会处理 QR 和条形码图像,但其余图像仍然太慢了。

这样做,除了(二维码和条形码)之外没有任何图像,PDF 可以在大约 500 毫秒内生成,但是一旦我开始添加图像,它就会上升到 2、3、4、5+每秒。


当运行测试并处理约 10,000 个订单(几分钟内)时,大约 12 小时后它仍在处理 PDF,直到我沮丧地关闭它。

PDF 是在单独的排队过程中生成的,因此人们在订购时不必等待,但是 - 仍然......他们不能在高流量期间花费 5 个多小时才能收到他们的确认 PDF。


问题/TLDR:

如何加快使用动态二维码、动态条形码、动态文本和 1-20 个静态图像(图像在所有 PDF 中都相同)创建 PDF 的过程?

还有其他我没有想到的潜在的东西吗?也许制作一个模板 PDF 并以某种方式使用 PHP 来填充动态点?

最佳答案

我强烈建议您使用 TCPDF 库。它非常快,可以很容易地集成到 CakePHP 中。您可以在 TCPDF 示例 page 中找到许多有关如何将图像、条形码和二维码包含到 PDF 中的示例。 .

要进一步提高性能,请使用 this 中的技巧页:

  • 安装和配置 PHP 操作码缓存器,如 XCache;
  • 编辑 php.ini 文件并增加脚本可能消耗的最大内存量 (memory_limit);
  • 修改php.ini文件,增加每个脚本的最大执行时间(max_execution_time);
  • 编辑config/tcpdf_config.php文件:手动设置$_SERVER['DOCUMENT_ROOT']、K_PATH_MAIN和K_PATH_URL常量,去掉自动计算部分;
  • 如果您不使用泰语,请编辑 config/tcpdf_config.php 文件并将 K_THAI_TOPCHARS 常量设置为 false;
  • 如果您不需要扩展字符,请编辑 config/tcpdf_config.php 文件并将默认字体设置为核心字体;
  • 如果您不需要 UTF-8 Unicode,请将 TCPDF 构造函数上的 $unicode 参数设置为 false,并将 $encoding 参数设置为“ISO-8859-1”或其他字符映射。
  • 默认情况下,TCPDF 启用字体子集化以减小嵌入的 Unicode TTF 字体的大小,这个过程非常慢并且需要大量内存,可以使用 setFontSubsetting(false) 方法关闭;
  • 尽可能使用核心字体而不是嵌入字体;
  • 如果不是严格要求,请避免使用 HTML 语法(writeHTML 和 writeHTMLCell 方法);
  • 将较大的 HTML block 拆分为较小的 block ;
  • 如果不是严格要求,请避免使用事务;
  • 更改后重新启动网络服务器。

如果这不能将性能提高到可接受的水平,您可以在具有更多可用资源的第二台服务器上安装 CakePHP 应用程序(或者如果它不使用 CakePHP,则只运行生成 PDF 的脚本)并使用它仅用于生成 PDF 的服务器。

关于php - 生成带有图像的 PDF 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25859506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com