Firefox 19 でサーブレットから PDF ファイルを出力する方法を教えてください。
PDFストリームを出力するサーブレットがあります
.....
public void doPost(HttpServletRequest request, HttpServletResponse response) {
try {
String namePDF = "filename.pdf";
StringBuffer sb = new StringBuffer(request.getScheme());
sb.append("://").append(request.getServerName());
if (request.getServerPort() > 0) {
sb.append(":").append(request.getServerPort());
}
sb.append(request.getContextPath()).append("/dirPdf/")
.append(namePDF);
OutputStream out = response.getOutputStream();
Document document = new Document();
document.setMargins(30, 30, 25, 25);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter pdfWriter = PdfWriter.getInstance(document, baos);
PdfPageEvents events = new PdfPageEvents();
pdfWriter.setPageEvent(events);
// step 2: we set the ContentType and create an instance of the
// corresponding Writer
// writer.setEncryption(null, null, PdfWriter.ALLOW_PRINTING,
// PdfWriter.STANDARD_ENCRYPTION_40);
document.open();
compiledModule(request, response, document);
document.newPage();
pdfWriter.setPageEmpty(false);
// chiudo il documento
document.close();
int tot = pdfWriter.getPageNumber() - 1;
PdfReader reader = new PdfReader(baos.toByteArray());
reader.consolidateNamedDestinations();
PdfStamper pdfStamper = new PdfStamper(reader,baos);
//read from module
reader = new PdfReader(sb.toString());
reader.consolidateNamedDestinations();
PdfContentByte cbu = pdfStamper.getUnderContent(tot);
PdfImportedPage page = pdfStamper.getImportedPage(reader, 2);
cbu.addTemplate(page, 1, 0, 0, 1, 0, 0);
pdfStamper.close();
response.setContentType("application/pdf");
response.setContentLength(baos.size());
response.setBufferSize(baos.size());
baos.writeTo(out);
out.flush();
out.close();
} catch (Exception e) {
logger.error("", e);
try {
/*if (out != null)
out.close();*/
response.sendRedirect("../exception.jsp?message="
+ e.getMessage());
} catch (IOException ex) {
logger.error("", ex);
}
}
}
....
Internet Explorer と Chrome ではファイルが正しく表示されますが、Firefox 19 では次のエラーが発生します。
「このPDF文書は正しく表示されない可能性があります」
とにかく、Firefox 19 の設定を変更することで達成できる解決策があることは知っています。アプリケーションの多くのユーザーが落胆する可能性があるため、Firefox を表示させるための実用的な回避策があるかどうかを知っておくことをお勧めします。 pdf.
それとも、回避策のないバグですか?
前もって感謝します!
--- 2013/02/28 12:52PM 更新 ---
この問題は、出力ストリームへの ByteArrayOutputStream コピーを使用しているという事実に関連しているようです。outputStream を直接使用すると、すべて正常に動作します。残念ながら、PDFの最後のページを別のページに貼り付ける必要があるため、ByteArrayOutputStreamを使用する必要があります。