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-&gt;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 自动打印问题的主要内容,如果未能解决你的问题,请参考以下文章

由 MPDF 创建的双面打印 PDF

最后打印页的页脚 MPDF

如何在 Yii 中通过 FPDF 为 POS 软件设置自动页面高度

使用连接表中的 mPDF 打印

mPDF 以 PDF 为中心进行打印

如何使用for循环在mpdf PHP中打印数组中的值