Отображение pdf в jsp

Я написал страницу jsp для отображения содержимого pdf, но в итоге с ascii-кодами в jsp. Я хочу показать содержимое pdf в jsp. Какую часть я пропустил. Когда я пытаюсь написать прочитанный контент в формате pdf, он отображает только значения ascii, а не в читаемом формате

                0) { //System.out.println("size:"+c); outs.write(buf, 0, c); out.write(outs.toString()); } } catch (IOException ioe) { ioe.printStackTrace(System.out); } finally { outs.flush(); outs.close(); in.close(); } %>  

JSP – неправильный инструмент для работы с загрузкой файла. JSP разработан как технология просмотра с целью легкого создания HTML-вывода с помощью taglib и EL. В основном, с вашим JSP-подходом, ваш файл PDF загроможден тегами , etc и поэтому поврежден и не распознается как действительный файл PDF. Это, кстати, одна из причин, почему использование сценариев является плохой практикой . Это полностью смутило вас в отношении того, как материал должен работать. В этом конкретном случае используется обычный class Java для задания загрузки файла.

Вместо этого вы должны использовать сервлет . Вот пример запуска, предполагая, что Servlet 3.0 и Java 7 доступны:

 @WebServlet("/foo.pdf") public class PdfServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { File file = new File("/absolute/path/to/foo.pdf"); response.setHeader("Content-Type", getServletContext().getMimeType(file.getName())); response.setHeader("Content-Length", String.valueOf(file.length())); response.setHeader("Content-Disposition", "inline; filename=\"foo.pdf\""); Files.copy(file.toPath(), response.getOutputStream()); } } 

(если Servlet 3.0 недоступен, а затем сопоставьте его в web.xml обычным способом , если Java 7 недоступен, затем используйте цикл чтения / записи обычным способом )

Просто скопируйте этот class целиком в свой проект и откройте желаемый PDF-файл /contextpath/Saba_PhBill.pdf вместо /contextpath/youroriginal.jsp (после того, как он организовал его в пакете и /contextpath/Saba_PhBill.pdf /contextpath/youroriginal.jsp необходимые импорт в classе, конечно ).

Например, как показано в JSP, где вы хотите показать PDF inline:

  Download file.pdf  

(ссылка подразумевается как изящное ухудшение, когда используемый браузер не поддерживает вложение содержимого application/pdf в HTML-документ, то есть когда он не установлен плагин Adobe Reader)

Смотрите также:

  • Самый простой способ обслуживания статических данных вне сервера приложений в веб-приложении Java
  • Абстрактный шаблон для сервлета статического ресурса, поддерживающего ETags, кэширование и т. Д.

Я мог видеть несколько проблем:

  • В верхней и нижней части вашего JSP есть дополнительные html-tags. Вы не хотите, чтобы они были там – вы только хотите иметь содержание pdf в своем ответе.
  • Код задает тип содержимого несколько раз. Вероятно, это не основная причина, однако убедитесь, что вы делаете это только один раз (установите его в application/pdf )
  • В цикле while данные сначала записываются в выходной stream ответа, затем toString() записывается в out (который фактически является экземпляром Writer, открытым в streamе ответа, который находится в outs ). Используйте только stream ответов в цикле, так как

    while ((c = in.read(buf, 0, buf.length)) > 0) { outs.write(buf, 0, c);
    }

Предположим, мы полностью игнорируем совет против использования JSP (и, как говорит BalusC – есть ЛУЧШИЕ СПОСОБЫ), вот уродливая и позорная маленькая папка, которая сработала хорошо для меня. Он даже не устанавливает все правильные заголовки, но здесь идет:

 <%@ page import="java.io.File" %><%@ page import="org.apache.commons.io.FileUtils" %><% File pdfFile = (File) request.getAttribute("pdf"); byte[] pdfByteArray = FileUtils.readFileToByteArray(pdfFile); response.setContentType("application/pdf"); response.getOutputStream().write(pdfByteArray); response.getOutputStream().flush(); %> на <%@ page import="java.io.File" %><%@ page import="org.apache.commons.io.FileUtils" %><% File pdfFile = (File) request.getAttribute("pdf"); byte[] pdfByteArray = FileUtils.readFileToByteArray(pdfFile); response.setContentType("application/pdf"); response.getOutputStream().write(pdfByteArray); response.getOutputStream().flush(); %> 

Важно обеспечить отсутствие новых строк (или других пробелов) за пределами тегов scriptlet.

Они заставили меня сделать это, хорошо ?!

  • Вывод файла изображения из сервлета
  • Как загрузить файлы на серверной папке с помощью jsp
  • Отображение Pdf в браузере с помощью Java-сервлета
  • Как вызвать метод до уничтожения объекта сеанса?
  • Java EE веб-разработки, где я начинаю и какие навыки мне нужны?
  • Как узнать, был ли запрос на сервлет выполнен с использованием HTTP или HTTPS?
  • Объявление Spring Bean в контексте родительского контекста и дочернего контекста
  • HttpServletRequest получает данные JSON POST
  • Лучший вариант для управления сеансами в Java
  • Как получить информацию о клиенте, такую ​​как ОС и браузер
  • Аннотации @WebServlet не работают с Tomcat 8
  • Interesting Posts

    Неожиданное поведение Ctrl-a x и Ctrl-a X на экране ?! Регионы, блокировка

    Как настроить разрешение экрана, сообщаемое в приложение JavaScript веб-браузером?

    Каков правильный способ подготовить chroot для восстановления сломанной установки Linux?

    Есть ли способ подключить два компьютера с помощью USB?

    Правильная видеокарта не используется

    Как показать номера строк в Eclipse?

    Сбросить буфер с помощью BufferedReader в Java?

    Как настроить список приветственных файлов в web.xml

    CMD cd на другие диски, кроме C: \ not working

    Как отключить липкие углы в Windows 10

    Как просмотреть веб-камеру в Vista?

    WPF: имя не существует в пространстве имен

    Каков наилучший способ повторного применения сценария к n. CSV-файлам в R?

    Можем ли мы передать модель в качестве параметра в RedirectToAction?

    Excel – разбитый вид листа горизонтально, но просмотр двух разделенных наборов столбцов вместо строк

    Давайте будем гением компьютера.