Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring MVC pdf generation

I have a java web application based on Spring MVC. The task is to generate a pdf file. As all knows the spring engine has its own built-in iText library so the generating of pdf file is really simple. First of all we need to do is to overload AbstractView and create some PdfView. And the seconf thing is to use that view in controller. But in my application I am also have to be able to store generated pdf files on local drive or give my users some link to download that file. So the view in that case is not suitable for me.

I want to create some universal pdf generator that creates a pdf file and returns the bytes array. So I can use that array for file storing (on hard drive) or printing it directly in browser. And the question is - are there any way to use such engine (that returns only the bytes array) in PdfVIew solution? I am asking because overloaded buildPdfDocument method (in PdfView) already have PdfWriter and Document parameters. Thank you

like image 808
nKognito Avatar asked Apr 08 '26 09:04

nKognito


1 Answers

tldr; you should be able to use a view and save it to a file.

Try using Flying Saucer and its iTextRenderer when you overload 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;
  }
}

}

You'll probably have to tweak the sample implementation shown here, but that should provide a basic gist.

like image 188
Visionary Software Solutions Avatar answered Apr 09 '26 21:04

Visionary Software Solutions