У меня проблемы с получением PDF для правильного отображения в IE. Ниже приведен самый маленький тестовый пример, который я могу создать, который показывает проблему. Я использую Spring 3.0.5 с PdfBox 1.6.
Вот упрощенный контроллер, который демонстрирует проблему:
@RequestMapping(method = RequestMethod.GET, value = "generatePdf.pdf")
public ResponseEntity<byte []> generatePdf() throws IOException {
PDDocument document = null;
try {
document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDFont font = PDType1Font.HELVETICA_BOLD;
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.beginText();
contentStream.setFont(font, 12);
contentStream.moveTextPositionByAmount(100, 500);
contentStream.drawString("Hello World");
contentStream.endText();
contentStream.close();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
document.save(baos);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(new MediaType("application", "pdf"));
headers.setContentLength(baos.toByteArray().length);
return new ResponseEntity<byte[]>(baos.toByteArray(), headers, HttpStatus.CREATED);
} catch (Exception e) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.TEXT_PLAIN);
return new ResponseEntity<byte[]>("BROKEN".getBytes(), headers, HttpStatus.CREATED);
} finally {
if (document != null) {
document.close();
}
}
}
Вышеуказанное работает для Chrome и Firefox. Однако открытие ссылки в IE вообще ничего не отображает. Однако, если я сделаю следующие изменения:
@RequestMapping(method = RequestMethod.GET, value = "generatePdf.pdf")
public ResponseEntity<byte []> generatePdf(HttpServletResponse response) throws IOException {
PDDocument document = null;
try {
document = new PDDocument();
//... Same until declaration of HttpHeaders
response.setHeader("Content-Type", "application/pdf");
response.setHeader("Content-Length", String.valueOf(baos.toByteArray().length));
FileCopyUtils.copy(baos.toByteArray(), response.getOutputStream());
return null;
} //... same as above
Все отлично работает как в IE, так и в других браузерах. Я не совсем уверен, какие у меня есть варианты, другие типы файлов записаны правильно (PNG, JPG и т. Д.).
Есть идеи, как избежать растягивания запроса и просто использовать ResponseEntity для правильной обработки?