Ich versuche, eine PDF-Datei aus einem binären Stream, die ich als Antwort von einer Ajax-Anfrage erhalten.Wie PDF-Datei aus Binär-String erstellt von einem Web-Service mit Javascript
Via XmlHttpRequest erhalten i Daten folgende:
%PDF-1.4....
.....
....hole data representing the file
....
%% EOF
Was ich bisher versucht, war meine Daten über Daten einzubetten: uri.
Jetzt ist nichts falsch daran. Es funktioniert gut. Leider funktioniert es nicht in IE9 und FF.
Mögliche Ursache möglicherweise FF und IE9 haben dort Probleme mit dieser Verwendung der Daten-URI.
Jetzt suche ich nach einer Lösung, die für alle Browser funktioniert.
Hier ist mein Code:
// 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();
Wie gesagt .... es funktioniert gut für Opera und Chrome (Safari nicht getestet). Mit IE oder FF wird ein leeres neues Fenster geöffnet.
Gibt es eine Lösung wie das Erstellen einer PDF-Datei im Dateisystem , damit der Benutzer es herunterladen kann?
Ich brauche eine Lösung, die in allen Browsern funktioniert zumindest in IE, FF, Opera, Chrome und Safari.
Ich habe keine Berechtigung, die Web-Service-Implementierung zu bearbeiten. Also musste es eine Lösung auf der Client-Seite sein.
Irgendwelche Ideen ???
ich denke, es wäre besser für alle einen Dienst zu schreiben, die die PDF-Dateien herunterlädt, um ein Ordner, lassen Sie den Webserver die statischen Dateien dienen. Konstruieren Sie auf dem Pfad Ihre URL für die Datei. –
Vereinbart mit @ SrinivasReddyThatiparthy. Laden Sie die Datei in eine temporäre Datei herunter und stellen Sie sie dem Benutzer zur Verfügung. Sie könnten es inline anzeigen, wenn dies unbedingt erforderlich ist, indem Sie eine Kombination aus Objekt- und Einbettungs-Tags verwenden - siehe diese Frage: http://stackoverflow.com/questions/1244788/embed-vs-object/1244871#1244871 – mccannf
Warum müssen Sie das überhaupt tun? Daten mit js erfassen? Kannst du nicht einfach ein neues Fenster mit location = öffnen? –
sander