2014-09-11 20 views
24

mam następujący strumień PDF z serwera: PDF STREAMJak czytać pdf strumień w angularjs

Jak to strumień być odczytywane angularjs? Próbowałem otworzyć to jako plik PDF w nowym oknie, używając następującego kodu:

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

Ale nie widzę zawartości w otwartym oknie.

+1

dlaczego przenosisz cały plik przez http, a nie tylko otworzyć adres URL tego pliku? window.open (fileUrl)? –

+0

@MajoB Próbowałem w ten sposób również, ale w kanciastym otrzymuję błąd, jak Nie wolno załadować zasobów lokalnych: nie udało się wczytać ścieżki pliku .. – Lakshman

+1

Zobacz tę odpowiedź: http://stackoverflow.com/questions/21628378/angularjs -display-blob-pdf-in-an-angle-app – stacky

Odpowiedz

42

I to osiągnąć poprzez zmianę mój kod kontrolera

$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

Użyłem tego kodu .. ale otrzymuję puste pdf –

+7

Ranjit, otrzymywałem puste pdf, ale dodanie "responseType" do argumentów $ http, to działa. Właśnie to rozgryzłem, przepraszam za spóźnienie. –

+1

Witam Otrzymuję podobny błąd jak Ranjit. Na chrome mówi: _Failed, aby załadować dokument PDF_ wiesz, jak to rozwiązać? –

1

Spójrz na PDF.JS. Jest to biblioteka javascript po stronie klienta, która może pobrać strumień PDF i renderować go po stronie klienta. Angular nie jest w stanie odczytać pliku PDF, więc nie jest to kwestia kątowa.

6

Podniesione rzucić okiem na poniższy kod:

Na Controller 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() {       
      }); 

HTML niepożądane:

<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> 

Możesz także skorzystać z Angulara ng-pdfviewer i wyświetlić swój plik pdf, używając jego plików js.

+0

ng-pdfviewer nie akceptuje pdfContent jako 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

Kontroler: funkcja downloadPDF (searchManagerQuery) { // wywołania pobierz metodę $ window.open ("ServiceURL", "_blank"); } –

1

Problem z użyciem config.responseType jest, że usługa $ http nadal działa domyślny responseTransformer i próbuje przekształcić odpowiedź JSON. Wysyłasz także domyślne nagłówki akceptacji. Oto alternatywa (nietestowana):

$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); 
    });