Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
JavaScript Byte Array PDF im Browser anzeigen
- Ersteller TiloS
- Erstellt am
Das klingt ein wenig kompliziert. Warum nicht über ein Servlet sich das PDF geben lassen?
Kannst du vielleicht noch ein paar Dinge zusätzlich posten
- Warum PDF als ByteArray
- Warum selbst anzeigen und nicht mittels Acrobat PDF oder andere PDF Reader
- Mit welchen Techonologien arbeitetest du sonst noch? PHP, JAVA, ...?
MfG
Kannst du vielleicht noch ein paar Dinge zusätzlich posten
- Warum PDF als ByteArray
- Warum selbst anzeigen und nicht mittels Acrobat PDF oder andere PDF Reader
- Mit welchen Techonologien arbeitetest du sonst noch? PHP, JAVA, ...?
MfG
Wenn es dafür bessere Möglichkeiten gibt, bin ich offen dafür.
Auf der Client-Seite arbeite ich mit JavaScript/ExtJs. Wie ich das letztendlich eingezeigt bekomme, ist mir egal. Ich hab nur momentan noch keine Lösung.
Meines Wissens die effizienteste Methode das zu übertragen. Der Webservice liefert das momentan so. Das könnte man aber auch ändern. Ich frag mich nur, wie sollte es der Webservice dann liefern?- Warum PDF als ByteArray
Wie übergebe ich das, damit es der PDF Reader direkt anzeigt?- Warum selbst anzeigen und nicht mittels Acrobat PDF oder andere PDF Reader
Die Daten liefert komplett der Webservive (in C# geschrieben). Der generiert auf Anfrage dynamisch ein PDF, überträgt es zum Client und der soll es einfach einzeigen.- Mit welchen Techonologien arbeitetest du sonst noch? PHP, JAVA, ...?
Auf der Client-Seite arbeite ich mit JavaScript/ExtJs. Wie ich das letztendlich eingezeigt bekomme, ist mir egal. Ich hab nur momentan noch keine Lösung.
WingX
Commander
- Registriert
- Juli 2001
- Beiträge
- 2.377
PDF anzeigen geht doch nur über einen PDF Reader. Da du nicht weißt, welcher der bevorzugte (und verfügbare) Reader ist, würde ich im Browser nur nen Link auf das (abgespeicherte) PDF anzeigen und per Klick darauf wird dann der im Browser hinterlegte Reader für die Aktion geöffnet. Eventuell kannst du den Link auch programmatisch öffnen. Du müsstest dem Browser mitteilen, dass du vorhast, ein PDF zu öffnen. Mit ziemlicher Sicherheit musst du es vorher abspeichern.
Ok, das hört sich logisch an. So könnte ich es versuchen.
Nur noch mal, um das auszuschließen, mit:
bin ich auf dem Holzweg, sehe ich das richtig?
Nur noch mal, um das auszuschließen, mit:
Code:
window.open("data:application/pdf," + response,'_blank','height=600,width=400'); -> evtl. das response noch dekodieren
Rossie
Rear Admiral
- Registriert
- Dez. 2010
- Beiträge
- 5.137
Aber sowas von Damit kannst Du nur Dateien anzeigen.
Es gibt einen PDF-Renderer in JavaScript: https://github.com/mozilla/pdf.js/blob/d8235925ac46f18328645ed689eee8a58d992a26/examples/helloworld/hello.js. Inwieweit sich das für Deinen Anwendungsfall eignen würde, weiß ich nicht. Ansonsten wüsste ich keinen Weg, wie Du die Daten mittels JavaScript direkt verarbeiten könntest.
Hast Du Kontrolle über den Web-Service? Dann lass Dir die Datei als pdf zurückgeben. Mit dem korrekten Response-Header öffnet sich der Reader automatisch (wenn installiert).
Ergänzung ()
Es gibt einen PDF-Renderer in JavaScript: https://github.com/mozilla/pdf.js/blob/d8235925ac46f18328645ed689eee8a58d992a26/examples/helloworld/hello.js. Inwieweit sich das für Deinen Anwendungsfall eignen würde, weiß ich nicht. Ansonsten wüsste ich keinen Weg, wie Du die Daten mittels JavaScript direkt verarbeiten könntest.
Hast Du Kontrolle über den Web-Service? Dann lass Dir die Datei als pdf zurückgeben. Mit dem korrekten Response-Header öffnet sich der Reader automatisch (wenn installiert).
Will ich doch eigentlich auch.
Das "response" ist doch die PDF-Datei als Byte-Array, die ich anzeigen möchte.
Zu Deiner Ergänzung: Ja, das ist wahrscheinlich die beste Lösung. Zugriff auf den Webservice hab ich, das kann ich mit einem Kollegen absprechen.
Das "response" ist doch die PDF-Datei als Byte-Array, die ich anzeigen möchte.
Zu Deiner Ergänzung: Ja, das ist wahrscheinlich die beste Lösung. Zugriff auf den Webservice hab ich, das kann ich mit einem Kollegen absprechen.
Zuletzt bearbeitet:
Rossie
Rear Admiral
- Registriert
- Dez. 2010
- Beiträge
- 5.137
TiloS schrieb:Will ich doch eigentlich auch.
Das "response" ist doch die PDF-Datei als Byte-Array, die ich anzeigen möchte.
Ja, die Daten sind da drin. Aber das weiß der Browser nicht. Der Response-Header ist entscheidend dafür, was der Browser daraus macht. In Deinem Fall werden die Rohdaten an das Skript geliefert.
Eben, es dreht sich effektiv alles um den Header. Ein Webservice, egal ob nun selbstgeschrieben in C-irgendwas oder geliefert von einem bestehenden Webserver wie Apache, pumpt in erster Linie nur Strings und Bitströme raus. Was der Client damit anfangen soll definiert ausschließlich der Header. Schreib den richtigen Header, und du kannst PNGs, PDFs, MP3s,.... als String übertragen. Schreib den falschen, und es kommt nur Suppe raus und der Client wird nie etwas damit anfangen können. Genauso sind Dateinamen nur Schall und Rauch. Ich hab mal ne PDF mit korrektem PDF-Header aber ohne Endung im Dateinamen rausgepumpt... es ging trotzdem.
Dein Webservice muss als allererstes den Header ausgeben, in dem Falle als content type application/pdf. Danach kommt die eigentliche Datenlast. Um den Rest kümmert sich dann der Client, sofern er mit application/pdf was anfangen kann (also n Reader/Plugin installiert ist), gemäß seinen Systemvorgaben.
Das ist alles keine Frage von Client-JS sondern serverseitigem Code.
Dein Webservice muss als allererstes den Header ausgeben, in dem Falle als content type application/pdf. Danach kommt die eigentliche Datenlast. Um den Rest kümmert sich dann der Client, sofern er mit application/pdf was anfangen kann (also n Reader/Plugin installiert ist), gemäß seinen Systemvorgaben.
Das ist alles keine Frage von Client-JS sondern serverseitigem Code.
Ok, wir haben es im Webservice umgesetzt. Damit funktioniert es, danke.
und beim Client:
Damit wird es im Firefox und im IE direkt angezeigt.
Code:
public void ResponsePdf()
{
HttpResponse resp = HttpContext.Current.Response;
resp.Clear();
byte[] pdfArr = GetPdf();
if (pdfArr != null && pdfArr.Length > 0)
{
resp.ContentType = "application/pdf";
resp.BinaryWrite(pdfArr);
resp.Flush();
}
else
{
string strResponseErr = "Error by generation PDF-File.";
resp.ContentType = "text/html";
resp.Write(strResponseErr);
resp.Flush();
}
}
Code:
window.open('http://....svc/JSON/ResponsePdf/...','','width=800,height=800,left=50,top=0,scrollbars=0,toolbar=no,resizable=0');
Zuletzt bearbeitet:
Ähnliche Themen
- Antworten
- 4
- Aufrufe
- 801
- Antworten
- 8
- Aufrufe
- 17.468
- Antworten
- 10
- Aufrufe
- 1.865
- Antworten
- 18
- Aufrufe
- 1.924