2015-01-09 2 views
2

Я столкнулся с очень странным вопросом, я пытаюсь отправить файл PDF в качестве вложения из моего приложения распорок, используя ниже кода,Blank PDF во время загрузки

 JasperReport jrReport = (JasperReport) JRLoader.loadObject(jasperReport); 
     JasperPrint jasperPrint = JasperFillManager.fillReport(jrReport, parameters, dataSource); 
     jasperPrint.setName(fileNameTobeGivenToExportedReport); 
     response.reset(); 
     response.setContentType("application/pdf"); 
     response.setHeader("Content-Disposition", "attachment; filename=\"" + fileNameTobeGivenToExportedReport + ".pdf" + "\""); 
     response.setHeader("Cache-Control", "private"); 
     JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream()); 

но PDF, который загружается приходит с нет данных, означает, что он показывает пустую страницу.

Когда в приведенном выше коде я добавил строку ниже, чтобы сохранить файл PDF в моем D: каталог

File pdf = new File("D:\\sample22.pdf"); 
JasperExportManager.exportReportToPdfStream(jasperPrint, new FileOutputStream(pdf)); 

Файл, который становится генерируется собственно, значит, со всеми данными. Одна вещь, которую я заметил, что файл, который загружается из браузера и «sample22.pdf», имеет тот же размер.

Я прочитал статью, в которой говорится, что это может быть проблема с конфигурацией сервера, так как наш сервер может искажать выходной поток. Это статья, которую я прочитал Creating PDF from Servlet.

Эта статья говорит

Это может произойти, если ваш сервер сглаживает все байты со значением выше 127. Обратитесь к вебу (или приложению) руководство сервера, чтобы узнать, как убедиться, что двоичные данные посылают правильно в браузер.

Я использую распорки 1.x, jBoss6, иРепорт 1,2

+0

Вы сами ответили на вопрос (кстати: вы цитируете незаконную копию моей книги). Вы можете проверить свои собственные результаты, загрузив файл PDF и просмотрев байты, соответствующие ключевым словам потока. Если вы не видите никаких двоичных данных (неразборчивые вещи), но вместо этого куча вопросительных знаков или пробелов, ваш PDF-файл был поврежден где-то в этом процессе. –

+0

@BrunoLowagie Можете ли вы быть более ясными, я не думаю, что я вас правильно. Было бы очень полезно. Спасибо – Vicky

+0

Мне нужно скриншоты, чтобы объяснить. Я добавлю их в ответ. –

ответ

6

Предположим, что у вас есть простой "Hello World" PDF документ:

enter image description here

При открытии этого документа, вы видите, что в файловой структуре используются символы ASCII, но фактическое содержимое страницы сжимается до двоичного потока:

enter image description here

Вы не видите слова «Hello World» в любом месте, они сжимаются вместе с синтаксисом PDF, который содержит информацию, необходимую для отрисовки эти слова на странице в этот поток:

xœ+är 
á26S°00SIá2PÐ5´ 1ôÝBÒ¸4<RsròÂó‹rR5C²€[email protected]*\C¸¹ Çq° 

Теперь предположим, что процесс обмолвить все символы, отличные от ASCII, в ASCII. Я сделал это вручную, так как вы можете видеть в следующем скриншоте:

enter image description here

я все еще могу открыть документ, потому что я ничего не изменило в файловой структуре: есть еще три /Pages с одним словарем /Page. С синтаксической точки зрения, файл выглядит нормально, так что я могу открыть его в Adobe Reader:

enter image description here

Как вы можете видеть, слова «Hello World» ушли. Поток, содержащий синтаксис для визуализации этих слов, был поврежден (в моем случае вручную, в вашем случае сервером или Struts или любым процессом, который вы используете, который думает, что вы создаете обычный текст вместо двоичного файла).

Что вам нужно сделать, это найти место, где это происходит. Может быть, Струтс является виновником.Возможно, вы (непреднамеренно) используете Struts, как если бы вы создавали простой текстовый файл. Трудно сказать удаленно. Это типичная проблема, вызванная проблемой конфигурации. Это может решить только кто-то, у кого есть доступ к вашей конфигурации.

+0

Это действительно полезно, по крайней мере, я могу достичь основной причины проблемы. Я обязательно проверю это и уточню. Спасибо .. – Vicky

+0

Я сравнивал оба файла, и то же самое происходит, как показано выше. Но можете ли вы дать мне какую-либо идею, какое свойство/конфигурацию я должен проверить или попробовать добавить в файл настроек struts/jBoss? это будет очень полезно. Благодарю. – Vicky

+0

Лучший способ отладить это - это создать самый простой пример, который вы можете себе представить (тот, который не включает iText). Например: создайте сервлет, который отправит двоичный файл в браузер. Выполните этот пример и проверьте, где это происходит. Как только вы устранили простой пример, вы исправили пример iText. (Это может потребовать от вас создать новый вопрос с совершенно разными тегами, iText не должен быть одним из этих тегов.) –

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