2015-07-08 2 views
3
var ajaxSettings = { 
      url: urls.orders.list+"/"+singlePacket.requests[0].order_id+"/labels", //request labels the status will change to ShipperAssigned 
      type: "GET", 
      contentType: "application/json", 
      headers: { "Authorization": "Bearer " + api.access_token }, 
      success: function (resp) { 
       if (resp != null) { 
        var d = btoa(unescape(encodeURIComponent(resp))); 
        console.log(d); 
        if(d != null) 
        window.open('data:application/pdf;base64, ' + d); 
       } 

      }, 
      error: function (jqXhr, textstatus, errorThrown) { 
       console.log("Status: " + jqXhr.status + ": error thrown in downloadLabels: " + errorThrown); 
       hide_shipping_progress_modal(); 
      } 
     }; 
     $.ajax(ajaxSettings); 

Я получаю пустой pdf, когда открываю pdf. Мой ответ является результатом выходного потока из пружины mvcКак открыть base64 закодированный pdf в javascript

Пожалуйста, помогите.

+0

Какой браузер вы используете? Только некоторые браузеры поддерживают базу64. Вот еще информация: [Embedding Base64] (http://stackoverflow.com/questions/1207190/embedding-base64-images) – JasonWilczak

+0

Я использую chrome – vini

+0

Хмм, хром поддерживает uri до 2mb, я предполагаю, что это не больше? [Ограничения по размеру протокола данных] (http://stackoverflow.com/questions/695151/data-protocol-url-size-limitations) – JasonWilczak

ответ

7

Для Chrome и Firefox, вы можете просто использовать данные base64 непосредственно на тег объекта:

var objbuilder = ''; 
    objbuilder += ('<object width="100%" height="100%"  data="data:application/pdf;base64,'); 
    objbuilder += (base64PDF); 
    objbuilder += ('" type="application/pdf" class="internal">'); 
    objbuilder += ('<embed src="data:application/pdf;base64,'); 
    objbuilder += (base64PDF); 
    objbuilder += ('" type="application/pdf" />'); 
    objbuilder += ('</object>'); 

Тогда либо добавить в существующую страницу или открыть новое окно:

var win = window.open("","_blank","titlebar=yes"); 
     win.document.title = "My Title"; 
     win.document.write('<html><body>'); 
     win.document.write(objbuilder); 
     win.document.write('</body></html>'); 
     layer = jQuery(win.document); 

You может проверить Javascript за этой страницей http://www.cloudformatter.com/css2pdf, который является службой форматирования PDF. Chrome и Firefox могут быть встроены в страницу или отображаться в новом окне, IE не поддерживает base64 в объекте (или любом другом), поэтому этот код запускает загрузку.

+0

Спасибо за ответ !. Но я не думаю, что это работает для IE. Это не вызовет диалог загрузки. Для IE, я думаю, нам нужно сделать форму POST и вернуть поток в браузер, http://stackoverflow.com/questions/20401006/show-a-pdf-stream-in-a-new-window – mlg

+0

Да. Как я уже сказал в своем ответе, он не будет работать на IE. –

+0

Я использовал это решение, но он не работает над некоторыми файлами PDF, я обычно сталкиваюсь с этим на больших файлах PDF, но не на всех. Некоторые большие PDF-файлы работают с этим решением. id знаю, почему –

Смежные вопросы