2013-04-26 27 views
53

Sto costruendo un elenco di PDF in HTML. Nella lista mi piacerebbe includere un link per il download e un pulsante/link di stampa. C'è un modo per aprire direttamente la finestra di dialogo Stampa per il PDF senza che l'utente veda il PDF o apra un visualizzatore PDF?Stampa PDF direttamente da JavaScript

Qualche variante di download del PDF in un iframe nascosto e attivazione per stampare con JavaScript?

risposta

41

Questa domanda dimostra un approccio che potrebbe essere utile a voi: Silent print a embedded PDF

Esso utilizza il tag <embed> per incorporare il PDF nel documento:

<embed 
    type="application/pdf" 
    src="path_to_pdf_document.pdf" 
    id="pdfDocument" 
    width="100%" 
    height="100%" /> 

Poi si chiama il metodo .print() sull'elemento in Javascript quando il PDF è caricato:

function printDocument(documentId) { 
    var doc = document.getElementById(documentId); 

    //Wait until PDF is ready to print  
    if (typeof doc.print === 'undefined') {  
     setTimeout(function(){printDocument(documentId);}, 1000); 
    } else { 
     doc.print(); 
    } 
} 

È possibile inserire l'embed in un nascosto inquadra e stampa da lì, offrendoti un'esperienza senza soluzione di continuità.

+2

non funziona su FF32 –

+2

Questa soluzione non funziona ... I sto ottenendo il permesso negato per Chrome, FF – user1428716

+4

Questo non funzionerà se il documento incorporato si trova su un dominio diverso. – nullability

9

https://github.com/mozilla/pdf.js/

per una dimostrazione dal vivo http://mozilla.github.io/pdf.js/

è probabilmente quello che volete, ma non riesco a vedere il punto di questo dal browser moderni includono tale funzionalità, anche verrà eseguito terribilmente lento in basso dispositivi alimentati come dispositivi mobili che, a proposito, hanno i propri plugin e app ottimizzati.

+0

pdf.js è anche terribilmente lento durante la stampa di grandi documenti, come 80MB + –

17

Ecco una funzione per stampare un PDF da un iframe.

È sufficiente passare l'URL del PDF alla funzione. Crea una stampa iframe e trigger una volta caricato il PDF.

Si noti che la funzione non distrugge l'iframe. Invece, lo riutilizza ogni volta che la funzione è chiamata. È difficile distruggere l'iframe perché è necessario fino a quando la stampa è terminata e il metodo di stampa non ha il supporto di callback (per quanto ne so).

printPdf = function (url) { 
    var iframe = this._printIframe; 
    if (!this._printIframe) { 
    iframe = this._printIframe = document.createElement('iframe'); 
    document.body.appendChild(iframe); 

    iframe.style.display = 'none'; 
    iframe.onload = function() { 
     setTimeout(function() { 
     iframe.focus(); 
     iframe.contentWindow.print(); 
     }, 1); 
    }; 
    } 

    iframe.src = url; 
} 
+2

non funziona in ff30 –

+1

né in Chrome quando si utilizza dati uri – mplungjan

11

Scarica il Print.js da http://printjs.crabbly.com/

$http({ 
    url: "", 
    method: "GET", 
    headers: { 
     "Content-type": "application/pdf" 
    }, 
    responseType: "arraybuffer" 
}).success(function (data, status, headers, config) { 
    var pdfFile = new Blob([data], { 
     type: "application/pdf" 
    }); 
    var pdfUrl = URL.createObjectURL(pdfFile); 
    //window.open(pdfUrl); 
    printJS(pdfUrl); 
    //var printwWindow = $window.open(pdfUrl); 
    //printwWindow.print(); 
}).error(function (data, status, headers, config) { 
    alert("Sorry, something went wrong") 
}); 
+0

Non stampa PDF su IE, Edge o Firefox. –

Problemi correlati