【问题标题】:DomPdf pdf creation progressDomPdf pdf创建进度
【发布时间】:2016-10-10 16:03:03
【问题描述】:

如何获取 dompdf 的进度。我有很多正在使用 dompdf 转换为 pdf 的 html。因为 HTML 很多,所以需要一段时间,所以我想知道是否可以获取进度并将其显示给用户。

编辑:

根据建议,我决定使用微调器。但我需要知道用户何时收到文件。 我正在使用此代码生成从 here 复制的 pdf:

$dompdf = new Dompdf();
$dompdf->loadHtml('hello world');

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream();

当用户点击执行此代码的链接时会生成 pdf。 pdf 下载并显示在下载部分。

编辑 2:现在我正在尝试使用 ajax 处理下载。我正在接收数据,并且在执行 console.log() 时可以看到它,但是如何将文件保存在用户下载中? 谢谢

【问题讨论】:

    标签: php ajax dompdf


    【解决方案1】:

    Dompdf 目前不支持报告其进度的方法。与此同时,您最好的选择可能是使用微调器让用户知道 PDF 生成正在进行中。

    如果您将 PDF 作为附件发送,则您无法真正知道用户何时收到它,因为没有触发任何事件。另一方面,使用纯 AJAX 更加困难,并且依赖于浏览器,因为它需要某些 HTML5 功能。

    您可以混合使用这两种方法,通过使用 AJAX 触发 PDF 渲染,将 dompdf 生成的 PDF 保存到服务器的文件系统,将文件名返回给客户端,最后在 AJAX 回调中重定向到文件。

    假设jQuery + blockUI(对于懒惰的开发者),这里有一个简化的例子。

    首先是客户端代码:

    <script>
    $('.pdf').click( function {evt} (
      $.blockUI();
      $.get('generate_pdf.php', function (data) {
        $.unblockUI();
        location.href = data;
      });
    ));
    </script>
    
    <button class="pdf">Generate PDF</button>
    

    和服务器:

    <?php
    // require dompdf autoloader, then...
    $dompdf = new Dompdf();
    $dompdf->loadHtml('hello world');
    $dompdf->render();
    $filename = sprintf('pdf_%s.pdf', date('ymd'));
    file_put_contents($filename, $dompdf->output());
    echo $filename;
    ?>
    

    您需要编写代码以满足您的需求。当然,您可以通过构建更多错误处理使其更加健壮。另外,您还需要进行某种清理以删除旧文件。


    当然,如果你真的想用 AJAX 来做这一切,那当然是可能的,而且已经有很多 relevant questions

    【讨论】:

    • 这是个好主意。我已经开始这样做了,我只需要知道何时停止微调器。有没有办法知道文件是否已收到?
    • 你能描述一下流程吗?什么触发了渲染?谁在接收文件以及如何接收文件?
    猜你喜欢
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2015-06-21
    • 2012-02-01
    • 2023-03-22
    • 2017-08-19
    相关资源
    最近更新 更多