1

Ich lade eine PDF von meinem Server. Ich habe die "Content-Disposition" als "Anhang" festgelegt. Es funktioniert sehr gut ist Firefox. Aber im IE8 wird es als Inline angezeigt. Irgendwelche schnellen Hinweise, um dieses Problem zu lösen?IE8 Problem: PDF-Datei wird als Inline angezeigt

Edit:

I Federn bin mit dem PDF-Byte-Array-Stream zu schreiben. Und mit JSP auf der Client-Seite zur Anzeige.

Client-Seite:

Ich bin mit einem DHTML-Gitter und einen Tag zu halten. Der Code im Grid sieht so aus:

<a href='javascript:viewPDF(14)' target="_self" >View</a> 

Mit einem Klick wird die Methode viewPDF aufgerufen. Ich habe diesen Code in meiner Javascript-Datei gespeichert.

function viewPDF(id) { 
    $("#pdfID").val(id); 
    $("#myform").attr('action',url); 
    $("#myform").submit(); 
} 

Server-Seite Code-Basis:

ByteArrayOutputStream reportBAOS = getPDFByteArrayStream();/*This is my method which returns the byte array stream.*/ 
response.setContentType("application/pdf"); 
response.setHeader("Content-Disposition","attachment; filename=testfile"); 
response.setHeader("Pragma","Public"); 
response.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0"); 
response.setHeader("Expires","0"); 
ServletOutputStream os = response.getOutputStream(); 
os.write(reportBAOS.toByteArray()); 
os.flush(); 
os.close(); 

Antwort

2

Ich verbrachte einen Tag, um herauszufinden, was das Problem war. Aber schließlich habe ich es verstanden.

Ich kann nicht die Evan Mulawski 's Antwort falsch sagen. Ich habe es sogar mit seinem Code versucht. Aber keine Hilfe. Schließlich habe ich festgestellt, dass die Dateinamenerweiterung fehlt. Ich habe nur .pdf an testfile angefügt.

response.setHeader("Content-Disposition","attachment; filename=testfile.pdf"); 

Jetzt habe ich Folgendes entfernt.

response.setHeader("Pragma","Public"); 
response.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0"); 
response.setHeader("Expires","0"); 

Auch mit dem obigen Code bekomme ich immer noch das PDF als Anhang.

2

diese Header hinzufügen:

header("Pragma: public"); //This one may work by itself. 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("200 HTTP/1.0 OK"); //HTTP 1.0 Compatible 

Dies wird Internet Explorer zwingen, die Datei vom Server zum Download bereit.

+0

'+ 1' Ich benutze die ersten drei Zeilen, wenn ich Inhalte beim Benutzer erzwinge und sie haben ohne Probleme funktioniert. –

+0

Ich habe alle Header eingefügt, aber immer noch keine Hilfe, ich stehe vor dem Problem. –

+0

@Multiplexer: Können Sie den Code posten, den Sie verwenden, um den Download in Ihrer Frage auszulösen? –

1

Ich stimme dem Multiplexer zu. Eigentlich ist das Problem, wenn der 'Dateiname' nicht mit einem Suffix endet, das mit Acrobat Reader in Windows verbunden ist. Sobald Sie ".pdf" hinzufügen, funktioniert es einwandfrei.

Dann theres die Pitfal von Cache-Control: no-cache, die IE zum Kotzen verursachen wird. Verwenden Sie Cache-control: private, um Zwischenspeichern zu verhindern.

Verwandte Themen