2017-05-29 6 views
3

Ich habe URL von PDF-Datei für Exa-URL ist "test.example.com/incoice/1/download?auth_token="some_token", wenn ich diese URL besuchen, zeigt mir URL PDF in Browser.So drucken Sie Pdf in Angular 2

Jetzt möchte ich diese pdf mit Druckfunktion öffnen, ich meine Benutzer müssen CTRL+P nicht drücken will ich das von meiner Seite tun.

ich versuchte iframe aber es gibt mir Fehler von Quer Herkunft. Dies ist Demo-Code, die ich verwendet

//first try 

let _printIframe; 
var iframe = _printIframe; 
if (!_printIframe) { 
    iframe = _printIframe = document.createElement('iframe'); 
    document.body.appendChild(iframe); 

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

// second try 
    // SRC of pdf 
iframe.src = "Some API URl " + "/download?access_token=" + 
this.authenticationService.currentTokenDetails.access_token; 
let url = iframe.src + "&output=embed"; 

window.frames["printf"].focus(); 
window.frames["printf"].print(); 
var newWin = window.frames["printf"]; 
newWin.document.write('<body onload="window.print()">dddd</body>'); 
newWin.document.close(); 

I erstellen d eine Demo in Plunker für Print-PDF. http://embed.plnkr.co/WvaB9HZicxK6tC3OAUEw/ In diesem Fall öffne ich pdf in neuem Fenster, aber ich möchte dieses pdf direkt drucken. wie kann ich das machen ?

Jeder Vorschlag wird zu schätzen wissen, und Sie können korrigieren, wenn ich falsch liege. Dank

Antwort

7

hier Also habe ich die Lösung für mein Problem In meiner Situation meines API binary data of pdf zurückkehrt, und Browser wurde nicht gedruckt, dass binäre Daten in window.print, so dass für diesen erst ich binary Daten in blob Daten konvertieren und dann erstellen Iframe für den Druck Folgendes ist Code dafür.

const url = request URL // e.g localhost:3000 + "/download?access_token=" + "sample access token"; 
this.http.get(url, { 
    responseType: ResponseContentType.Blob 
}).subscribe(
    (response) => { // download file 
    var blob = new Blob([response.blob()], {type: 'application/pdf'}); 
    const blobUrl = URL.createObjectURL(blob); 
     const iframe = document.createElement('iframe'); 
     iframe.style.display = 'none'; 
     iframe.src = blobUrl; 
     document.body.appendChild(iframe); 
     iframe.contentWindow.print(); 
}); 

Hier gehts !! Ich hoffe, das kann jedem helfen, dieses Problem zu haben :)

+0

Vielen Dank für diese – catu

+0

@catu Willkommen :) – Vishal