Spring MVC генерация PDF - PullRequest
       6

Spring MVC генерация PDF

3 голосов
/ 13 ноября 2011

У меня есть веб-приложение на Java, основанное на Spring MVC.Задача состоит в том, чтобы создать файл PDF.Как всем известно, в движке Spring есть собственная встроенная библиотека iText, поэтому создание файла pdf действительно просто.Прежде всего, нам нужно перегрузить AbstractView и создать какой-нибудь PdfView.И второе - использовать это представление в контроллере.Но в моем приложении я также должен иметь возможность хранить сгенерированные PDF-файлы на локальном диске или дать своим пользователям некоторую ссылку для загрузки этого файла.Так что мнение в таком случае мне не подходит.

Я хочу создать универсальный генератор PDF, который создает файл PDF и возвращает массив байтов.Так что я могу использовать этот массив для хранения файлов (на жестком диске) или распечатать его прямо в браузере.И вопрос - есть ли способ использовать такой механизм (который возвращает только массив байтов) в решении PdfVIew?Я спрашиваю, потому что перегруженный метод buildPdfDocument (в PdfView) уже имеет параметры PdfWriter и Document.Спасибо

1 Ответ

2 голосов
/ 13 ноября 2011

tldr; Вы должны иметь возможность использовать представление и сохранить его в файл.

Попробуйте использовать Летающая тарелка и его iTextRenderer при перегрузке AbstractPdfView.

import org.xhtmlrenderer.pdf.ITextRenderer;
public class MyAbstractView extends AbstractView {
   OutputStream os;

   public void buildPdfDocument(Map<String,Object> model, com.lowagie.text.Document document, com.lowagie.text.pdf.PdfWriter writer, HttpServletRequest request, HttpServletResponse response){
   //process model params
   os = new FileOutputStream(outputFile);
   ITextRenderer renderer = new ITextRenderer();
   String url = "http://www.mysite.com"; //set your sample url namespace here
   renderer.setDocument(document, url); //use the passed in document
   renderer.layout();
   renderer.createPDF(os);
   os.close();
   }
}

protected final void renderMergedOutputModel(Map<String,Object> model,
                                         HttpServletRequest request,
                                         HttpServletResponse response)
                                  throws Exception{
 if(os != null){
  response.outputStream = os;
 }

public byte[] getPDFAsBytes(){
  if(os != null){
     byte[] stuff;
     os.write(stuff);
     return stuff;
  }
}

}

Возможно, вам придется настроить пример реализации, показанный здесь, но это должно обеспечить базовую суть.

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