2 votes

Pourquoi le PDF généré s'affiche-t-il correctement dans Internet Explorer mais pas dans FireFox ou Chrome?

Je génère des PDF en Java en utilisant lowagie/iTextPDF et j'ai un problème d'affichage de la sortie dans Firefox et Chrome, mais IE8 les affiche bien.

Firefox et Chrome affichent des caractères illisibles, comme ceci :

%PDF-1.4 % 2 0 obj <>stream x1B1C#@0#Tm>}ZhnO?81ayB$:9XCa./f{$ o-$? ^c/'Ej}WT/Y< ? 5* endstream endobj 4 0 obj <>>>/MediaBox[0 0 612 1008]/Rotate 90>> endobj 1 0 obj <> endobj 3 0 obj <> endobj 5 0 obj <> endobj 6 0 obj <> endobj xref 0 7 0000000000 65535 f 0000000379 00000 n 0000000015 00000 n 0000000467 00000 n 0000000211 00000 n 0000000530 00000 n 0000000575 00000 n trailer <]/Info 6 0 R/Size 7>> startxref 697 %%EOF

Voici une partie du code servlet :

ByteArrayOutputStream baos = new ByteArrayOutputStream();                      
Document reportPDFDocument = (Document)generateReport(request,conn,baos);             
PdfWriter.getInstance(reportPDFDocument, baos);
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");       
response.setHeader("Content-disposition","inline; filename=PrintedSchedule.pdf");
ServletOutputStream out = response.getOutputStream();
baos.writeTo(out);
out.flush();

J'ai déjà essayé de mettre à jour Firefox, de mettre à jour le plugin PDF et de m'assurer qu'il était réglé pour utiliser le visualiseur de PDF d'Adobe au lieu de celui de Firefox.

En tant que test, j'ai modifié cette ligne :

De :

 response.setHeader("Content-disposition","inline; filename=PrintedSchedule.pdf");

À :

 response.setHeader("Content-disposition","attachment; filename=PrintedSchedule.pdf");

Internet Explorer semble reconnaître qu'il s'agit d'un PDF qui est téléchargé. Je reçois une fenêtre pop-up dans IE qui dit :

Voulez-vous ouvrir ou enregistrer ce fichier :

Nom : PrintedSchedule.pdf Type : Document Adobe Acrobat

Mais FireFox pense que c'est un document 'htm' et affiche ceci :

Vous avez choisi d'ouvrir :

PrintedSchedule.pdf qui est un : Document HTML

Ensuite, dans Firefox, je choisis Adobe Reader pour l'ouvrir, et ça fonctionne. Mais j'ai remarqué dans la barre de titre qu'il a ajouté '.htm' à la fin du nom de fichier.

Cela pourrait-il être un indice du problème ? Si oui, comment puis-je forcer Firefox à le reconnaître comme un PDF ? Les utilisateurs veulent que le PDF s'affiche dans le navigateur, pas dans une fenêtre pop-up, et ils ne veulent pas devoir télécharger séparément les fichiers PDF.

2voto

async5 Points 1344

Selon http://itextpdf.com/examples/iia.php?id=173, vous oubliez de définir la longueur du contenu, essayez d'ajouter response.setContentLength(baos.size()); avant ServletOutputStream out = response.getOutputStream();

1voto

Ved Points 11

Essayez d'ajouter

response.setHeader("Expires", "0");
response.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
// setting the content type
response.setContentType("application/pdf");
// the contentlength
response.setContentLength(baos.size());
// write ByteArrayOutputStream to the ServletOutputStream
OutputStream os = response.getOutputStream();
baos.writeTo(os);
os.flush();
os.close();

après la fermeture de document.close();

-1voto

eagle Points 21

J'ai répondu à cela, j'ai réussi en ouvrant le fichier .PDF dans un nouvel onglet, du point de vue du développement, EN CLIQUANT sur le bouton ou le lien, la cible doit être vide, par exemple (target=_blank)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X