2016-08-15 6 views
2

Как гласит название. Поиск здесь, я нашел «расширение» для FPDF, что позволяет печатать документы. Теперь мне нужно напрямую печатать (то есть без диалогового окна). Я слежу за комментариями, которые автор оставляет в this page, но не работает для меня :(Я также пытался копировать и вставлять, но не смог найти решение.FPDF - Печать без диалогового окна при использовании PDF_JS

ПРИМЕЧАНИЕ. Я использовал FireFox (последняя версия) и этот процесс не будет работать вообще, я также попытался с помощью Chrome и Яндекса браузеров, оба работали, но все-таки показали диалоговое окно

PS:. спасибо за ваше время

кода я использую ниже.!.

pdf_js.php

require('fpdf.php'); 

class PDF_JavaScript extends FPDF { 

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

ex.php

<?php 
require('pdf_js.php'); 

class PDF_AutoPrint extends PDF_JavaScript 
{ 
function AutoPrint($dialog=false) 
{ 
    //Open the print dialog or start printing immediately on the standard printer 
    $param=($dialog ? 'true' : 'false'); 
    $script="print($param);"; 
    $this->IncludeJS($script); 
} 

function AutoPrintToPrinter($server, $printer, $dialog=false) 
{ 
    //Print on a shared printer (requires at least Acrobat 6) 
    $script = "var pp = getPrintParams();"; 
    if($dialog) 
     $script .= "pp.interactive = pp.constants.interactionLevel.full;"; 
    else 
     $script .= "pp.interactive = pp.constants.interactionLevel.automatic;"; 
    $script .= "pp.printerName = '\\\\\\\\".$server."\\\\".$printer."';"; 
    $script .= "print(pp);"; 
    $this->IncludeJS($script); 
} 
} 

$pdf=new PDF_AutoPrint(); 
$pdf->AddPage(); 
$pdf->SetFont('Arial','',20); 
$pdf->Text(90, 50, 'Print me!'); 
//Open the print dialog 
$pdf->AutoPrint(true); 
$pdf->Output(); 
?> 
+0

Добро пожаловать в StackOverflow. Пожалуйста, разместите точный код, который вы используете в настоящее время, чтобы помочь пользователям лучше понять вашу проблему. –

+0

Прежде всего, спасибо, что ответили на мой пост. Я отредактирую свой пост с кодом, который я использую. –

ответ

1

Вы устанавливаете "диалог" переменную в действительности. Вы должны установить значение false.

Функция AutoPrint принимает переменную «диалог» AutoPrint($dialog=false), которая определяет, показывать ли диалог печати.

В вашем коде вы передаете true для диалога. Измените последние три строки ex.php к ниже:

//Do not open the print dialog 
$pdf->AutoPrint(false); 
$pdf->Output(); 
0

Вообще говоря, если то, что вы хотите, чтобы ваш скрипт обхода диалог принтера браузера и вместо того, чтобы немедленно приступить к печати на любой принтер по умолчанию был установлен, тогда ответ НЕТ, вы не можете обойти диалоговое окно браузера, поскольку это будет проблемой безопасности, представьте вредоносные сайты, отправляющие документы на ваш принтер, даже не заметив. Есть и другие, но не ортодоксальные способы сделать это, создав плагин для браузера или приложение windows/linux, которое пользователь должен будет загрузить, установить и запустить, чтобы всякий раз, когда ваш сайт требует, этот посредник будет печатать для вас. Таким образом, независимо от того, что вы указали в своем php-коде, вы не пропустите диалог.

0

Спасибо за ранний ответ. И жаль позднего ответа. К сожалению, я сделал «половину работы». Я исследовал «lil» и обнаружил, что все, что мне нужно было сделать, - включить режим «киоск-печать»: 1. Создать ярлык на рабочем столе с Chrome, затем перейти к свойствам и найти путь, затем на конец, после запятых, положить --kiosk-printing

Например:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --kiosk-printing 

И код я обеспечиваю все в порядке.

Спасибо за ваше время. Если у вас есть лучший способ справиться с этой проблемой. Комментарий.