【问题标题】:How to include an external file in DomPdf loaded file to render如何在 DomPdf 加载的文件中包含外部文件以进行渲染
【发布时间】:2015-12-18 11:58:40
【问题描述】:

我传入输入转换为pdf的log.php页面是这样的:

   <p>title</p>
   <?php include 'log.html'?>

我正在使用此代码:

require_once("dompdf_config.inc.php");
$file = "log.php";
$dompdf = new DOMPDF();
$dompdf->load_html_file($file);
$dompdf->render();
$dompdf->stream("sample.pdf");

pdf 结果只显示“标题”

如何将外部文件添加到 log.php,然后在 pdf 中全部打印?

【问题讨论】:

    标签: php pdf dompdf


    【解决方案1】:

    这是因为 log.php 脚本在您将其传递给 dompdf 之前未在服务器端进行解释:它只是作为“通用”文件加载

    如果您使用 file_get_contents 并将文件的 URL 传递给它,则该文件将被解释并且其内容将作为您将传递给 Dompdf 的字符串返回:

    require_once("dompdf_config.inc.php");
    
    //this will be something like: http://www.yourapp.com/templates/log.php
    $fileUrl = YOUR_APP_URL . "log.php";
    
    //get file content after the script is server-side interpreted
    $fileContent = file_get_contents( $fileUrl ) ;
    
    $dompdf = new DOMPDF();
    
    //load stored html string
    $dompdf->load_html($fileContent);
    $dompdf->render();
    $dompdf->stream("sample.pdf");
    

    【讨论】:

    • 这可行,但更好的建议是在将 PHP 传递给 dompdf 之前使用输出缓冲并渲染您的 PHP,例如ob_start(); require 'log.php'; $html = ob_get_clean(); ob_end_clean();。相关:我对this answer的评论。
    • @BrianS:我知道您是 dompdf 的作者,所以我会利用它:D:就您的建议而言,使用file_get_content 有什么缺点?我一直使用fgc 方法,因为我更愿意尽可能避免输出缓冲
    • 这真的取决于你对 dompdf 的使用。在 0.6.1 之前的 dompdf 版本中(后面会详细介绍),您可以在您的文档中使用 dompdf 解析 PHP。问题是这会使您暴露于潜在的系统漏洞。如果DOMPDF_ENABLE_PHP 为真,则这些版本中的输入首先是eval()ed,其输出由输出缓冲捕获。如果您允许用户定义的输入并且不严格过滤用户内容(有时即使您这样做),那么恶意用户可能会在您的系统上运行任意 PHP。
    • 因此,如果您不允许用户输入,那么您可能会考虑启用 PHP 解析。但是,如果您试图避免输出缓冲,那么您将一无所获,因为 dompdf 正在使用它。
    • @BrianS:你是对的。只是我不记得让fgc 解释脚本,它应该被称为传递 URL 而不是文件路径。我检查了我的一个旧项目,它是以这种方式调用的。谢谢:)
    【解决方案2】:

    我认为您需要在配置中启用 DOMPDF_ENABLE_PHP。

    【讨论】:

    • 除非你知道自己在做什么,否则不要这样做。根据您使用 dompdf 的方式,它可以让您暴露于系统漏洞。此外,从 0.6.1 开始,dompdf 不再在呈现 HTML 之前预解析 PHP 代码(例如 &lt;% ... %&gt;)。仍然支持嵌入式脚本(例如&lt;script type="text/php"&gt;...&lt;/script&gt;),但只允许您访问画布对象,它不允许您写出 HTML 进行渲染。
    猜你喜欢
    • 2017-02-27
    • 2011-03-15
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2016-01-25
    • 1970-01-01
    相关资源
    最近更新 更多