Автоматическая печать mPDF - PullRequest
10 голосов
/ 24 августа 2011

Я использую класс 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();

Ответы [ 4 ]

19 голосов
/ 14 июля 2012

Это работает для меня, чтобы напечатать сгенерированный файл 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();
5 голосов
/ 01 сентября 2011

Вы пробовали (фрагмент):

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);
      }
    }

Кредит: Создание автоматической печати 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();
0 голосов
/ 20 февраля 2013

Я использую DTukans way + добавлено false в качестве параметра.

Работает в FireFox и IE - не работает для Chrome: (

$ mpdf-> SetJS ( 'this.print (ложь);');

0 голосов
/ 03 декабря 2012

Я написал это как внешний файл и запросил печать через javascript.

post_to_url("pdf.export.php", {htmlForPdf:pdf})

https://stackoverflow.com/a/133997/903454

...