2014-09-11 15 views
24

ho ricevuto la seguente flusso PDF da un server: PDF STREAMCome leggere pdf flusso in angularjs

Come questo flusso vanno letti AngularJS? Ho provato ad aprire questo come un file PDF in una nuova finestra utilizzando il seguente codice:

.success(function(data) { 
    window.open("data:application/pdf," + escape(data)); 
}); 

Ma io sono in grado di vedere il contenuto nella finestra aperta.

+1

perché trasferire l'intero file tramite http e non solo aprire l'URL di quel file? window.open (fileURL)? –

+0

@MajoB Ho provato in questo modo, ma in modo angolare sto ricevendo errore come Non consentito caricare la risorsa locale: impossibile caricare il percorso del file .. – Lakshman

+1

Vedere questa risposta: http://stackoverflow.com/questions/21628378/angularjs -display-blob-pdf-in-an-angular-app – stacky

risposta

42

ho raggiunto questo cambiando il mio codice di controllo

$http.get('/retrievePDFFiles', {responseType: 'arraybuffer'}) 
     .success(function (data) { 
      var file = new Blob([data], {type: 'application/pdf'}); 
      var fileURL = URL.createObjectURL(file); 
      window.open(fileURL); 
    }); 
+13

ho usato questo codice..ma ottenendo pdf vuoto –

+7

Ranjit, stavo ottenendo pdf vuoto ma aggiungendo il "responseType" agli argomenti di $ http, funziona. L'ho appena capito, mi dispiace di essere in ritardo. –

+1

ciao, sto riscontrando un errore simile a quello di Ranjit. Sul chrome si dice: _Failed to load PDF document_ sai come risolvere questo? –

1

Dai un'occhiata allo PDF.JS. Questa è una libreria javascript lato client che può recuperare un flusso pdf e renderlo lato client. Angular non è in grado di leggere un pdf, quindi questo non è un problema angolare.

6

Motivi hanno uno sguardo sul codice seguente:

acceso Controllo Side -

$http.get(baseUrl + apiUrl, { responseType: 'arraybuffer' }) 
      .success(function (response) {     
      var file = new Blob([response], { type: 'application/pdf' }); 
      var fileURL = URL.createObjectURL(file); 
      $scope.pdfContent = $sce.trustAsResourceUrl(fileURL); 
      }) 
      .error(function() {       
      }); 

Su HTML laterale:

<div ng-controller="PDFController" class="modal fade" id="pdfModal" tabindex="-1" role="dialog" aria-hidden="true"> 
<div class="modal-dialog modal-lg"> 
    <div class="modal-content" onloadstart=""> 
     <object data="{{pdfContent}}" type="application/pdf" style="width:100%; height:1000px" /> 
    </div> 
</div> 

Inoltre puoi usare Angular ng-pdfviewer e visualizzare il tuo pdf utilizzando i suoi file js.

+0

ng-pdfviewer non accetta pdfContent come src – UCJava

1

Java: Get Method

BLOB pdfData = getBlob_Data; 
response.setContentType(pdfData.getContentType()); 
response.setHeader(ApplicationLiterals.HEADER_KEY_CONTENT, "attachment;  filename=FileName.pdf"); 
response.getOutputStream().write(pdfData.getBinaryData()); 
response.getOutputStream().flush(); 
+0

Controller: function downloadPDF (searchManagerQuery) { // chiama get metodo $ window.open ('ServiceURL', '_blank'); } –

1

Il problema con l'utilizzo config.responseType è che il servizio $ http corre ancora il default responseTransformer e tenta di convertire la risposta a JSON. Inoltre, stai inviando le intestazioni di accettazione predefinite. Ecco un'alternativa (non testata):

$http.get('/retrievePDFFiles', { 
    headers: { Accept: "application/pdf"}, 
    transformResponse: function(data) { 
     return new Blob([data], {type: 'application/pdf'}); 
    }}).success(function (data) { 
      var fileURL = URL.createObjectURL(data); 
      window.open(fileURL); 
    }); 
Problemi correlati