Генерация PDF с использованием операции PUT - PullRequest
0 голосов
/ 29 октября 2010

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

@Path("MyDocument.pdf/")
@GET
@Produces({"application/pdf"})
public StreamingOutput getPDF() throws Exception {
    return new StreamingOutput() {
        public void write(OutputStream output) throws IOException, WebApplicationException {
            try {
                PdfGenerator generator = new PdfGenerator(getEntity());
                generator.generatePDF(output);
            } catch (Exception e) {
                logger.error("Error getting PDF file.", e);
                throw new WebApplicationException(e);
            }
        }
    };
}

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

Однако теперь я хочу вернуть PDF более динамично, и мне нужно больше информации отвнешний интерфейс для создания PDF.В других областях я отправляю аналогичные объемы данных и сохраняю их в хранилище данных, используя PUT и @FormParams, например:

@PUT
@Consumes({"application/x-www-form-urlencoded"})
public void put(@FormParam("name") String name,
                @FormParam("details") String details,
                @FormParam("moreDetails") String moreDetails...

Итак, из-за объема данных, которые мне нужно передатьиз внешнего интерфейса я не могу использовать функцию GET только с параметрами запроса.

Я использую Dojo на внешнем интерфейсе, и все взаимодействия Dojo действительно не знают, что делать с PDF, возвращенным из операции PUT.

Мне бы не хотелось делать это в два шага (сохранить данные, отправленные в пут, а затем запросить PDF) просто потому, что PDF в этом случае более «переходный», и яЯ не хочу, чтобы данные занимали место в моем хранилище данных.

Есть ли способ сделать это, или я думаю, что все неправильно?

Спасибо.

1 Ответ

0 голосов
/ 29 октября 2010

Я не совсем понимаю, что вам нужно сделать - похоже, вы хотите отправить некоторые данные, чтобы сохранить их, а затем вернуть pdf в результате?Это должно быть просто, не нужно делать 2 шага, просто отправьте, при отправке сохраните данные и верните PDF.Это твоя проблема?Вы можете уточнить?

PS Хорошо, вам нужно сделать следующее в вашем сервлете:

response.setHeader ("Content-disposition", "attachment; filename =" + "Example.pdf");

response.setContentType ("application / pdf");

Установите "content-length" в ответе, в противном случае плагин Acrobat Reader может работать неправильно, например,response.setContentLength (bos.size ());

Если вы предоставите вывод в JSP, вы можете сделать это:

<% @ page contentType = "application / pdf"%>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...