"Preview" mpdf 直接到浏览器

"Preview" mpdf directly to browser

我正在使用 mpdf 并通过 mpdf::writeHTML() 将一堆 HTML 写入 pdf 对象。有没有什么办法,而不是输出 PDF,而是简单地将它直接转回浏览器?那么,与其创建 PDF,不如将其写成网页?

我想为用户提供 PDF 或网页的选项,而不是为每一行分支 echo 或 writeHTML,我想构建文档,然后输出网页或 PDF。

编辑添加:

像这样:

$mpdf = new mpdf();
$mpdf->writeHTML( "<p>Hello World</p>" );
$mpdf->addPage( 'L' );
$mpdf->writeHTML( "<p>Lorem ipsum egg foo yung.</p>" );

if( $_GET['format'] == 'pdf' ) {
    $mpdf->output();                  //spit out a PDF
} elseif ( $_GET['format'] == 'web' ) {
    echo $mpdf->contents_as_html();   // write a web page
}

我目前正在将每一行写入一个巨大的字符串,然后将字符串传递给 mpdf::writeHTML() 或 echo;但这不允许我使用各种 mpdf 函数,例如 addPage()、bookmark() 等。

您可以通过更改第二个参数来选择 mPDF 的输出。

I = send the file inline to the browser.
F enter code here= save to a local file with the name given by $filename.
S = return the document as a string. $filename is ignored.
D = send to the browser and force a file download with the name given by $filename.

输出 mPDF:

$mpdf->Output($filename, "I"); // Change "I" to your preferred output

如果您选择在浏览器中输出文件,只需确保将输出定位到空白页面即可。否则页眉和页脚可能会干扰。

Artikel mPDF 输出: https://mpdf.github.io/reference/mpdf-functions/output.html

根据@CBroe 的建议,这就是我所做的。当调用 writeHTML() 时,它会写入一个内部变量 $this->strHTML,然后执行其正常过程。如果将对象转换为字符串,它 returns $this->strHTML

class myPDF extends Mpdf {

    private $strHtml = '';

    public function writeHTML( $html, $mode = 0, $init = true, $close = true ) {
        $this->strHtml .= $html . "\n";
        return parent::writeHTML( $html, $mode, $init, $close );
    }

    public function __toString() {
        return $this->strHtml;
    }

}