« Torna a Development

Generate PDF File in Portlet

Introduction #

Liferay has a "Reports" portlet, which is a full-fledged report application. It's cool!

Sometimes a client may ask for a PDF file for simple reporting purposes. This can be a small portlet using a ResourceURL. The ResourceURL is as specified in JSR-286.

This method uses iText for generating PDF's. The AGPL that governs iText does not allow its use for closed-source projects. Use Liferay's OpenOffice/LibreOffice integration for these type projects.

Environment #

  • Liferay 5.1.2
  • Tomcat 6.0
  • MySQL

JSP Side #

<input type="button" value="Submit"
    onClick="location.href = '<portlet:resourceURL><portlet:param name="reportType" value="pdf" /></portlet:resourceURL>'" />

Portlet Java Code #

public void serveResource(ResourceRequest req, ResourceResponse res)
        throws PortletException, IOException {

        String rType = ParamUtil.getString(req, "reportType");
        
        HttpServletRequest request = PortalUtil.getHttpServletRequest(req);
        
        HttpSession session = request.getSession();
        
        ThemeDisplay themeDisplay = (ThemeDisplay)req.getAttribute(WebKeys.THEME_DISPLAY);
        
        Company company = themeDisplay.getCompany();
        
        if(rType != null && rType.equals("pdf")) {
        	
        	try {                
                    String msg = "Latest Weather Report";
                    
                    Document document = new Document();
                    
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    
                    PdfWriter.getInstance(document, baos);
                    
                    document.open();
                    document.add(new Paragraph(msg));
                    document.add(Chunk.NEWLINE);
                    document.add(new Paragraph("It is a sunny day today."));
                    document.close();
                    
                    res.setContentType("application/pdf");
                    res.addProperty(HttpHeaders.CACHE_CONTROL, "max-age=3600, must-revalidate");
                    
                    res.setContentLength(baos.size());
                    
                    OutputStream out = res.getPortletOutputStream();
                    baos.writeTo(out);
                    
                    out.flush();
                    out.close();
        	} catch (Exception e2) {
                    e2.System.out.println("Error in " + getClass().getName() + "\n" + e2);
        	}
        }
        else {
            try {
                Workbook wb = new HSSFWorkbook();
                
                CreationHelper createHelper = wb.getCreationHelper();
                
                Sheet sheet = wb.createSheet("new sheet");

                Row row = sheet.createRow((short)0);
                Cell cell = row.createCell(0);
                cell.setCellValue(1);

                row.createCell(1).setCellValue(1.2);
                row.createCell(2).setCellValue(
                createHelper.createRichTextString("This is a string"));
                row.createCell(3).setCellValue(true);

                res.setContentType("application/vnd.ms-excel");
                res.addProperty(
                HttpHeaders.CACHE_CONTROL, "max-age=3600, must-revalidate");

                OutputStream out = res.getPortletOutputStream();
                wb.write(out);
                out.flush();
                out.close();
            } catch (Exception e) {
                System.out.println("Exception occurred ...");
            }
        }
}

Future Enhancement #

(1) Generate an Excel report

0 Allegati
87536 Visualizzazioni
Media (3 Voti)
La media del punteggio è 4.33333333333333 stelle su 5.
Commenti
Commenti Autore Data
Hi I just want to know what jar files I need... Mohammed Azam 5 novembre 2012 5.00
The PDF generation seems to use iText PDF... Adam Victor Nazareth Brandizzi 5 novembre 2012 5.01
good morning, I would ask how I can save the pdf? josmar javier Alarcon Bothia 11 febbraio 2013 6.08
Thanks for Sharing.it is working. we need to... Ravi Teja 21 marzo 2013 5.02
Please follow this link to get sample portlet... Ravi Teja 22 marzo 2013 5.13
Ravi Teja your link is not working djo vitch 6 giugno 2013 3.25
Hi Vitch, Please go to below link. and there... Ravi Teja 1 ottobre 2013 22.51
How to display the values in table instead of... Kalai Arasan 30 settembre 2013 5.16
Hi Kalai arasan, Please go throw this link... Ravi Teja 1 ottobre 2013 22.47
I wants to know the jar files needs to be... Kalai Arasan 19 novembre 2013 22.30
PDF generation is working fine. Bur i wants to... Kalai Arasan 19 novembre 2013 22.32
I wants to know either i create the class for... Kalai Arasan 19 novembre 2013 22.35
Hi! i used the code to generate pdf that works... Kalai Arasan 1 dicembre 2013 23.38
We can refresh portlet after download file?... Vasily Polyakov 17 febbraio 2014 4.27
hi How can i extract lpkg file to see war file veeresh hosamani 11 aprile 2014 1.46

Hi

I just want to know what jar files I need to import packages.
Inviato il 05/11/12 5.00.
The PDF generation seems to use iText PDF (http://itextpdf.com/) and the other report seems to be generated by Apache POI (http://poi.apache.org/).
Inviato il 05/11/12 5.01 in risposta a Mohammed Azam.
good morning, I would ask how I can save the pdf?
Inviato il 11/02/13 6.08.
Thanks for Sharing.it is working.
we need to add i text jar in lib.
Inviato il 21/03/13 5.02 in risposta a josmar javier Alarcon Bothia.
Please follow this link to get sample portlet
.it will open in popwindow as well as ask for download.
(http://www.liferay.com/community/forums/-/message_boards/message/22909­051)
Inviato il 22/03/13 5.13 in risposta a Ravi Teja.
Ravi Teja your link is not working
Inviato il 06/06/13 3.25 in risposta a Ravi Teja.
How to display the values in table instead of paragraph in pdf?
Inviato il 30/09/13 5.16.
Hi Kalai arasan,

Please go throw this link (http://tutorials.jenkov.com/java-itext/table.html).
Inviato il 01/10/13 22.47 in risposta a Kalai arasan.
Hi Vitch,

Please go to below link. and there you can find ( pdfgeneration-portlet.rar )
https://www.liferay.com/community/forums/-/message_boards/message/22903036
Inviato il 01/10/13 22.51 in risposta a djo vitch.
I wants to know the jar files needs to be included!
Inviato il 19/11/13 22.30.
PDF generation is working fine. Bur i wants to generate excel sheet that's the problem arise with import files because of missing jar files.
Inviato il 19/11/13 22.32.
I wants to know either i create the class for Workbook wb = new HSSFWorkbook(); or import file for Workbook and HSSFWorkbook.
Inviato il 19/11/13 22.35 in risposta a Kalai arasan.
Hi! i used the code to generate pdf that works fine, But both pdf and excel will appears in the name of the site page automatically. How can i give the name for documents manually.
Inviato il 01/12/13 23.38.
We can refresh portlet after download file? File downloaded successfully, but submit button after this look like pressed. Thanks.
Inviato il 17/02/14 4.27.
hi
How can i extract lpkg file to see war file
Inviato il 11/04/14 1.46.