“预览” 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->strHTML
,然后执行它的正常过程。如果对象被强制转换为字符串,则返回$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;
【讨论】:
【参考方案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 文件