gpt4 book ai didi

php - 使用 PHP+DomPDF 生成缓慢的 PDF

转载 作者:行者123 更新时间:2023-12-04 16:33:37 26 4
gpt4 key购买 nike

我花了一些时间来处理使用 DomPDF 的非常慢的 PDF 生成过程。经过大量的摆弄和谷歌搜索,我最终得到了一个我认为我会发布的解决方案,以防你们中的一些人正在处理同样的问题。

问题:
我管理的一个电子商务网站具有允许卖家下载包含他们已完成的采购订单的 PDF 文件的功能(基本上是向买家显示的购买确认的副本)。这一直工作正常。
当我部署了一个附加功能以允许卖家下载一个 PDF 文件时,问题就开始了,其中包含在用户定义的一组日期之间生成的所有采购订单。当需要导出为单个 PDF(每页一个)的采购订单数量超过 20-30 时,该过程变得非常缓慢(如 30-60 秒)。

从数据库中获取数据并解析它不是问题。构建后来导出到 PDF 的 View 也不是问题(即使对于数百个订单,将 HTML 输出到屏幕也只需要几分之一秒),所以我基本上确定 dompdf 是问题所在。

设置如下:
1.- MySQL 数据库
2.- 应用服务器:运行linux的多个负载均衡的PHP+Nginx+PHP-fpm实例
3.- PHP 7.2
4.- dompdf 0.82(最新的)
5.- 代码点火器 3.0.9
6.- 用于格式化布局的 Bootstrap

目标是允许在可接受的时间内在一个 PDF 中下载多个(可能是数百个)采购订单。

最佳答案

解决方案:

经过大量的谷歌搜索、试验和错误,在 Stackoverflow 上查找了很多(我发现的文章都没有真正有帮助),我发现是 Bootstrap 导致了这个问题。

我使用 Bootstrap 进行非常基本的布局管理,我意识到将整个库(甚至是缩小的库)链接到发送到 dompdf 的 View 中是多余的,但我不想重新编写 View 文件。

所以,我采取了不同的方法:
获取我的 View 使用的特定类(6 个,也许是 7 个)的 CSS 定义,并将它们内联到 <style> View 中的标记

<style>
.row {
margin-right: -15px;
margin-left: -15px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
}

.col-lg-12 {
width: 100%;
}

.text-center {
text-align: center;
}

body {
font-family: Helvetica, Arial, sans-serif;
font-size: 12px;
line-height: 1.42857143;
color: #333;
background-color: #fff;
}
(...) the list goes on a little longer for some other bootstrap styles and other site-specific ones made by yours truly.
</style>

删除 Bootstrap 完全从 View 中。

重新测试,结果令人惊讶:
100 个采购订单(100 页)PDF(大小小于 60 kB)在更改前需要 30-60 秒生成并流式传输给用户,现在正在 中生成不到半秒 ,这证实了链接 Bootstrap 会在 dompdf 上产生巨大的开销,这在 99% 的用例中可能是不必要的。

希望这可以帮助某人。花了好几天的时间才弄清楚这一点。

关于php - 使用 PHP+DomPDF 生成缓慢的 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54768375/

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