2015-01-28 23 views
8

Tôi đang sử dụng AngularJS với tài nguyên HTTP để gọi API bên ngoài và phản hồi của tôi là mảng byte. Tôi cần phải biến mảng byte này thành một PDF trong một cửa sổ mới. Tôi đã không nhìn thấy bất kỳ giải pháp rất tốt trên đây mà làm việc qua trình duyệt hoặc đó là javascript tinh khiết. Có cách nào để làm việc này không?Javascript: Mở PDF trong tab mới từ mảng byte

Đây là mã của tôi:

Javascript

Document.preview({id: $scope.order.id}, function(data){ 

    // Open PDF Here 
    var file = new Blob([data], {type: 'application/pdf'}); 
    var fileURL = URL.createObjectURL(file); 
    window.open(fileURL); 

}); 
+0

http://mozilla.github.io/pdf.js có một số tốt tham khảo ở đây –

+0

Tôi đã nhìn vào đó, nhưng tôi không thấy bất kỳ ví dụ tốt bằng cách sử dụng một mảng byte. Tôi cũng đã xem http://stackoverflow.com/questions/21628378/angularjs-display-blob-pdf-in-an-angular-app nhưng tôi vừa gặp lỗi "Không tải được Tài liệu PDF " –

+0

Có bất kỳ plugin độc quyền hay bất kỳ thứ gì để thực hiện việc này không? Một số trang mở pdf, làm thế nào tôi có thể? –

Trả lời

11

Nếu ai vẫn còn trông cho rằng, đây là những gì tôi đang làm (và làm việc):

var pdfAsDataUri = "data:application/pdf;base64,"+byteArray; 
window.open(pdfAsDataUri); 

đâu byteArray là dữ liệu bạn nhận được. Nó có lẽ không phải là một giải pháp tốt đẹp (byte mảng có thể nhìn thấy trong URL), nhưng nó hoạt động ...

+2

URI dữ liệu không hoạt động trên tất cả các trình duyệt. Đặc biệt là ngay cả các phiên bản gần đây của IE. – deusprogrammer

+0

giờ chrome v60 không cho phép mở tệp từ byteArray bằng window.open, nó đã bị khấu hao trong chrome v60 –

2

Bạn sẽ cần phải vượt qua responseType trong cuộc gọi dịch vụ của bạn

$http.post('/Service-URL', dataTO, {responseType: 'arraybuffer'}); 

sau đó trong sự thành công của bạn cuộc gọi dữ liệu này sẽ mở ra pdf trong một cửa sổ mới: -

InfoFactory.getDocument() 
     .success(function(data) { 
      var file = new Blob([data], { type: 'application/pdf' }); 
      var fileURL = URL.createObjectURL(file); 
      window.open(fileURL, "EPrescription"); 
    }) 

Từ câu trả lời này: - https://stackoverflow.com/a/21730535/3645957 bởi https://stackoverflow.com/users/2688545/michael

Các vấn đề liên quan