2013-01-11 17 views
5

Ho un pdf associato ad un pulsante. Quando clicco sul pulsante voglio stampare il pdf. Ecco come il mio tasto è codificato:Come posso stampare un pdf in google chrome?

<input type="submit" class="btn-red" value="Print" 
name="Submit" id="printbtn" 
onclick="printPDF('http://www.irs.gov/pub/irs-pdf/fw4.pdf')" /> 

Ora la mia funzionalità di stampa funziona così:

function printPDF(pdfUrl) 
    { 

    if ((navigator.appName == 'Microsoft Internet Explorer')) 
    window.print(pdfUrl,"_self"); 
    else 
    { 
    var w = window.open(pdfUrl,"_self"); 
    w.print(); 
    w.close(); 
    } 
    } 

Il problema è, sta funzionando bene in IE e Fire fox, ma non funziona in cromo. In ie e Firefox, si apre l'opzione della stampante xps, ma in chrome, si apre solo una nuova finestra di stampa, con l'anteprima di stampa del div e non il pdf. Ma voglio che l'opzione xps sia aperta qui.

MODIFICA: In chrome quando provo a stampare, solo l'elemento html viene come anteprima e non il pdf. Sto usando la versione di cromo: 20.0.1132.57

Come posso aggirare questa particolarità? gentilmente aiuto.

risposta

4

Ho dovuto fare la stessa cosa e ho usato un approccio diverso, uno che per me ha funzionato sia in Chrome che in Firefox.

La mia soluzione riguardava un file helper print.html, che ha ricevuto l'url del file PDF come parametro di tipo GET, quindi ha caricato il pdf all'interno di un iframe. Quindi ha continuato a controllare se il pdf era stato caricato completamente (vincolando il controllo all'evento onload non ha funzionato) e al completamento ha attivato il metodo di stampa.

Qui:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"> 

    <title>Print Page</title> 

    <meta name="title" content="Print" /> 

    <script> 

    (function (window, document, undefined) { 


     var printy = { 

       urlGET: function (param) { 

        var params = document.URL.split('?'); 

        if(params.length > 1) { 
         params = params[1].split('&'); 

         for (var i = 0, len = params.length; i < len; i++) { 
          if (params[i].split('=')[0] === param) { 
           return params[i].split('=')[1]; 
          } 
         } 
        } 

        return null; 
       }, 


       init: function() { 

        var self = this; 

        window.onload = function() { 

         var src = self.urlGET('path'); 

         //creating an iframe element 
         var ifr = document.createElement('iframe'); 
         document.body.appendChild(ifr); 

         // making the iframe fill the viewport 
         ifr.width = '100%'; 
         ifr.height = window.innerHeight; 

         // continuously checking to see if the pdf file has been loaded 
         self.interval = setInterval(function() { 

          if (ifr.contentDocument.readyState === 'complete') { 
           clearInterval(self.interval); 
           // doing the actual printing 
           ifr.contentWindow.print(); 
          } 
         }, 100); 

         ifr.src = src; 
        } 
       } 
      } 

      printy.init(); 

    })(window, document, undefined); 
    </script> 

</head> 
<body> 
</body> 
</html> 

questa soluzione non è testato su IE però. Usiamo i Mac al lavoro quindi non era un'opzione.

Per fare la stampa, lo uso chiamando un URL simile a questo: http://example.com/print.html?path=docs/myfile.pdf

+0

Grazie per la condivisione di esso. Verificherò e ti faccio sapere, se funziona per me. –

4

questo ha funzionato per me e non richiedeva un file HTML host. La chiave era di aspettare per onload:

Per un link come questo:

<a class="print-pdf-link" href="/your/pdf.pdf">Print PDF</a> 

ho usato javascript:

$('a.print-pdf-link').click(function() { 
    var w = window.open($(this).attr('href')); 

    w.onload = function() { 
     w.print(); 
    }; 

    return false; 
}); 
+0

Non funziona su FF. –

Problemi correlati