mPDF 自动打印问题
Posted
技术标签:
【中文标题】mPDF 自动打印问题【英文标题】:mPDF auto print issue 【发布时间】:2011-08-24 00:19:04 【问题描述】:我正在使用一个 php 类 mpdf,它可以很好地生成 PDF。我试图让文件在渲染时自动打印(即打开打印对话框)。我已经使用下面的代码扩展了核心功能,将 javascript 添加到 pdf 中。 pdf 被渲染但没有自动打印。任何帮助都会很棒。谢谢!
require('mpdf.php');
class PDF_JavaScript extends mPDF
var $javascript;
var $n_js;
function IncludeJS($script)
$this->javascript=$script;
function _putjavascript()
$this->_newobj();
$this->n_js=$this->n;
$this->_out('<<');
$this->_out('/Names [(EmbeddedJS) '.($this->n+1).' 0 R]');
$this->_out('>>');
$this->_out('endobj');
$this->_newobj();
$this->_out('<<');
$this->_out('/S /JavaScript');
$this->_out('/JS '.$this->_textstring($this->javascript));
$this->_out('>>');
$this->_out('endobj');
function _putresources()
parent::_putresources();
if (!empty($this->javascript))
$this->_putjavascript();
function _putcatalog()
parent::_putcatalog();
if (!empty($this->javascript))
$this->_out('/Names <</JavaScript '.($this->n_js).' 0 R>>');
class PDF_AutoPrint extends PDF_Javascript
function AutoPrint($dialog=false) //Embed some JavaScript to show the print dialog or start printing immediately
$param=($dialog ? 'true' : 'false');
$script="print($param);";
$this->IncludeJS($script);
$mpdf = new PDF_AutoPrint('', 'Letter', 0, '', 12.7, 12.7, 14, 12.7, 8, 8);
$stylesheet = file_get_contents('eabill.css');
$mpdf->Writehtml($stylesheet,1);
$mpdf->WriteHTML($message,2);
$mpdf->AutoPrint(true);
$mpdf->Output();
【问题讨论】:
【参考方案1】:这适用于我打印生成的 PDF 文件,我用它来打印没有菜单、横幅等的网站页面内容,只是带有自己的页眉和页脚的内容
$header = 'Document header';
$html = 'Your document content goes here';
$footer = 'Print date: ' . date('d.m.Y H:i:s') . '<br />Page PAGENO of nb';
$mpdf = new mPDF('utf-8', 'A4', 0, '', 12, 12, 25, 15, 12, 12);
$mpdf->SetHTMLHeader($header);
$mpdf->SetHTMLFooter($footer);
$mpdf->SetJS('this.print();');
$mpdf->WriteHTML($html);
$mpdf->Output();
【讨论】:
这里的关键是在发送输出之前使用$mpdf->SetJS('this.print();');
。谢谢!
这个解决方案rox,不需要添加任何文件,只需要一行代码。非常感谢【参考方案2】:
你试过了吗(sn-p):
class PDF_AutoPrint extends PDF_Javascript
function AutoPrint($dialog=false)
//Embed some JavaScript to show the print dialog or start printing immediately
if( $dialog )
$script="this.print();";
$this->IncludeJS($script);
信用:Create an Auto-Print PDF
或者,从那篇文章的第二个示例中获取代码:
require('mpdf.php');
class PDF_AutoPrint extends PDF_Javascript
function AutoPrint( $dialog=false )
if( $dialog )
$this->_newobj();
$this->n_js=$this->n;
$this->_out('<<');
# Not sure whether this line is spot on, may need tweaking
$this->_out('/OpenAction '.($this->n+2).' 0 R/Type/Catalog/Pages 1 0 R/PageMode/UseNone/PageLayout/OneColumn');
$this->_out('>>');
$this->_out('endobj');
$this->_newobj();
$this->_out('<<');
$this->_out('/Type/Action/S/Named/N/Print');
$this->_out('>>');
$this->_out('endobj');
$mpdf = new PDF_AutoPrint('', 'Letter', 0, '', 12.7, 12.7, 14, 12.7, 8, 8);
$stylesheet = file_get_contents('eabill.css');
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($message,2);
$mpdf->AutoPrint(true);
$mpdf->Output();
【讨论】:
非常感谢...我尝试了这两个建议,但仍然没有运气。 @mozgras:周末我自己可能会玩这个。正如我所说,这段代码是根据我在网上阅读的内容改编的,但我自己没有尝试过,所以我看看能不能让它工作。【参考方案3】:我使用DTukans方式+添加了false作为参数。
适用于 FireFox 和 IE - 不适用于 chrome :(
$mpdf->SetJS('this.print(false);');
【讨论】:
【参考方案4】:我将此作为外部文件编写并请求通过 javascript 打印。
post_to_url("pdf.export.php", htmlForPdf:pdf)
https://***.com/a/133997/903454
【讨论】:
以上是关于mPDF 自动打印问题的主要内容,如果未能解决你的问题,请参考以下文章