2011-08-24 12 views
9

Używam klasy php, mpdf, która bardzo ładnie generuje PDF. Próbuję pobrać plik do automatycznego drukowania (tzn. Otwierania okna dialogowego drukowania) po wyrenderowaniu. Rozszerzyłem podstawowe działanie kodu, aby dodać javascript do pliku pdf. Plik PDF jest renderowany, ale bez automatycznego drukowania. Każda pomoc byłaby świetna. Dzięki!Automatyczne drukowanie mPDF

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

Odpowiedz

5

Czy chciał (fragment):

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

kredytowe: Create an Auto-Print PDF

Albo, biorąc kod z drugiego przykładu w tym artykule:

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

Thanks a lot ... Próbowałem zarówno sugestie, ale wciąż nie ma szczęścia :) – mozgras

+0

@mozgras: Mogę się z tym bawić podczas weekendu Jak już powiedziałem, ten kod został zaadaptowany z czegoś, co przeczytałem online, ale nie próbowałam siebie, więc zobaczę czy Działa to świetnie –

16

to działa dla mnie, aby wydrukować wygenerowany plik PDF, użyłem go do wydrukowania zawartości strony internetowej bez menu, banerów itp. po prostu conten t z własnym nagłówkiem i stopką

$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(); 
+0

To działa świetnie dla mnie – compcentral

+0

Kluczem tutaj jest użycie '$ mpdf-> SetJS ('this.print();');' przed wysłaniem danych wyjściowych.Dzięki! –

+0

To rozwiązanie rox, bez potrzeby dodać dowolne pliki, tylko jeden wiersz kodu ery wiele – koshin

0

używam DTukans drogę + dodano fałszywe jako parametr.

Works w Firefox i IE - nie działa na chrome :(

$ mpdf-> SetJS ('this.print (false);');