如何使用dompdf将大(80k +行)html文件转换为pdf

时间:2017-10-26 07:21:58

标签: php laravel pdf dompdf

将大型HTML文件(+ -80K行)转换为pdf时遇到一些问题。 我也尝试将文件拆分成碎片,最后将它们合并。 这是为HTML和PDF做的,但即使这样,我也会收到内存耗尽的错误。

当我编写单独的pdf文件时,我会清除写入它们的对象。 但即使这样,内存也会被“已完成”的数据填满,所以我认为问题是dompdf库中的内存泄漏。

该库通过Laravel框架使用,并使用版本0.6.1,因为供应商库需要此版本。 我们已尝试将其更新到最新版本,但之后该特定库将失败。

所以我基本上有两个问题。

1:我们如何解决内存问题,因此可以毫无问题地处理大文件(或拆分文件)。而不是改变php_ini设置。

2:是否可以覆盖composer中的供应商库版本,因此我们可以安装最新版本。没有问题供应商文件也被编辑?或者有没有办法在作曲家中运行2个不同的版本,所以两者都保持正常工作?

希望有人得到了答案,花了大约2.5来寻找解决方案...但遗憾的是......没有任何有用的东西出来。

编辑; 我们正在做的事情的样本(当使用较小的文件时);

foreach($files as $file) {
    $htmlFileContents = ....; // Shorten it, but contains the html.
    $dompdf = new \DOMPDF();
    $dompdf->set_option('chroot', storage_path('exports'));
    //$dompdf->load_html_file($file); * Should use even more memory
    $dompdf->set_paper('A4', 'landscape');
    $dompdf->load_html($htmlFileContents);
    @$dompdf->render();    
   \File::put($tempFile, $dompdf->output());
   unset($dompdf);
}

1 个答案:

答案 0 :(得分:0)

如果您不想更改php.ini文件中的设置,那么您可以使用let arr = [{name: "Essa", age: 25}]; console.log(arrayToCSV(arr)); 更改运行时值,这将影响项目,而不是服务器上的整个php。

如果由于最大执行时间的限制,您可以使用ini_set('parametername','value');set_time_limit(0);将其设置为无限制 但如果是由于记忆耗尽,请使用ini_set('max_execution_time', 0);

但请记住,如果您的脚本需要时间通过doc()或exec()/ shell_exec()函数执行外部命令,那么set_time_limit(0)将不会受到尊重。如果你是PHP< = 5.3

,那么safe_mode也必须关闭