Próbuję zbudować plik PDF ze strumienia binarnego, który otrzymuję jako odpowiedź z żądania ajax.Jak zbudować plik PDF z łańcucha binarnego zwrócony z usługi internetowej przy użyciu javascript
Via XmlHttpRequest i otrzymać następujące dane:
%PDF-1.4....
.....
....hole data representing the file
....
%% EOF
co starałem tak daleko, żeby osadzić moich danych poprzez dane: Uri.
Teraz nie ma w tym nic złego. Działa dobrze. Niestety nie działa w IE9 i FF.
Możliwym powodem może być to, że FF i IE9 mają problemy z tym użyciem danych-uri.
Teraz szukam rozwiązania, które działa we wszystkich przeglądarkach.
Oto mój kod:
// responseText encoding
pdfText=$.base64.decode($.trim(pdfText));
// Now pdfText contains %PDF-1.4 ...... data...... %%EOF
var winlogicalname = "detailPDF";
var winparams = 'dependent=yes,locationbar=no,scrollbars=yes,menubar=yes,'+
'resizable,screenX=50,screenY=50,width=850,height=1050';
var htmlText = '<embed width=100% height=100%'
+ ' type="application/pdf"'
+ ' src="data:application/pdf,'
+ escape(pdfText)
+ '"></embed>';
// Open PDF in new browser window
var detailWindow = window.open ("", winlogicalname, winparams);
detailWindow.document.write (htmlText);
detailWindow.document.close();
Jak powiedziałem .... to działa dobrze dla Opery i Safari Chrome (nie testowane). Użycie IE lub FF spowoduje wyświetlenie pustego nowego okna.
Czy istnieje rozwiązanie takie jak tworzenie pliku PDF w systemie plików w celu umożliwienia użytkownikowi pobrania pliku?
Potrzebuję rozwiązania, które działa we wszystkich przeglądarkach przynajmniej w IE, FF, Opera, Chrome i Safari.
Nie mam uprawnień do edytowania implementacji usługi sieciowej. Musiało to być rozwiązanie po stronie klienta.
Jakieś pomysły ???
myślę, że byłoby lepiej dla wszystkich, aby napisać usługę, która pobiera pliki PDF do folder, niech serwer wyświetli pliki statyczne. Na podstawie ścieżki skonstruuj adres URL pliku. –
Uzgodniono z @SrinivasReddyThatiparthy. Pobierz plik tymczasowy i podaj plik użytkownikowi. Możesz go wyświetlić inline, jeśli jest to bezwzględnie wymagane, za pomocą kombinacji tagów object i embed - zobacz to pytanie: http://stackoverflow.com/questions/1244788/embed-vs-object/1244871#1244871 – mccannf
Dlaczego nawet potrzebujesz chwyć dane za pomocą js? Nie możesz po prostu otworzyć nowego okna z location =? –
sander