Solución:
Según los comentarios a continuación, ya no funciona en los navegadores modernos.
Esta pregunta demuestra un enfoque que podría serle útil: Impresión silenciosa de un PDF incrustado
Utiliza el <embed>
etiqueta para incrustar el PDF en el documento:
<embed
type="application/pdf"
src="https://foroayuda.es/path_to_pdf_document.pdf"
id="pdfDocument"
width="100%"
height="100%" />
Entonces llamas al .print()
método en el elemento en Javascript cuando se carga el PDF:
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();
}
}
Puede colocar el incrustado en un iframe oculto e imprimirlo desde allí, lo que le brinda una experiencia perfecta.
Aquí hay una función para imprimir un PDF desde un iframe.
Solo necesita pasar la URL del PDF a la función. Creará un iframe y activará la impresión una vez que se cargue el PDF.
Tenga en cuenta que la función no destruye el iframe. En cambio, lo reutiliza cada vez que se llama a la función. Es difícil destruir el iframe porque es necesario hasta que se realiza la impresión y el método de impresión no tiene soporte de devolución de llamada (hasta donde yo sé).
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;
}
Descargue Print.js desde 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")
});