2015-05-05 14 views
8

Sono nuovo di angular js e desidero aprire un documento PDF in una nuova finestra del browser dopo aver premuto un pulsante.Aprire un PDF in una nuova finestra del browser con angularjs

Faccio una richiesta GET con $http.get() al front end, al backend c'è un servizio di assistenza Java che risponde al GET e genera un PDF. Desidero aprire questo PDF sul browser.

Se non è possibile aprire il PDF in questo modo, almeno aprire qualsiasi PDF con AngularJs, come posso fare?

@GET 
@Path("/printPdf") 
public Response printService(){ 

//generates the pdf 

File reportFile = new File(filePath); 
String name = reportName + "." + "pdf"; 
ResponseBuilder response = Response.ok(new  TemporaryFileInputStream(reportFile)); 
response.header("Content-Disposition", "attachment; filename=" + name); 
response.header("Content-Type", "application/pdf"); 
response.header("Access-Control-Expose-Headers", "x-filename"); 
response.header("x-filename", name); 

return response.build(); 
} 

questo è ciò che è al back-end per generare la risposta nel servizio di riposo.

+0

stesso modo si farebbe con qualsiasi pdf ... questo non è specifico angolare. Quale problema specifico stai avendo? – charlietfl

+0

come potrei farlo? – DarkAngeL

+0

restituisco l'url e apro l'url – charlietfl

risposta

13

Se tu avessi qualcosa di simile:

var myPdfUrl = 'something' 
$http.get(myPdfUrl); 

fare questo, invece:

var myPdfUrl = 'something' 
$window.open(myPdfUrl); 

Se invece si dispone di qualcosa come questo:

$http 
    .get(generatePdfUrl) 
    .then(function(data){ 
     //data is link to pdf 
    });  

fare questo:

$http 
    .get(generatePdfUrl) 
    .then(function(data){ 
     //data is link to pdf 
     $window.open(data); 
    });   
+1

Ho provato la tua soluzione ma non funziona sembra che stia facendo qualcosa di sbagliato nel backend nel servizio di restituzione , ho appena modificato e pubblicato il codice di esso. C'è qualcosa di sbagliato? – DarkAngeL

+1

Grazie a Mathew Berg, l'ho fatto funzionare cambiando questa riga di codice response.header ("Content-Disposition", "attachment; filename =" + name) a response.header ("Content-Disposition", "inline; filename =" + nome) perché mi chiedeva di scaricare invece di aprire il file in una nuova finestra. – DarkAngeL

+0

Grazie, ma in realtà 'window.open (dati);' –

12

Forse questo può aiutare, nel caso di avete qualcosa di simile:

$http.get('generatePdfUrl') 
    .then(function (data) {  // data is your url 
     var file = new Blob([data], {type: 'application/pdf'}); 
     var fileURL = URL.createObjectURL(file); 
    }); 

quindi utilizzare il servizio nel controller e fare

$window.open(fileURL); 
+1

interferisce con il cromo – Per

Problemi correlati