Вставить сырые байты в формате PDF в JSP - PullRequest
1 голос
/ 25 февраля 2012

У меня есть компонент с необработанными байтами PDF-файла, созданного по запросу пользователя. Я хочу показать этот PDF-файл пользователю, не сохраняя файл PDF на моем сервере.

В моем jsp я пробовал теги типа

<object data="#{bean.pdfBytes}" type="application/pdf" ></object>
<object type="application/pdf" width="600" height="400">
    <h:outputFormat value="#{bean.pdfBytes}" escape="false"/>
</object>

но это ужасно не получается. Любая помощь будет оценена. Заранее спасибо.

1 Ответ

2 голосов
/ 25 февраля 2012

Я хочу показать этот PDF-файл пользователю, не сохраняя файл PDF на моем сервере.

Запишите его в выходной поток ответа. Давайте предположим, что вы используете iText для создания PDF, передайте поток вывода ответа в PdfWrter#getInstance().

public void download() throws IOException {
    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
    response.setContentType("application/pdf");
    response.setHeader("Content-Disposition", "inline; filename=\"" + filename + "\"");

    Document document = new Document();
    PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream());
    document.open();
    // Build document.

    context.responseComplete();
}

Тем не менее, PDF будет полностью отображаться в браузере. Если вы хотите диалог Сохранить как , просто измените часть inline в заголовке на attachment. Или, если вы действительно хотите встроить его в <object>, вам нужно создать сервлет и выполнить описанную выше работу response внутри метода doGet() и, наконец, разрешить <object> URL указывает на этот сервлет.

...