“预览” mpdf 直接到浏览器

Posted

技术标签:

【中文标题】“预览” mpdf 直接到浏览器【英文标题】:"Preview" mpdf directly to browser 【发布时间】:2017-10-16 16:05:32 【问题描述】:

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

我想让用户选择 PDF 或网页,而不是为每一行分支 echo 或 writeHTML,我想构建文档,然后输出 web 或 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() 等。

【问题讨论】:

你不能把所有东西都放在一个变量中,比如$output .= 'line of html';,然后最后做一个writeHTML($output);echo $output吗? 这就是我现在正在做的事情,但它排除了文档中任何类型的非 HTML,例如 mpdf 书签 你真的需要添加你的代码然后我们才能看到你在做什么 添加了一些示例代码,但不要过于关注具体细节。问题是,在一般原则上,我可以以某种方式将通过 $pdf->writeHTML() 添加的任何内容输出到网页而不是 PDF 吗? 扩展类并覆盖方法,并将传递的 HTML 代码附加到新的类属性(字符串或数组),这样您就可以从那里简单地请求整个内容。 ..?如果您在创建 HTML 时也需要以某种方式考虑 addPage 之类的内容,请也将其覆盖。 【参考方案1】:

根据@CBroe 的建议,这就是我所做的。当writeHTML() 被调用时,它会写入一个内部变量$this-&gt;strHTML,然后执行它的正常过程。如果对象被强制转换为字符串,则返回$this-&gt;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;
    


【讨论】:

【参考方案2】:

您可以通过更改第二个参数来选择 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

【讨论】:

这根本不能回答问题

以上是关于“预览” mpdf 直接到浏览器的主要内容,如果未能解决你的问题,请参考以下文章

MPDF pdf 未在任何浏览器中打开,Codeigniter 中未显示错误

mPDF 错误:一些数据已经输出到浏览器,无法发送 PDF 文件

Mpdf 不从内联 chrome 浏览器下载 pdf(但显示 pdf)

在 mpdf 中将 pdf 文件输出到浏览器

mPDF 错误:一些数据已经输出到浏览器

单击firebase的通知时,在设备的浏览器中打开URL而不直接到App