【问题标题】:Uncaught Mpdf\MpdfException: The HTML code size is larger than pcre.backtrack_limit 1000000未捕获的 Mpdf\MpdfException: HTML 代码大小大于 pcre.backtrack_limit 1000000
【发布时间】:2018-08-13 11:42:06
【问题描述】:

我正在开发代码以使用库 MPDF 从 HTML 代码生成 PDF。对于 HTML 代码,我从外部 HTML 文件中读取。但它不适用于较大的 HTML 代码大小。有什么办法可以修复它,或者我们有任何其他支持我的功能的库。

对于较大的 html 文件给出错误:

致命错误:未捕获的 Mpdf\MpdfException:HTML 代码大小大于 pcre.backtrack_limit 1000000。您应该使用具有较小字符串长度的 WriteHTML()。

【问题讨论】:

  • 您可能会在文本编辑器中查看 HTML —— 也许您可以在将 HTML 提供给 mpdf 之前对 HTML 进行预处理以去除不需要的部分。如果没有,也许您可​​以以某种方式将其分成更小的部分。

标签: php mpdf html-to-pdf


【解决方案1】:

错误消息告诉您该怎么做。以较小的块将您的 HTML 传递给 WriteHTML() 方法。

或者您可以尝试进一步提高回溯限制:

ini_set("pcre.backtrack_limit", "5000000");

https://mpdf.github.io/troubleshooting/known-issues.html#blank-pages-or-some-sections-missing

【讨论】:

    【解决方案2】:

    您正在提供一个非常大的 html 代码。它不会被接受。 见https://mpdf.github.io/troubleshooting/known-issues.html#blank-pages-or-some-sections-missing

    【讨论】:

      【解决方案3】:

      我在导出大文件时遇到了同样的问题。按照 Finwe 的建议,我通过将要导出的 html 分成小块来解决它。这是伪代码:

      在我要导出的 html 文件中,我插入了一个标记,稍后我将使用它来分割 html。在这种情况下,我使用单词块:

      <body>
      @if (count($doc_items) > 0)
      @foreach($doc_items as $item)
      chunk
      <div>
           {{-- Item text here --}}
      </div>
      </body>
      

      在控制器方面,我修改了以下参数以防万一,尽管根据导出大小可能不需要:

      ini_set('max_execution_time', '300');
      ini_set("pcre.backtrack_limit", "5000000");
      

      然后我处理html:

      $chunks = explode("chunk", $html);
      foreach($chunks as $key => $val) {
          $mpdf->WriteHTML($val);
      }
      

      【讨论】:

      • 这是天才,我要试试..!谢谢
      • @AdriRomas 你是如何将页面的 html 分配给 $html?
      • @Bennett 你好。就我而言(我使用的是 Laravel php 框架),它是通过如下渲染函数完成的: $html = view('documents.exportView', compact('document', 'doc_items'))->render();
      猜你喜欢
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多