代码之家  ›  专栏  ›  技术社区  ›  Javier Larroulet

使用PHP+DomPDF生成慢速PDF

  •  0
  • Javier Larroulet  · 技术社区  · 6 年前

    我花了一段时间用DomPDF处理一个非常缓慢的PDF生成过程。经过大量的修改和谷歌搜索,我终于找到了一个解决方案,我想我会贴出来,以防你们中的一些人处理同样的问题。

    问题是: 我管理的一个电子商务网站可以让卖家下载一个PDF文件,里面有他们填写好的订单(基本上是显示给买家的采购确认书的副本)。一直都很好。 当我部署了一个附加功能以允许卖家下载 单一的 包含在用户定义的日期集之间生成的所有采购订单的PDF文件。当需要以一个PDF格式(每页一个)导出的订单数量超过20-30个时,这个过程变得非常缓慢(30-60秒)。

    从数据库中获取数据并对其进行分析不是问题。构建后来导出到PDF中的视图也不是问题所在(将HTML输出到屏幕只需几秒钟,甚至数百个订单也是如此),所以我基本上确定dompdf就是问题所在。

    1.-MySQL数据库 3.-菲律宾比索7.2 4.-dompdf 0.82(最新版本) 5.-编码点火器3.0.9

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   Javier Larroulet    6 年前

    解决方案:

    经过大量的谷歌搜索、反复试验和错误查找Stackoverflow(我发现没有一篇文章真正有用),我发现是bootstrap导致了这个问题。

    所以,我采取了另一种方法: 获取我的视图使用的特定类(6,也许7)的CSS定义,并将它们内联到 <style>

    <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>
    

    删除引导

    重新测试,结果令人吃惊: ,这证实了链接引导会在dompdf上产生巨大的开销,这在99%的用例中可能是不必要的。

    希望这能帮助别人。这件事花了好几天的时间才弄清楚。