2016-05-24 9 views
0

У меня проблема с использованием iTextPdf в приложении WEB Context.Почему PDF, отредактированный с помощью iTextPDF, поврежден в контексте Web Servlet?

У меня есть веб-сервлет, который загружает PDF после того, как я отредактировал его во время выполнения.

Если я называю метод, подготовить PDF в контексте применении в NON-WEB, Ф создаются совершенно и открывается без каких-либо проблем.

Но в приложении WEB-Context, файл создается, но когда я делаю загрузку с моей тестовой страницы он поврежден: когда я открываю загруженный файл, это без изображений и появляется сообщение об ошибке шрифт, который не найден.

Если я открываю «чистый» файла и «испорченного» файла с помощью текстового редактора, они имеют одинаковое количество строк, но на самом деле содержание появляется другим.

Таким образом, я подозреваю, что проблема заключается в рендеринг содержимого контента в веб-ответе или что-то подобное.

Я следовал этой документации: http://developers.itextpdf.com/examples/itext-action-second-edition/chapter-9

Это реализация контроллера Spring MVC:

@RequestMapping(path = "/downloadPDF", method = RequestMethod.GET) 
public void downloadPDF(HttpServletResponse response){ 
    try{ 
     response.setContentType("application/pdf;charset=UTF-8");  
     ByteArrayOutputStream baos = myPDFHandler.getPdf('filetest.pdf'); 
     OutputStream outputStream = response.getOutputStream(); 
     baos.writeTo(outputStream); 
     outputStream.flush(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Эти заголовки ответа:

Response Headers 

view source 
Cache-Control:no-store 
Cache-Control:no-cache 
Content-Type:application/pdf;charset=UTF-8 
Date:Tue, 24 May 2016 10:20:56 GMT 
Expires:Thu, 01 Jan 1970 00:00:00 GMT 
Pragma:no-cache 
Server:Apache-Coyote/1.1 
Strict-Transport-Security:max-age=31536000 ; includeSubDomains 
Transfer-Encoding:chunked 
X-Content-Type-Options:nosniff 
X-Frame-Options:DENY 
X-XSS-Protection:1; mode=block 

Проблема заключается не в " myPDFHandler.getPdf ", потому что в контексте NON-WEB он работает отлично.

Любая идея? Спасибо.

+1

Действительно ли это файл UTF-8? –

+0

Я пробовал с charset = UTF-8 и без него, но результат тот же. Когда я пытаюсь в контексте не-WEB, мне не нужно указывать его ... –

+0

'charset = UTF-8' там не так. Было сказано, можете ли вы поделиться PDF-файлом, как только браузер получит его и один раз, как хранится на сервере? – mkl

ответ

0

Я нашел решение.

Проблема была в обратном типе @Controller, сменив void на @ResponseBody byte[].

Я также удалил «charset = UTF-8», и я добавил заголовок «content-disposition».

@RequestMapping(path = "/downloadPDF", method = RequestMethod.GET) 
public @ResponseBody byte[] downloadPDF(HttpServletResponse response){ 
    try{ 
     response.setContentType("application/pdf"); 
     response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=somefile.pdf");  
     ByteArrayOutputStream baos = myPDFHandler.getPdf('filetest.pdf'); 
     return baos.toByteArray(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^