2 * ================================================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ================================================================================
21 /* ===========================================================================================
22 * This class is part of <I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I>
23 * Raptor : This tool is used to generate different kinds of reports with lot of utilities
24 * ===========================================================================================
26 * -------------------------------------------------------------------------------------------
27 * PdfReportHandler.java - This class is used to generate reports in PDF using iText
28 * -------------------------------------------------------------------------------------------
33 * 14-Jul-2009 : Version 8.4 (Sundar); <UL>
34 * <LI> Dashboard reports can be downloaded with each report occupying separate page including its charts. </LI>
38 package org.openecomp.portalsdk.analytics.model.pdf;
40 import java.awt.Color;
42 import java.io.FileNotFoundException;
43 import java.io.IOException;
44 import java.io.OutputStream;
45 import java.io.StringReader;
46 import java.net.MalformedURLException;
47 import java.sql.Connection;
48 import java.sql.ResultSet;
49 import java.sql.ResultSetMetaData;
50 import java.sql.SQLException;
51 import java.sql.Statement;
52 import java.text.SimpleDateFormat;
53 import java.util.ArrayList;
54 import java.util.Calendar;
55 import java.util.Date;
56 import java.util.HashMap;
57 import java.util.Iterator;
58 import java.util.List;
60 import java.util.Map.Entry;
62 import java.util.TimeZone;
63 import java.util.TreeMap;
64 import java.util.Vector;
66 import javax.servlet.http.HttpServletRequest;
67 import javax.servlet.http.HttpServletResponse;
68 import javax.servlet.http.HttpSession;
70 import org.openecomp.portalsdk.analytics.error.RaptorException;
71 import org.openecomp.portalsdk.analytics.error.ReportSQLException;
72 import org.openecomp.portalsdk.analytics.model.ReportHandler;
73 import org.openecomp.portalsdk.analytics.model.ReportLoader;
74 import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
75 import org.openecomp.portalsdk.analytics.model.definition.ReportDefinition;
76 import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
77 import org.openecomp.portalsdk.analytics.system.AppUtils;
78 import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
79 import org.openecomp.portalsdk.analytics.system.Globals;
80 import org.openecomp.portalsdk.analytics.util.AppConstants;
81 import org.openecomp.portalsdk.analytics.util.DataSet;
82 import org.openecomp.portalsdk.analytics.util.HtmlStripper;
83 import org.openecomp.portalsdk.analytics.util.Utils;
84 import org.openecomp.portalsdk.analytics.view.ColumnHeader;
85 import org.openecomp.portalsdk.analytics.view.ColumnHeaderRow;
86 import org.openecomp.portalsdk.analytics.view.DataRow;
87 import org.openecomp.portalsdk.analytics.view.DataValue;
88 import org.openecomp.portalsdk.analytics.view.HtmlFormatter;
89 import org.openecomp.portalsdk.analytics.view.ReportData;
90 import org.openecomp.portalsdk.analytics.view.RowHeader;
91 import org.openecomp.portalsdk.analytics.view.RowHeaderCol;
92 import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
93 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
95 import com.lowagie.text.BadElementException;
96 import com.lowagie.text.Chunk;
97 import com.lowagie.text.Document;
98 import com.lowagie.text.DocumentException;
99 import com.lowagie.text.Element;
100 import com.lowagie.text.ElementTags;
101 import com.lowagie.text.Font;
102 import com.lowagie.text.FontFactory;
103 import com.lowagie.text.Image;
104 import com.lowagie.text.PageSize;
105 import com.lowagie.text.Paragraph;
106 import com.lowagie.text.Phrase;
107 import com.lowagie.text.Rectangle;
108 import com.lowagie.text.html.simpleparser.HTMLWorker;
109 import com.lowagie.text.html.simpleparser.StyleSheet;
110 import com.lowagie.text.pdf.PdfPCell;
111 import com.lowagie.text.pdf.PdfPTable;
112 import com.lowagie.text.pdf.PdfWriter;
115 * @author mwliu and sundar
118 public class PdfReportHandler extends org.openecomp.portalsdk.analytics.RaptorObject{
124 private HtmlStripper strip = new HtmlStripper();
125 private static final int RetryCreateNewImage = 3;
126 private int retryCreateNewImageCount=0;
127 EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(PdfReportHandler.class);
129 private String FONT_FAMILY = "Arial";
130 private int FONT_SIZE = 9;
132 public PdfReportHandler() { }
134 public void createPdfFileContent(HttpServletRequest request, HttpServletResponse response, int type) throws IOException, RaptorException {
136 Document document = new Document();
137 ReportHandler rh = new ReportHandler();
138 String formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new Date());
139 String pdfFName = "";
140 String user_id = AppUtils.getUserID(request);
142 response.setContentType("application/pdf");
143 OutputStream outStream = response.getOutputStream();
145 String formattedReportName = "";
146 PdfWriter writer = null;
147 ReportRuntime firstReportRuntimeObj = null;
150 ReportRuntime rr = null;
151 if(rr==null) rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
153 boolean isDashboard = false;
154 if ((request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REP_ID)!=null) && ( ((String) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REP_ID)).equals(rr.getReportID())) ) {
159 String reportID = (String) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REP_ID);
160 ReportRuntime rrDash = rh.loadReportRuntime(request, reportID, true, 1);
161 pb = preparePdfBean(request,rrDash);
164 document.setPageSize(PageSize.getRectangle(pb.getPagesize()));
165 if(!pb.isPortrait()) // get this from properties file
166 document.setPageSize(document.getPageSize().rotate());
169 writer = PdfWriter.getInstance(document, response.getOutputStream());
170 writer.setPageEvent(new PageEvent(pb));//header,footer,bookmark
173 formattedReportName = new HtmlStripper().stripSpecialCharacters(rrDash.getReportName());
174 if(pb.isAttachmentOfEmail())
175 response.setHeader("Content-disposition", "inline");
177 response.setHeader("Content-disposition", "attachment;filename="+ formattedReportName+formattedDate+user_id+".pdf");
179 pdfFName = "dashboard"+formattedReportName+formattedDate+user_id+".pdf";
180 Map reportRuntimeMap = null;
181 Map reportDataMap = null;
182 Map reportDisplayTypeMap = null;
184 reportRuntimeMap = (TreeMap) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP);
185 reportDataMap = (TreeMap) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP);
186 reportDisplayTypeMap = (TreeMap) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_DISPLAYTYPE_MAP);
188 if(reportRuntimeMap!=null) {
189 //ServletOutputStream sos = response.getOutputStream();
190 Set setReportRuntime = reportRuntimeMap.entrySet();
191 Set setReportDataMap = reportDataMap.entrySet();
192 Set setReportDisplayTypeMap = reportDisplayTypeMap.entrySet();
194 Iterator iter2 = setReportDataMap.iterator();
195 Iterator iter3 = setReportDisplayTypeMap.iterator();
197 for(Iterator iter = setReportRuntime.iterator(); iter.hasNext(); ) {
199 Map.Entry entryData = (Entry) iter2.next();
200 Map.Entry entry = (Entry) iter.next();
201 Map.Entry entryCheckChart = (Entry) iter3.next();
202 //String rep_id = (String) entry.getKey();
203 ReportRuntime rrDashRep = (ReportRuntime) entry.getValue();
206 firstReportRuntimeObj = (ReportRuntime) entry.getValue();
207 if(pb.isCoverPageIncluded()) {
208 document = paintDashboardCoverPage(document, rrDash, firstReportRuntimeObj, request);
211 ReportData rdDashRep = (ReportData) entryData.getValue();
213 //pb.setDisplayChart(nvl(rr.getChartType()).trim().length()>0 && rr.getDisplayChart());
214 if( ((rrDashRep.getChartType()).trim().length()>0 && rrDashRep.getDisplayChart()) && entryCheckChart.getValue().toString().equals("c")) {
216 pb.setTitle(nvl(rrDashRep.getReportTitle()).length()>0?rrDashRep.getReportTitle():rrDashRep.getReportName());
217 paintPdfImage(request, document,AppUtils.getTempFolderPath()+"cr_"+ pb.getUserId()+"_"+request.getSession().getId()+"_"+rrDashRep.getReportID()+".png", rrDashRep);
220 pb.setTitle(nvl(rrDashRep.getReportTitle()).length()>0?rrDashRep.getReportTitle():rrDashRep.getReportName());
221 paintPdfData(request, document,rdDashRep,rrDashRep, "");
226 } catch (DocumentException dex) {dex.printStackTrace();}
227 catch (RaptorException rex) {rex.printStackTrace();}
230 //ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
231 //ReportData rd = (ReportData) request.getSession().getAttribute(AppConstants.RI_REPORT_DATA);
233 ReportData rd = null;
236 if(!nvl(request.getParameter("parent"), "").equals("N")) parent = nvl(request.getParameter("parent"), "");
237 if(parent.startsWith("parent_")) parentFlag = 1;
238 if(parentFlag == 1) {
239 rr = (ReportRuntime) request.getSession().getAttribute(parent+"_rr");
240 rd = (ReportData) request.getSession().getAttribute(parent+"_rd");
242 if(rr==null) rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
243 if(rd==null) rd = (ReportData) request.getSession().getAttribute(AppConstants.RI_REPORT_DATA);
245 pb = preparePdfBean(request,rr);
246 FONT_FAMILY = rr.getPDFFont();
247 FONT_SIZE = rr.getPDFFontSize();
248 //System.out.println(pb);
250 formattedReportName = new HtmlStripper().stripSpecialCharacters(rr.getReportName());
254 response.setContentType("application/pdf");
255 if(pb.isAttachmentOfEmail())
256 response.setHeader("Content-disposition", "inline");
258 response.setHeader("Content-disposition", "attachment;filename="+ formattedReportName+formattedDate+user_id+".pdf");
260 document.setPageSize(PageSize.getRectangle(pb.getPagesize()));
262 if(!pb.isPortrait()) // get this from properties file
263 document.setPageSize(document.getPageSize().rotate());
267 writer = PdfWriter.getInstance(document, outStream);
268 writer.setPageEvent(new PageEvent(pb));//header,footer,bookmark
271 //System.out.println("Document 1 " + document);
272 if(pb.isCoverPageIncluded()) {
273 document = paintCoverPage(document, rr, request);
276 //boolean isImageRotate = false;
277 //System.out.println("Document 2 " + document);
279 if(pb.isDisplayChart()) {
280 paintPdfImage(request, document,AppUtils.getTempFolderPath()+"cr_"+ pb.getUserId()+"_"+request.getSession().getId()+"_"+rr.getReportID()+".png", rr);
282 //System.out.println("Document 4" + document);
285 if(type == 3 && rr.getSemaphoreList()==null && !(rr.getReportType().equals(AppConstants.RT_CROSSTAB)) ) { //type = 3 is whole
286 String sql_whole = (String) request.getAttribute(AppConstants.RI_REPORT_SQL_WHOLE);
287 returnValue = paintPdfData(request, document, rd, rr, sql_whole);
288 } else if(type == 2) {
289 returnValue = paintPdfData(request, document, rd, rr, "");
291 //String sql_whole = (String) request.getAttribute(AppConstants.RI_REPORT_SQL_WHOLE);
292 int downloadLimit = (rr.getMaxRowsInExcelDownload()>0)?rr.getMaxRowsInExcelDownload():Globals.getDownloadLimit();
293 String action = request.getParameter(AppConstants.RI_ACTION);
295 if(!(rr.getReportType().equals(AppConstants.RT_CROSSTAB)) && !action.endsWith("session"))
296 rd = rr.loadReportData(-1, AppUtils.getUserID(request), downloadLimit,request, false /*download*/);
297 if(rr.getSemaphoreList()!=null) {
298 rd = rr.loadReportData(-1, AppUtils.getUserID(request), downloadLimit,request, true);
299 returnValue = paintPdfData(request, document, rd, rr, "");
301 returnValue = paintPdfData(request, document, rd, rr, rr.getWholeSQL());
308 //paintPdfData(document,rd,rr);
311 } catch (DocumentException de) {
312 de.printStackTrace();
313 //System.err.println("document: " + de.getMessage());
319 Runtime runtime = Runtime.getRuntime();
320 logger.debug(EELFLoggerDelegate.debugLogger, ("##### Heap utilization statistics [MB] #####"));
321 logger.debug(EELFLoggerDelegate.debugLogger, ("Used Memory:"
322 + (runtime.maxMemory() - runtime.freeMemory()) / mb));
323 logger.debug(EELFLoggerDelegate.debugLogger, ("Free Memory:"
324 + runtime.freeMemory() / mb));
325 logger.debug(EELFLoggerDelegate.debugLogger, ("Total Memory:" + runtime.totalMemory() / mb));
326 logger.debug(EELFLoggerDelegate.debugLogger, ("Max Memory:" + runtime.maxMemory() / mb));
330 private Document paintCoverPage(Document doc, ReportRuntime rr, HttpServletRequest request) throws IOException, DocumentException {
332 //System.out.println("PDFREPORTHANDLER STARTED ... " );
333 if(nvl(rr.getPdfImg()).length()>0) {
334 Image image1 = Image.getInstance(AppUtils.getExcelTemplatePath()+"../../"+AppUtils.getImgFolderURL()+rr.getPdfImg());
335 image1.scalePercent(20f, 20f);
338 float firstColumnSize = Globals.getCoverPageFirstColumnSize();
339 float[] relativeWidths = {firstColumnSize,1f-firstColumnSize};
340 PdfPTable table = new PdfPTable(relativeWidths);
341 table.getDefaultCell().setBorderWidth(0);
342 addEmptyRows(table,6);
343 HTMLWorker worker = new HTMLWorker(doc);
344 StyleSheet style = new StyleSheet();
345 style.loadTagStyle("body", "leading", "16,0");
346 StringBuffer reportDescrBuf = new StringBuffer("");
347 ArrayList descr = HTMLWorker.parseToList(new StringReader(nvl(rr.getReportDescr())), style);
348 ArrayList paraList = null;
349 if(nvl(rr.getReportTitle()).length()>0) {
350 add2Cells(table,"Report Title : ",nvl(rr.getReportTitle()));
351 if(nvl(rr.getReportSubTitle()).length()>0) {
352 add2Cells(table,"Report Sub-Title : ",nvl(rr.getReportSubTitle()));
353 System.out.println("Adding the report sub-title ");
357 add2Cells(table,"Report Name : ",nvl(rr.getReportName()));
359 if((descr!=null && descr.size()>0)) {
360 paraList = (com.lowagie.text.Paragraph)descr.get(0);
361 for (int i=0 ; i<paraList.size(); i++) {
362 reportDescrBuf.append(paraList.get(i));
366 add2Cells(table,"Description : ",reportDescrBuf.toString());
367 if(Globals.getSessionInfoForTheCoverPage().length()>0) {
368 String nameValue[] = Globals.getSessionInfoForTheCoverPage().split(",");
369 String name=nameValue[0];
370 String value=nameValue[1];
371 add2Cells(table,name+" : ",(AppUtils.getRequestNvlValue(request, value).length()>0?AppUtils.getRequestNvlValue(request, value):nvl((String)request.getSession().getAttribute(value))));
374 if(Globals.isCreatedOwnerInfoNeeded()) {
375 add2Cells(table,"Created By : ",nvl(AppUtils.getUserName(rr.getCreateID())));
376 add2Cells(table,"Owner : ",nvl(AppUtils.getUserName(rr.getOwnerID())));
378 if(Globals.displayLoginIdForDownloadedBy())
379 add2Cells(table,"Downloaded by : ",nvl(AppUtils.getUserBackdoorLoginId(request)));
381 add2Cells(table,"Downloaded by : ",nvl(AppUtils.getUserName(AppUtils.getUserID(request))));
383 addEmptyRows(table,1);
385 boolean isFirstRow = true;
386 ArrayList al = rr.getParamNameValuePairsforPDFExcel(request, 1);
388 al = (ArrayList) request.getSession().getAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO);
391 Iterator it = al.iterator();
392 addEmptyRows(table,1);
393 //if(!Globals.customizeFormFieldInfo()) {
394 if(rr.getFormFieldComments(request).length()<=0) {
395 while(it.hasNext()) {
398 add2Cells(table, "Run-time Criteria : ", " ");
402 IdNameValue value = (IdNameValue)it.next();
403 if(!value.getId().trim().equals("BLANK"))
404 //System.out.println("PDFREPORTHANDLER " + value.getId()+" : "+value.getName());
405 add2Cells(table, value.getId()+" : ",value.getName().replaceAll("~",","));
406 //add2Cells(table, rr.getFormFieldComments(request), " ");
408 addEmptyRows(table,1);
414 //add2Cells(table, "Run-time Criteria : ", " ");
415 addEmptyRows(table,1);
417 //com.lowagie.text.html.HtmlParser.parse(doc, new StringReader(rr.getFormFieldComments(request)));
418 ArrayList p = HTMLWorker.parseToList(new StringReader(rr.getFormFieldComments(request).replaceAll("~",",")), style);
420 for (int k = 0; k < p.size(); ++k){
421 doc.add((com.lowagie.text.Element)p.get(k));
430 private Document paintDashboardCoverPage(Document doc, ReportRuntime rrDashRep, ReportRuntime firstReportRuntimeObj, HttpServletRequest request) throws IOException, DocumentException {
432 //System.out.println("PDFREPORTHANDLER STARTED ... " );
433 float firstColumnSize = Globals.getCoverPageFirstColumnSize();
434 float[] relativeWidths = {firstColumnSize,1f-firstColumnSize};
435 PdfPTable table = new PdfPTable(relativeWidths);
436 table.getDefaultCell().setBorderWidth(0);
437 addEmptyRows(table,6);
439 add2Cells(table,"Report Name : ",rrDashRep.getReportName());
440 add2Cells(table,"Description : ",rrDashRep.getReportDescr());
441 if(Globals.getSessionInfoForTheCoverPage().length()>0) {
442 String nameValue[] = Globals.getSessionInfoForTheCoverPage().split(",");
443 String name=nameValue[0];
444 String value=nameValue[1];
445 add2Cells(table,name+" : ",(AppUtils.getRequestNvlValue(request, value).length()>0?AppUtils.getRequestNvlValue(request, value):nvl((String)request.getSession().getAttribute(value))));
448 if(Globals.isCreatedOwnerInfoNeeded()) {
449 add2Cells(table,"Created By : ",AppUtils.getUserName(rrDashRep.getCreateID()));
450 add2Cells(table,"Owner : ",AppUtils.getUserName(rrDashRep.getOwnerID()));
452 if(Globals.displayLoginIdForDownloadedBy())
453 add2Cells(table,"Downloaded by : ",AppUtils.getUserBackdoorLoginId(request));
455 add2Cells(table,"Downloaded by : ",AppUtils.getUserName(request));
457 addEmptyRows(table,1);
459 boolean isFirstRow = true;
460 ArrayList al = firstReportRuntimeObj.getParamNameValuePairsforPDFExcel(request, 2);
461 Iterator it = al.iterator();
462 addEmptyRows(table,1);
463 //if(!Globals.customizeFormFieldInfo()) {
464 if(firstReportRuntimeObj.getFormFieldComments(request).length()<=0) {
465 while(it.hasNext()) {
468 add2Cells(table, "Run-time Criteria : ", " ");
472 IdNameValue value = (IdNameValue)it.next();
473 if(!value.getId().trim().equals("BLANK"))
474 //System.out.println("PDFREPORTHANDLER " + value.getId()+" : "+value.getName());
475 add2Cells(table, value.getId()+" : ",value.getName());
476 //add2Cells(table, rr.getFormFieldComments(request), " ");
478 addEmptyRows(table,1);
484 //add2Cells(table, "Run-time Criteria : ", " ");
485 addEmptyRows(table,1);
487 //com.lowagie.text.html.HtmlParser.parse(doc, new StringReader(rr.getFormFieldComments(request)));
488 HTMLWorker worker = new HTMLWorker(doc);
489 StyleSheet style = new StyleSheet();
490 style.loadTagStyle("body", "leading", "16,0");
491 ArrayList p = HTMLWorker.parseToList(new StringReader(firstReportRuntimeObj.getFormFieldComments(request)), style);
493 for (int k = 0; k < p.size(); ++k){
494 doc.add((com.lowagie.text.Element)p.get(k));
503 public static void addEmptyRows(PdfPTable table, int rows) throws DocumentException {
504 for (int i=0; i<rows; i++)
505 for(int j=0;j<table.getAbsoluteWidths().length;j++)
506 table.addCell(new Paragraph(" "));
510 private void add2Cells(PdfPTable table, String key, String value) {
513 cell = new PdfPCell(new Paragraph(key));
514 cell.setHorizontalAlignment(Rectangle.ALIGN_RIGHT);
515 cell.setBorderWidth(0f);
518 cell = new PdfPCell(new Paragraph(value));
519 cell.setHorizontalAlignment(Rectangle.ALIGN_LEFT);
520 cell.setBorderWidth(0f);
524 private void paintPdfImage(HttpServletRequest request, Document document, String fileName, ReportRuntime rr)
525 throws DocumentException
528 ArrayList images = getImage(request, fileName,pb.isAttachmentOfEmail()?true:false, rr);
529 //Image image = getImage(request, fileName,pb.isAttachmentOfEmail()?true:false);
530 PdfPTable table = null;
531 PdfPCell cellValue = null;
534 for (int i = 0; i < images.size(); i++) {
535 table = new PdfPTable(1);
536 cellValue = new PdfPCell();
537 cellValue.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
538 Image image = (Image) images.get(i);
539 image.setAlignment(Image.ALIGN_CENTER);
540 //System.out.println("Document 3 " + document + " i-" + i);
543 //System.out.println("Document 31 " + document);
544 cellValue.setImage(image);
545 //table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
546 table.addCell(cellValue);
547 //System.out.println("Document 32 " + document + "table " + table);
549 //System.out.println("Document 33 " + document);
554 private ArrayList getImage(HttpServletRequest request, String fileName, boolean isGenerateNewImage, ReportRuntime rr) {
555 ArrayList images = new ArrayList();
556 if(!isGenerateNewImage) {
558 Image image = Image.getInstance(fileName);
562 catch (MalformedURLException e) {
563 isGenerateNewImage = true;
564 //e.printStackTrace();
566 catch (BadElementException e) {
567 isGenerateNewImage = true;
568 //e.printStackTrace();
570 } catch (FileNotFoundException e) {
571 isGenerateNewImage = true;
572 //e.printStackTrace();
573 } catch (IOException e) {
574 isGenerateNewImage = true;
575 //e.printStackTrace();
579 if(isGenerateNewImage && retryCreateNewImageCount<RetryCreateNewImage){
580 retryCreateNewImageCount++;
581 return generateNewImage(request, rr);
582 //return getImage(request,fileName, false);
589 private ArrayList generateNewImage(HttpServletRequest request, ReportRuntime rr) {
590 ArrayList images = new ArrayList();
592 //ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
594 if(request.getSession().getAttribute(AppConstants.RI_CHART_DATA)!=null) {
595 ds = (DataSet) request.getSession().getAttribute(AppConstants.RI_CHART_DATA);
597 ds = rr.loadChartData(pb.getUserId(),request);
599 String downloadFileName = "";
600 HashMap additionalChartOptionsMap = new HashMap();
601 String chartType = nvl(rr.getChartType());
602 if(chartType.equals(AppConstants.GT_PIE_MULTIPLE)) {
603 additionalChartOptionsMap.put("multiplePieOrderRow", new Boolean((AppUtils.getRequestNvlValue(request, "multiplePieOrder").length()>0?AppUtils.getRequestNvlValue(request, "multiplePieOrder").equals("row"):rr.isMultiplePieOrderByRow())) );
604 additionalChartOptionsMap.put("multiplePieLabelDisplay", AppUtils.getRequestNvlValue(request, "multiplePieLabelDisplay").length()>0? AppUtils.getRequestNvlValue(request, "multiplePieLabelDisplay"):rr.getMultiplePieLabelDisplay());
605 additionalChartOptionsMap.put("chartDisplay", new Boolean(AppUtils.getRequestNvlValue(request, "chartDisplay").length()>0? AppUtils.getRequestNvlValue(request, "chartDisplay").equals("3D"):rr.isChartDisplayIn3D()));
606 } else if (chartType.equals(AppConstants.GT_BAR_3D)) {
607 additionalChartOptionsMap.put("chartOrientation", new Boolean((AppUtils.getRequestNvlValue(request, "chartOrientation").length()>0?AppUtils.getRequestNvlValue(request, "chartOrientation").equals("vertical"):rr.isVerticalOrientation())) );
608 additionalChartOptionsMap.put("secondaryChartRenderer", AppUtils.getRequestNvlValue(request, "secondaryChartRenderer").length()>0? AppUtils.getRequestNvlValue(request, "secondaryChartRenderer"):rr.getSecondaryChartRenderer());
609 additionalChartOptionsMap.put("chartDisplay", new Boolean(AppUtils.getRequestNvlValue(request, "chartDisplay").length()>0? AppUtils.getRequestNvlValue(request, "chartDisplay").equals("3D"):rr.isChartDisplayIn3D()));
610 additionalChartOptionsMap.put("lastSeriesALineChart", new Boolean(rr.isLastSeriesALineChart()));
611 } else if (chartType.equals(AppConstants.GT_LINE)) {
612 additionalChartOptionsMap.put("chartOrientation", new Boolean((AppUtils.getRequestNvlValue(request, "chartOrientation").length()>0?AppUtils.getRequestNvlValue(request, "chartOrientation").equals("vertical"):rr.isVerticalOrientation())) );
613 //additionalChartOptionsMap.put("secondaryChartRenderer", AppUtils.getRequestNvlValue(request, "secondaryChartRenderer").length()>0? AppUtils.getRequestNvlValue(request, "secondaryChartRenderer"):rr.getSecondaryChartRenderer());
614 additionalChartOptionsMap.put("chartDisplay", new Boolean(AppUtils.getRequestNvlValue(request, "chartDisplay").length()>0? AppUtils.getRequestNvlValue(request, "chartDisplay").equals("3D"):rr.isChartDisplayIn3D()));
615 additionalChartOptionsMap.put("lastSeriesABarChart", new Boolean(rr.isLastSeriesABarChart()));
616 } else if (chartType.equals(AppConstants.GT_TIME_DIFFERENCE_CHART)) {
617 additionalChartOptionsMap.put("intervalFromDate",AppUtils.getRequestNvlValue(request, "intervalFromDate").length()>0?AppUtils.getRequestNvlValue(request, "intervalFromDate"):rr.getIntervalFromdate());
618 additionalChartOptionsMap.put("intervalToDate", AppUtils.getRequestNvlValue(request, "intervalToDate").length()>0? AppUtils.getRequestNvlValue(request, "intervalToDate"):rr.getIntervalTodate());
619 additionalChartOptionsMap.put("intervalLabel", AppUtils.getRequestNvlValue(request, "intervalLabel").length()>0? AppUtils.getRequestNvlValue(request, "intervalLabel"):rr.getIntervalLabel());
620 } else if (chartType.equals(AppConstants.GT_REGRESSION)) {
621 additionalChartOptionsMap.put("regressionType",AppUtils.getRequestNvlValue(request, "regressionType").length()>0?AppUtils.getRequestNvlValue(request, "regressionType"):rr.getLinearRegression());
622 additionalChartOptionsMap.put("linearRegressionColor",nvl(rr.getLinearRegressionColor()));
623 additionalChartOptionsMap.put("expRegressionColor",nvl(rr.getExponentialRegressionColor()));
624 additionalChartOptionsMap.put("maxRegression",nvl(rr.getCustomizedRegressionPoint()));
625 } else if (chartType.equals(AppConstants.GT_STACK_BAR) ||chartType.equals(AppConstants.GT_STACKED_HORIZ_BAR) || chartType.equals(AppConstants.GT_STACKED_HORIZ_BAR_LINES)
626 || chartType.equals(AppConstants.GT_STACKED_VERT_BAR) || chartType.equals(AppConstants.GT_STACKED_VERT_BAR_LINES)
628 additionalChartOptionsMap.put("overlayItemValue",new Boolean(nvl(rr.getOverlayItemValueOnStackBar()).equals("Y")));
630 additionalChartOptionsMap.put("legendPosition", nvl(rr.getLegendPosition()));
631 additionalChartOptionsMap.put("hideToolTips", new Boolean(rr.hideChartToolTips()));
632 additionalChartOptionsMap.put("hideLegend", new Boolean(AppUtils.getRequestNvlValue(request, "hideLegend").length()>0? AppUtils.getRequestNvlValue(request, "hideLegend").equals("Y"):rr.hideChartLegend()));
633 additionalChartOptionsMap.put("labelAngle", nvl(rr.getLegendLabelAngle()));
634 additionalChartOptionsMap.put("maxLabelsInDomainAxis", nvl(rr.getMaxLabelsInDomainAxis()));
635 additionalChartOptionsMap.put("rangeAxisLowerLimit", nvl(rr.getRangeAxisLowerLimit()));
636 additionalChartOptionsMap.put("rangeAxisUpperLimit", nvl(rr.getRangeAxisUpperLimit()));
639 boolean totalOnChart = false;
640 totalOnChart = AppUtils.getRequestNvlValue(request, "totalOnChart").equals("Y");
641 String filename = null;
642 ArrayList graphURL = new ArrayList();
643 ArrayList chartNames = new ArrayList();
644 ArrayList fileNames = new ArrayList();
645 List l = rr.getAllColumns();
646 List lGroups = rr.getAllChartGroups();
647 HashMap mapYAxis = rr.getAllChartYAxis(rr.getReportParamValues());
648 String chartLeftAxisLabel = rr.getFormFieldFilled(nvl(rr.getChartLeftAxisLabel()));
649 String chartRightAxisLabel = rr.getFormFieldFilled(nvl(rr.getChartRightAxisLabel()));
650 int displayTotalOnChart = 0;
651 HashMap formValues = Globals.getRequestParamtersMap(request, false);
653 for (Iterator iterC = l.iterator(); iterC.hasNext();) {
654 DataColumnType dc = (DataColumnType) iterC.next();
655 if(nvl(dc.getColName()).equals(AppConstants.RI_CHART_TOTAL_COL)) {
656 displayTotalOnChart = 1;
660 String legendColumnName = (rr.getChartLegendColumn()!=null)?rr.getChartLegendColumn().getDisplayName():"Legend Column";
666 if(rr.hasSeriesColumn() && chartType.equals(AppConstants.GT_TIME_SERIES) && (lGroups==null || lGroups.size() <= 0)) { /** Check whether Report has only category columns if so then all the columns will open in seperate chart - sundar**/
667 for (int i=0; i<rr.getChartValueColumnAxisList(AppConstants.CHART_ALL_COLUMNS, formValues).size();i++) {
668 String chartTitle = Globals.getDisplayChartTitle()? rr.getReportName():"";
669 chartTitle = rr.getFormFieldFilled(chartTitle);
670 downloadFileName = AppUtils.getTempFolderPath()+"cr_"+pb.getUserId()+"_"+request.getSession().getId()+"_"+rr.getReportID()+"_"+i+".png";
671 filename = null;/*(String) ChartGen.generateChart( chartType,
672 request.getSession(),
677 rr.getChartDisplayNamesList(AppConstants.CHART_ALL_COLUMNS, formValues).subList(i, i+1),
678 rr.getChartColumnColorsList(AppConstants.CHART_ALL_COLUMNS, formValues).subList(i, i+1),
679 rr.getChartValueColumnAxisList(AppConstants.CHART_ALL_COLUMNS, formValues).subList(i, i+1),
683 rr.getChartWidthAsInt(),
684 rr.getChartHeightAsInt(),
685 rr.getChartValueColumnsList(AppConstants.CHART_ALL_COLUMNS, formValues).subList(i,i+1),
686 rr.hasSeriesColumn(),
687 //rr.isChartMultiSeries(),
692 AppConstants.WEB_VERSION deviceType,
693 additionalChartOptionsMap,
697 Image image = Image.getInstance(downloadFileName);
699 } catch (MalformedURLException e) {
702 catch (BadElementException e) {
705 } catch (FileNotFoundException e) {
707 } catch (IOException e) {
712 } else { /** first check the columns to be opened in new charts and loop around in ChartGen generate chart function - sundar**/
713 String tempChartGroupPrev = "";
714 String tempChartGroupCurrent = "";
715 for (int i=0; i<lGroups.size();i++) {
716 String chartGroupOrg = (String) lGroups.get(i);
717 String chartYAxis = (String) mapYAxis.get(chartGroupOrg);
718 //System.out.println("chartGroupOrg " + chartGroupOrg);
719 if(nvl(chartGroupOrg).length()>0)
720 tempChartGroupCurrent = chartGroupOrg.substring(0,chartGroupOrg.lastIndexOf("|"));
721 if(i>0) tempChartGroupPrev = ((String) lGroups.get(i-1)).substring(0,((String) lGroups.get(i-1)).lastIndexOf("|"));
722 //System.out.println("TEMPCHARTGROUP " + tempChartGroupCurrent + " " + tempChartGroupPrev);
723 if(tempChartGroupCurrent.equals(tempChartGroupPrev)) continue;
724 //System.out.println("CHARTGROUPORG " + chartGroupOrg + " " + lGroups) ;
725 //String chartGroup = chartGroupOrg.substring(0,chartGroupOrg.lastIndexOf("|"));
726 String chartGroup = chartGroupOrg;
728 //System.out.println("$$$$CHARTGROUP in JSP " +chartGroup+ " "+ chartGroupOrg );
729 //System.out.println(" rr.getChartGroupDisplayNamesList(chartGroup) " + rr.getChartGroupDisplayNamesList(chartGroup));
730 //System.out.println(" rr.getChartGroupColumnColorsList(chartGroup) " + rr.getChartGroupColumnColorsList(chartGroup));
731 //System.out.println(" rr.getChartGroupColumnAxisList(chartGroup) " + rr.getChartGroupColumnAxisList(chartGroup));
732 //System.out.println(" rr.getChartGroupValueColumnAxisList(chartGroupOrg) " + rr.getChartGroupValueColumnAxisList(chartGroupOrg));
734 downloadFileName = AppUtils.getTempFolderPath()+"cr_"+pb.getUserId()+"_"+request.getSession().getId()+"_"+rr.getReportID()+"_"+i+".png";
735 String chartTitle = (Globals.getDisplayChartTitle()? (chartGroup!=null && chartGroup.indexOf("|") > 0 ?chartGroup.substring(0,chartGroup.lastIndexOf("|")):rr.getReportName()):"");
736 chartTitle = rr.getFormFieldFilled(chartTitle);
737 String leftAxisLabel = "";
738 //if(!rr.isChartMultiSeries()) {
739 if(!rr.isMultiSeries()) {
740 leftAxisLabel = ((chartYAxis!=null && chartYAxis.indexOf("|") > 0) ? chartYAxis.substring(0,chartYAxis.lastIndexOf("|")): chartLeftAxisLabel );
742 leftAxisLabel = chartLeftAxisLabel;
745 filename = null;/*(String) ChartGen.generateChart( chartType,
746 request.getSession(),
751 ((chartType.indexOf("Stacked")>0 || chartType.equals(AppConstants.GT_PIE_MULTIPLE) || chartType.equals(AppConstants.GT_BAR_3D))?rr.getChartDisplayNamesList(AppConstants.CHART_ALL_COLUMNS, formValues):rr.getChartGroupDisplayNamesList(chartGroup, formValues)),
752 ((chartType.indexOf("Stacked")>0 || chartType.equals(AppConstants.GT_PIE_MULTIPLE) || chartType.equals(AppConstants.GT_BAR_3D))?rr.getChartColumnColorsList(AppConstants.CHART_ALL_COLUMNS, formValues):rr.getChartGroupColumnColorsList(chartGroup, formValues)),
753 ((chartType.indexOf("Stacked")>0 || chartType.equals(AppConstants.GT_PIE_MULTIPLE) || chartType.equals(AppConstants.GT_BAR_3D))?rr.getChartValueColumnAxisList(AppConstants.CHART_ALL_COLUMNS, formValues):rr.getChartGroupValueColumnAxisList(chartGroupOrg, formValues)),
757 rr.getChartWidthAsInt(),
758 rr.getChartHeightAsInt(),
759 ((chartType.indexOf("Stacked")>0 || chartType.equals(AppConstants.GT_PIE_MULTIPLE))?rr.getChartValueColumnsList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues):rr.getChartGroupValueColumnAxisList(chartGroupOrg, formValues)),
760 rr.hasSeriesColumn(),
761 //rr.isChartMultiSeries(),
766 AppConstants.WEB_VERSION deviceType,
767 additionalChartOptionsMap,
771 Image image = Image.getInstance(downloadFileName);
773 } catch (MalformedURLException e) {
776 catch (BadElementException e) {
779 } catch (FileNotFoundException e) {
781 } catch (IOException e) {
786 if(!chartType.equals(AppConstants.GT_PIE_MULTIPLE)) {
787 for (int i=0; i<rr.getChartValueColumnAxisList(AppConstants.CHART_NEWCHART_COLUMNS, formValues).size();i++) {
788 //System.out.println(" rr.getChartDisplayNamesList(AppConstants.CHART_NEWCHART_COLUMNS).subList(i, i+1) " + rr.getChartDisplayNamesList(AppConstants.CHART_NEWCHART_COLUMNS).subList(i, i+1));
789 //System.out.println(" rr.getChartValueColumnAxisList(AppConstants.CHART_NEWCHART_COLUMNS).subList(i, i+1) " + rr.getChartValueColumnAxisList(AppConstants.CHART_NEWCHART_COLUMNS).subList(i, i+1));
790 //System.out.println(" rr.getChartValueColumnsList(AppConstants.CHART_NEWCHART_COLUMNS).subList(i,i+1) " + rr.getChartValueColumnsList(AppConstants.CHART_NEWCHART_COLUMNS).subList(i,i+1));
792 downloadFileName = AppUtils.getTempFolderPath()+"cr_"+ pb.getUserId()+"_"+request.getSession().getId()+"_"+rr.getReportID()+"_"+i+".png";
793 String chartTitle = Globals.getDisplayChartTitle()? rr.getReportName():"";
794 chartTitle = rr.getFormFieldFilled(chartTitle);
796 filename = null; /*(String) ChartGen.generateChart( chartType,
797 request.getSession(),
802 (chartType.equals(AppConstants.GT_PIE_MULTIPLE))?rr.getChartDisplayNamesList(AppConstants.CHART_ALL_COLUMNS, formValues):rr.getChartDisplayNamesList(AppConstants.CHART_NEWCHART_COLUMNS, formValues).subList(i, i+1),
803 (chartType.equals(AppConstants.GT_PIE_MULTIPLE))?rr.getChartColumnColorsList(AppConstants.CHART_ALL_COLUMNS, formValues):rr.getChartColumnColorsList(AppConstants.CHART_NEWCHART_COLUMNS, formValues).subList(i, i+1),
804 (chartType.equals(AppConstants.GT_PIE_MULTIPLE))?rr.getChartValueColumnAxisList(AppConstants.CHART_ALL_COLUMNS, formValues):rr.getChartValueColumnAxisList(AppConstants.CHART_NEWCHART_COLUMNS, formValues).subList(i, i+1),
808 rr.getChartWidthAsInt(),
809 rr.getChartHeightAsInt(),
810 rr.getChartValueColumnsList(AppConstants.CHART_NEWCHART_COLUMNS, formValues).subList(i,i+1),
811 rr.hasSeriesColumn(),
812 //rr.isChartMultiSeries(),
817 AppConstants.WEB_VERSION,
818 additionalChartOptionsMap,
822 Image image = Image.getInstance(downloadFileName);
824 } catch (MalformedURLException e) {
827 catch (BadElementException e) {
830 } catch (FileNotFoundException e) {
832 } catch (IOException e) {
837 /** second rest of the columns are merged to one single chart - sundar**/
838 // System.out.println(" rr.getChartDisplayNamesList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS) " + rr.getChartDisplayNamesList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS));
839 // System.out.println(" rr.getChartValueColumnAxisList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS) " + rr.getChartValueColumnAxisList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS));
840 // System.out.println(" rr.getChartValueColumnsList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS) " + rr.getChartValueColumnsList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS));
842 if((!(lGroups!=null && lGroups.size() > 0))) {
844 if(/*chartType.equals(AppConstants.GT_TIME_SERIES) && */rr.getChartDisplayNamesList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues)!=null && rr.getChartDisplayNamesList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues).size()>0) {
845 downloadFileName = AppUtils.getTempFolderPath()+"cr_"+ pb.getUserId()+"_"+request.getSession().getId()+"_"+rr.getReportID()+"_All.png";
846 String chartTitle = Globals.getDisplayChartTitle()? rr.getReportName():"";
847 chartTitle = rr.getFormFieldFilled(chartTitle);
849 filename = null; /*(String) ChartGen.generateChart( chartType,
850 request.getSession(),
855 rr.getChartDisplayNamesList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues),
856 rr.getChartColumnColorsList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues),
857 rr.getChartValueColumnAxisList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues),
861 rr.getChartWidthAsInt(),
862 rr.getChartHeightAsInt(),
863 rr.getChartValueColumnsList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues),
864 rr.hasSeriesColumn(),
865 //rr.isChartMultiSeries(),
870 AppConstants.WEB_VERSION,
871 additionalChartOptionsMap,
875 Image image = Image.getInstance(downloadFileName);
877 } catch (MalformedURLException e) {
880 catch (BadElementException e) {
883 } catch (FileNotFoundException e) {
885 } catch (IOException e) {
889 } // Stacked Chart Check
890 } // else no Series Column
894 }catch (Exception e) {
897 // System.out.println("Total Images " + images.size());
898 return images.size()>0?images:null;
903 private boolean isImageRotate(Document doc, Image image) {
905 System.out.println("image size="+image.getWidthPercentage()+ " "+ image.scaledWidth()+
906 " "+image.scaledHeight()+" "+image.getXYRatio());
907 System.out.println("page size = "+ doc.getPageSize().width() + " " +doc.getPageSize().height() +" "+
908 doc.topMargin() + " " +doc.bottomMargin() + " " + doc.leftMargin() + " " +
910 System.out.println(image.scaledWidth()/image.scaledHeight());
911 System.out.println((PageEvent.getPageWidth(doc)/PageEvent.getPageHeight(doc)));
912 // System.out.println(doc.getPageSize().getRotation());
914 float image_w = image.scaledWidth();
915 float image_h = image.scaledHeight();
916 float image_ratio = image_w/image_h;
918 float page_w = PageEvent.getPageWidth(doc);
919 float page_h = PageEvent.getPageHeight(doc);
920 float page_ratio = page_w/page_h;
922 return (image_w > page_w && image_ratio > page_ratio) ||
923 (image_h > page_h && image_ratio < page_ratio);
928 private final int DEFAULT_PDF_DISPLAY_WIDTH = 10;
929 private int paintPdfData(HttpServletRequest request, Document document, ReportData rd, ReportRuntime rr, String sql_whole) throws DocumentException, RaptorException, IOException {
932 Runtime runtime = Runtime.getRuntime();
934 //sql_whole = rr.getWholeSQL();
935 //if(rd.getDataRowCount() >= rr.getReportDataSize()) {
938 float f[] = getRelativeWidths(rd, rr.getReportType().equals(AppConstants.RT_CROSSTAB));
939 PdfPTable table = new PdfPTable(f);
940 table.setWidthPercentage(100f);
941 table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
942 table.getDefaultCell().setVerticalAlignment(Rectangle.ALIGN_BOTTOM);
944 ReportDefinition rdef = (new ReportHandler()).loadReportDefinition(request, rr.getReportID());
946 List allColumns = rdef.getAllColumns();
948 float[] repotWidths = new float[rdef.getVisibleColumnCount()];
950 float pdfDisplayWidth = 0;
951 for(Iterator iter = allColumns.iterator(); iter.hasNext();){
952 DataColumnType dct = (DataColumnType) iter.next();
953 if(dct.isVisible()) {
955 if(dct.getPdfDisplayWidthInPxls() == null || dct.getPdfDisplayWidthInPxls().equals("") || dct.getPdfDisplayWidthInPxls().startsWith("null"))
956 pdfDisplayWidth = DEFAULT_PDF_DISPLAY_WIDTH;
958 pdfDisplayWidth = Float.parseFloat(dct.getPdfDisplayWidthInPxls());
960 repotWidths [columnIdx++] = pdfDisplayWidth;
964 table.setWidths(repotWidths);
968 //TODO: check title and subtitle
969 HttpSession session = request.getSession();
970 String drilldown_index = (String) session.getAttribute("drilldown_index");
973 index = Integer.parseInt(drilldown_index);
974 } catch (NumberFormatException ex) {
977 String titleRep = (String) session.getAttribute("TITLE_"+index);
978 String subtitle = (String) session.getAttribute("SUBTITLE_"+index);
980 if(nvl(titleRep).length()>0 && nvl(subtitle).length()>0)
981 table.setHeaderRows(3);
982 else if (nvl(titleRep).length()>0)
983 table.setHeaderRows(2);
985 table.setHeaderRows(1);
986 table = paintPdfReportHeader(request, document, table, rr, f);
987 paintPdfTableHeader(document, rd, table);
990 int fragmentsize = 30; //for memory management
993 Connection conn = null;
995 ResultSetMetaData rsmd = null;
996 rd.reportDataRows.resetNext();
997 DataRow dr = rd.reportDataRows.getNext();
999 //addRowHeader(table,dr,idx,rd);
1001 //addRowColumns(table,dr,idx);
1002 if(nvl(sql_whole).length() >0 && rr.getReportType().equals(AppConstants.RT_LINEAR)) {
1004 conn = ConnectionUtils.getConnection(rr.getDbInfo());
1005 st = conn.createStatement();
1006 logger.debug(EELFLoggerDelegate.debugLogger, ("************* Map Whole SQL *************"));
1007 logger.debug(EELFLoggerDelegate.debugLogger, (sql_whole));
1008 logger.debug(EELFLoggerDelegate.debugLogger, ("*****************************************"));
1009 rs = st.executeQuery(sql_whole);
1010 rsmd = rs.getMetaData();
1011 int numberOfColumns = rsmd.getColumnCount();
1012 HashMap colHash = new HashMap();
1019 /* if(runtime.freeMemory()/mb <= ((runtime.maxMemory()/mb)*Globals.getMemoryThreshold()/100) ) {
1021 String cellValue = Globals.getUserDefinedMessageForMemoryLimitReached() + " "+ rowCount +" records out of " + rr.getReportDataSize() + " were downloaded to PDF.";
1022 Font cellFont = FontFactory.getFont(Globals.getDataFontFamily(),
1023 Globals.getDataFontSize(),
1024 Font.NORMAL, Color.BLACK);
1025 PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
1026 table.addCell(cell);
1027 document.add(table);
1031 colHash = new HashMap();
1032 for (int i = 1; i <= numberOfColumns; i++) {
1033 colHash.put(rsmd.getColumnLabel(i).toUpperCase(), rs.getString(i));
1035 rd.reportDataRows.resetNext();
1037 dr = rd.reportDataRows.getNext();
1040 /*if(rd.reportTotalRowHeaderCols!=null) {
1042 HtmlFormatter rfmt = dr.getRowFormatter();
1044 Font cellFont = FontFactory.getFont(Globals.getDataFontFamily(),
1045 Globals.getDataFontSize(),
1046 Font.NORMAL, Color.BLACK);
1048 cellFormatterFont(rfmt,cellFont);
1051 String cellValue = new Integer(rowCount).toString();
1052 PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
1054 //row background color can be overwritten by cell background color
1055 cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
1057 cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1060 formatterCell(rfmt,cell);
1062 table.addCell(cell);
1065 for (dr.resetNext(); dr.hasNext();j++) {
1066 DataValue dv = dr.getNext();
1068 HtmlFormatter cfmt = dv.getCellFormatter();
1069 HtmlFormatter rfmt = dv.getRowFormatter();
1071 Font cellFont = FontFactory.getFont(Globals.getDataFontFamily(),
1072 Globals.getDataFontSize(),
1073 Font.NORMAL, Color.BLACK);
1075 cellFormatterFont(cfmt,cellFont);
1077 else if(rfmt != null) {
1078 cellFormatterFont(rfmt,cellFont);
1082 cellFont.setStyle(Font.BOLD);
1086 //String cellValue = strip.stripHtml(value.trim());
1087 PdfPCell cell = new PdfPCell(new Paragraph(rowCount+"",cellFont));
1089 //row background color can be overwritten by cell background color
1090 cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
1092 if(nvl(dv.getAlignment()).trim().length()>0)
1093 cell.setHorizontalAlignment(ElementTags.alignmentValue(dv.getAlignment()));
1095 cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1098 formatterCell(cfmt,cell);
1100 else if(rfmt != null) {
1101 formatterCell(rfmt,cell);
1103 table.addCell(cell);
1106 //for (chr.resetNext(); chr.hasNext();) {
1107 //ColumnHeader ch = chr.getNext();
1108 String value = nvl((String)colHash.get(dv.getColId().toUpperCase()));
1109 if(dv.isVisible()) {
1111 HtmlFormatter cfmt = dv.getCellFormatter();
1112 HtmlFormatter rfmt = dv.getRowFormatter();
1114 Font cellFont = FontFactory.getFont(FONT_FAMILY,
1116 Font.NORMAL, Color.BLACK);
1118 cellFormatterFont(cfmt,cellFont);
1120 else if(rfmt != null) {
1121 cellFormatterFont(rfmt,cellFont);
1125 cellFont.setStyle(Font.BOLD);
1129 String cellValue = strip.stripHtml(value.trim());
1130 PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
1132 //row background color can be overwritten by cell background color
1133 cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
1135 if(nvl(dv.getAlignment()).trim().length()>0)
1136 cell.setHorizontalAlignment(ElementTags.alignmentValue(dv.getAlignment()));
1138 cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1141 formatterCell(cfmt,cell);
1143 else if(rfmt != null) {
1144 formatterCell(rfmt,cell);
1149 table.addCell(cell);
1157 if(rd.reportDataTotalRow!=null) {
1158 for (rd.reportDataTotalRow.resetNext(); rd.reportDataTotalRow.hasNext();idx++) {
1159 dr = rd.reportDataTotalRow.getNext();
1160 table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1161 Font rowHeaderFont = FontFactory.getFont(FONT_FAMILY,
1163 Font.NORMAL, Color.BLACK);
1164 rowHeaderFont.setStyle(Font.BOLD);
1165 rowHeaderFont.setSize(FONT_SIZE+1f);
1166 table.getDefaultCell().setBackgroundColor(getRowBackgroundColor(dr, idx));
1167 table.addCell(new Paragraph("Total",rowHeaderFont));
1170 addTotalRowColumns(table,dr,idx);
1171 if (idx % fragmentsize == fragmentsize - 1) {
1172 document.add(table);
1173 table.deleteBodyRows();
1174 table.setSkipFirstHeader(true);
1179 } catch (SQLException ex) {
1180 throw new RaptorException(ex);
1181 } catch (ReportSQLException ex) {
1182 throw new RaptorException(ex);
1183 } catch (Exception ex) {
1184 if(!(ex.getCause() instanceof java.net.SocketException) )
1185 throw new RaptorException (ex);
1194 } catch (SQLException ex) {
1195 throw new RaptorException(ex);
1200 // if (idx % fragmentsize == fragmentsize - 1) {
1201 // document.add(table);
1202 // table.deleteBodyRows();
1203 // table.setSkipFirstHeader(true);
1206 //document.add(table);
1208 if(rr.getReportType().equals(AppConstants.RT_LINEAR)) {
1210 for(rd.reportDataRows.resetNext();rd.reportDataRows.hasNext();idx++)
1214 /*if(rd.reportTotalRowHeaderCols!=null) {
1215 HtmlFormatter rfmt = dr.getRowFormatter();
1217 Font cellFont = FontFactory.getFont(Globals.getDataFontFamily(),
1218 Globals.getDataFontSize(),
1219 Font.NORMAL, Color.BLACK);
1221 cellFormatterFont(rfmt,cellFont);
1224 //String cellValue = new Integer(rowCount).toString();
1225 //PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
1227 //row background color can be overwritten by cell background color
1228 //cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
1230 //cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1232 //if(rfmt != null) {
1233 //formatterCell(rfmt,cell);
1235 //table.addCell(cell);
1240 if(runtime.freeMemory()/mb <= ((runtime.maxMemory()/mb)*Globals.getMemoryThreshold()/100) ) {
1244 dr = rd.reportDataRows.getNext();
1246 addRowHeader(table,dr,idx,rd);
1248 addRowColumns(table,dr,idx);
1250 if (idx % fragmentsize == fragmentsize - 1) {
1251 document.add(table);
1252 table.deleteBodyRows();
1253 table.setSkipFirstHeader(true);
1257 if(rd.reportDataTotalRow!=null) {
1258 for (rd.reportDataTotalRow.resetNext(); rd.reportDataTotalRow.hasNext();idx++) {
1259 dr = rd.reportDataTotalRow.getNext();
1260 table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1261 Font rowHeaderFont = FontFactory.getFont(FONT_FAMILY,
1263 Font.NORMAL, Color.BLACK);
1264 rowHeaderFont.setStyle(Font.BOLD);
1265 rowHeaderFont.setSize(FONT_SIZE+1f);
1266 table.getDefaultCell().setBackgroundColor(getRowBackgroundColor(dr, idx));
1267 table.addCell(new Paragraph("Total",rowHeaderFont));
1270 addTotalRowColumns(table,dr,idx);
1271 if (idx % fragmentsize == fragmentsize - 1) {
1272 document.add(table);
1273 table.deleteBodyRows();
1274 table.setSkipFirstHeader(true);
1280 } else if (rr.getReportType().equals(AppConstants.RT_CROSSTAB)) {
1282 List l = rd.getReportDataList();
1283 boolean first = true;
1284 for (int dataRow = 0; dataRow < l.size(); dataRow++) {
1287 dr = (DataRow) l.get(dataRow);
1288 Vector<DataValue> rowNames = dr.getRowValues();
1289 for(dr.resetNext(); dr.hasNext(); ) {
1292 HtmlFormatter rfmt = dr.getRowFormatter();
1294 Font cellFont = FontFactory.getFont(FONT_FAMILY,
1296 Font.NORMAL, Color.BLACK);
1298 cellFormatterFont(rfmt,cellFont);
1300 String cellValue = "";
1301 PdfPCell cell = null;
1302 //String cellValue = new Integer(rowCount).toString();
1303 //PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
1304 //row background color can be overwritten by cell background color
1305 //cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
1307 //cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1309 //if(rfmt != null) {
1310 //formatterCell(rfmt,cell);
1312 //table.addCell(cell);
1313 if(rowNames!=null) {
1314 for(int i=0; i<rowNames.size(); i++) {
1315 DataValue dv = rowNames.get(i);
1316 rfmt = dr.getRowFormatter();
1318 cellFont = FontFactory.getFont(FONT_FAMILY,
1320 Font.NORMAL, Color.BLACK);
1322 cellFormatterFont(rfmt,cellFont);
1324 cellValue = dv.getDisplayValue();
1325 if(cellValue.indexOf("|#")!=-1)
1326 cellValue = cellValue.substring(0,cellValue.indexOf("|"));
1328 cell = new PdfPCell(new Paragraph(cellValue,cellFont));
1329 //row background color can be overwritten by cell background color
1330 cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
1332 cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1335 formatterCell(rfmt,cell);
1337 table.addCell(cell);
1343 if(runtime.freeMemory()/mb <= ((runtime.maxMemory()/mb)*Globals.getMemoryThreshold()/100) ) {
1347 //addRowHeader(table,dr,idx,rd);
1349 addRowColumns(table,dr,idx);
1351 if (idx % fragmentsize == fragmentsize - 1) {
1352 document.add(table);
1353 table.deleteBodyRows();
1354 table.setSkipFirstHeader(true);
1361 //document.add(table);
1365 document.add(table);
1366 paintPdfReportFooter(request, document, rr, f);
1371 private void addRowHeader(PdfPTable table, DataRow dr, int idx, ReportData rd) {
1373 table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1375 for(rd.reportRowHeaderCols.resetNext();rd.reportRowHeaderCols.hasNext();) {
1376 RowHeaderCol rhc = rd.reportRowHeaderCols.getNext();
1379 RowHeader rh = rhc.getNext();
1380 //System.out.println(" =============== RowHeader\n "+rh);
1382 Font rowHeaderFont = FontFactory.getFont(FONT_FAMILY,
1384 Font.NORMAL, Color.BLACK);
1386 rowHeaderFont.setStyle(Font.BOLD);
1387 rowHeaderFont.setSize(FONT_SIZE+1f);
1390 if(rh.getColSpan()>0) {
1391 table.getDefaultCell().setColspan(rh.getColSpan());
1392 table.getDefaultCell().setBackgroundColor(getRowBackgroundColor(dr, idx));
1393 table.addCell(new Paragraph(strip.stripHtml(rh.getRowTitle()),rowHeaderFont));
1398 private void addRowColumns(PdfPTable table, DataRow dr, int idx) {
1400 table.getDefaultCell().setColspan(1);
1402 for(dr.resetNext();dr.hasNext();)
1404 DataValue dv = dr.getNext();
1405 //System.out.println(columnCount +" --> "+dv);
1406 if(dv.isVisible()) {
1407 HtmlFormatter cfmt = dv.getCellFormatter();
1408 HtmlFormatter rfmt = dv.getRowFormatter();
1410 Font cellFont = FontFactory.getFont(FONT_FAMILY,
1412 Font.NORMAL, Color.BLACK);
1414 cellFormatterFont(cfmt,cellFont);
1416 else if(rfmt != null) {
1417 cellFormatterFont(rfmt,cellFont);
1421 cellFont.setStyle(Font.BOLD);
1425 String cellValue = strip.stripHtml(dv.getDisplayValue().trim());
1426 PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
1428 //row background color can be overwritten by cell background color
1429 cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
1431 if(nvl(dv.getAlignment()).trim().length()>0)
1432 cell.setHorizontalAlignment(ElementTags.alignmentValue(dv.getAlignment()));
1434 cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1437 formatterCell(cfmt,cell);
1439 else if(rfmt != null) {
1440 formatterCell(rfmt,cell);
1443 table.addCell(cell);
1450 private void addTotalRowColumns(PdfPTable table, DataRow dr, int idx) {
1452 table.getDefaultCell().setColspan(1);
1457 DataValue dv = dr.getNext();
1458 //System.out.println(columnCount +" --> "+dv);
1459 if(dv.isVisible()) {
1460 HtmlFormatter cfmt = dv.getCellFormatter();
1461 HtmlFormatter rfmt = dv.getRowFormatter();
1463 Font cellFont = FontFactory.getFont(FONT_FAMILY,
1465 Font.NORMAL, Color.BLACK);
1467 cellFormatterFont(cfmt,cellFont);
1469 else if(rfmt != null) {
1470 cellFormatterFont(rfmt,cellFont);
1474 cellFont.setStyle(Font.BOLD);
1478 String cellValue = strip.stripHtml(dv.getDisplayValue().trim());
1479 PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
1481 //row background color can be overwritten by cell background color
1482 cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
1484 if(nvl(dv.getAlignment()).trim().length()>0)
1485 cell.setHorizontalAlignment(ElementTags.alignmentValue(dv.getAlignment()));
1487 cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1490 formatterCell(cfmt,cell);
1492 else if(rfmt != null) {
1493 formatterCell(rfmt,cell);
1496 table.addCell(cell);
1503 private void formatterCell(HtmlFormatter fmt, PdfPCell cell) {
1505 if(nvl(fmt.getBgColor()).trim().length()>0)
1506 cell.setBackgroundColor(Color.decode(fmt.getBgColor()));
1507 if(nvl(fmt.getAlignment()).trim().length()>0)
1508 cell.setHorizontalAlignment(ElementTags.alignmentValue(fmt.getAlignment()));
1511 private void cellFormatterFont(HtmlFormatter fmt, Font font) {
1514 font.setStyle(Font.BOLD);
1516 font.setStyle(Font.ITALIC);
1517 if(fmt.isUnderline())
1518 font.setStyle(Font.UNDERLINE);
1519 if(fmt.getFontColor().trim().length()>0)
1520 font.setColor(Color.decode(fmt.getFontColor()));
1521 if(fmt.getFontSize().trim().length()>0)
1522 font.setSize(Float.parseFloat(fmt.getFontSize())-Globals.getDataFontSizeOffset());
1523 // if(fmt.getFontFace().trim().length()>0)
1524 // cellFont.setFamily()
1528 private Color getRowBackgroundColor(DataRow dr, int idx) {
1530 Color color = Color.decode(Globals.getDataDefaultBackgroundHexCode());
1532 HtmlFormatter rhf = dr.getRowFormatter();
1533 if(rhf!=null && nvl(rhf.getBgColor()).trim().length()>0)
1535 color = Color.decode(rhf.getBgColor());
1537 else if(pb.isAlternateColor() && idx%2==0)
1539 color = Color.decode(Globals.getDataBackgroundAlternateHexCode());
1545 private int getTotalVisbleColumns(ReportData rd) {
1547 int totalVisbleColumn = rd.getTotalColumnCount();
1548 for(rd.reportDataRows.resetNext();rd.reportDataRows.hasNext();)
1550 DataRow dr = rd.reportDataRows.getNext();
1551 for(dr.resetNext();dr.hasNext();) {
1552 DataValue dv = dr.getNext();
1553 if(!dv.isVisible()) totalVisbleColumn--;
1559 return totalVisbleColumn;
1563 private int getFirstRowIndex(ReportRuntime rr) {
1564 return (pb.getCurrentPage()>0)?pb.getCurrentPage()*rr.getPageSize()+1 : 1;
1567 private float[] getRelativeWidths(ReportData rd, boolean crosstab){
1569 int totalColumns = getTotalVisbleColumns(rd);
1570 /*if(rd.reportTotalRowHeaderCols!=null) {
1577 if(totalColumns == 0 )
1580 float[] relativeWidths = new float[totalColumns];
1581 //initial widths are even
1582 for(int i=0; i<relativeWidths.length; i++)
1583 relativeWidths[i] = 10f;
1586 boolean firstPass = true;
1588 for (rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext();)
1591 /*if(rd.reportTotalRowHeaderCols!=null) {
1592 String columnWidth = "5";
1594 if(columnWidth != null && columnWidth.trim().endsWith("%"))
1595 relativeWidths[index] = Float.parseFloat(removeLastCharacter(columnWidth));
1600 for(rd.reportRowHeaderCols.resetNext();rd.reportRowHeaderCols.hasNext();) {
1601 String columnWidth = rd.reportRowHeaderCols.getNext().getColumnWidth();
1603 if(columnWidth != null && columnWidth.trim().endsWith("%"))
1604 relativeWidths[index] = Float.parseFloat(removeLastCharacter(columnWidth));
1611 ColumnHeaderRow chr = rd.reportColumnHeaderRows.getNext();
1612 for (chr.resetNext(); chr.hasNext();) {
1614 ColumnHeader ch = chr.getNext();
1616 if(ch.isVisible()) {
1618 String columnWidth = ch.getColumnWidth();
1620 if(ch.getColSpan() <= 1){
1621 if(columnWidth != null && columnWidth.trim().endsWith("%"))
1622 relativeWidths[index] = Float.parseFloat(removeLastCharacter(columnWidth));
1625 for(int i=0; i<ch.getColSpan(); i++) {
1627 if(columnWidth != null && columnWidth.trim().endsWith("%"))
1628 relativeWidths[index] =
1629 (Float.parseFloat(removeLastCharacter(columnWidth)))/ch.getColSpan();
1638 return relativeWidths;
1641 public static String removeLastCharacter(String str) {
1642 return str.substring(0, str.length()-1);
1645 private PdfPTable paintPdfReportHeader(HttpServletRequest request, Document document, PdfPTable table, ReportRuntime rr, float[] f)
1646 throws DocumentException, IOException {
1648 HttpSession session = request.getSession();
1649 String drilldown_index = (String) session.getAttribute("drilldown_index");
1652 index = Integer.parseInt(drilldown_index);
1653 } catch (NumberFormatException ex) {
1656 String title = (String) session.getAttribute("TITLE_"+index);
1657 String subtitle = (String) session.getAttribute("SUBTITLE_"+index);
1658 if(nvl(title).length()>0) {
1659 //PdfPTable table = new PdfPTable(1);
1660 table.setWidthPercentage(100f);
1661 table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1662 table.getDefaultCell().setVerticalAlignment(Rectangle.ALIGN_BOTTOM);
1665 Font font = FontFactory.getFont(FONT_FAMILY,
1670 //addEmptyRows(table,1);
1671 table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1672 //table.getDefaultCell().setBackgroundColor(Color.decode(Globals.getDataTableHeaderBackgroundFontColor()));
1673 title = Utils.replaceInString(title, "<BR/>", " ");
1674 title = Utils.replaceInString(title, "<br/>", " ");
1675 title = Utils.replaceInString(title, "<br>", " ");
1676 title = strip.stripHtml(nvl(title).trim());
1677 //subtitle = Utils.replaceInString(subtitle, "<BR/>", " ");
1678 //subtitle = Utils.replaceInString(subtitle, "<br/>", " ");
1679 //subtitle = Utils.replaceInString(subtitle, "<br>", " ");
1680 //subtitle = strip.stripHtml(nvl(subtitle).trim());
1681 StyleSheet styles = new StyleSheet();
1683 HTMLWorker htmlWorker = new HTMLWorker(document);
1684 ArrayList cc = new ArrayList();
1685 cc = htmlWorker.parseToList(new StringReader(subtitle), styles);
1687 Phrase p1 = new Phrase();
1688 for (int i = 0; i < cc.size(); i++){
1689 Element elem = (Element)cc.get(i);
1690 ArrayList al = elem.getChunks();
1691 for (int j = 0; j < al.size(); j++) {
1692 Chunk chunk = (Chunk) al.get(j);
1693 chunk.font().setSize(6.0f);
1697 //cell = new PdfPCell(p1);
1698 StyleSheet style = new StyleSheet();
1699 style.loadTagStyle("font", "font-size", "3");
1700 style.loadTagStyle("font", "size", "3");
1701 styles.loadStyle("pdfFont1", "size", "11px");
1702 styles.loadStyle("pdfFont1", "font-size", "11px");
1703 /*ArrayList p = HTMLWorker.parseToList(new StringReader(nvl(title)), style);
1704 for (int k = 0; k < p.size(); ++k){
1705 document.add((com.lowagie.text.Element)p.get(k));
1707 //p1.font().setSize(3.0f);
1708 PdfPCell titleCell = new PdfPCell(new Phrase(title, font));
1709 titleCell.setColspan(rr.getVisibleColumnCount());
1710 PdfPCell subtitleCell = new PdfPCell(p1);
1711 subtitleCell.setColspan(rr.getVisibleColumnCount());
1712 titleCell.setHorizontalAlignment(1);
1713 subtitleCell.setHorizontalAlignment(1);
1714 table.addCell(titleCell);
1715 table.addCell(subtitleCell);
1716 //document.add(table);
1722 private void paintPdfReportFooter(HttpServletRequest request, Document document, ReportRuntime rr, float[] f)
1723 throws DocumentException, IOException {
1725 HttpSession session = request.getSession();
1726 String drilldown_index = (String) session.getAttribute("drilldown_index");
1729 index = Integer.parseInt(drilldown_index);
1730 } catch (NumberFormatException ex) {
1734 String title = (String) session.getAttribute("FOOTER_"+index);
1735 if(nvl(title).length()>0) {
1736 PdfPTable table = new PdfPTable(1);
1737 table.setWidthPercentage(100f);
1738 table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1739 table.getDefaultCell().setVerticalAlignment(Rectangle.ALIGN_BOTTOM);
1741 Font font = FontFactory.getFont(FONT_FAMILY,
1747 //addEmptyRows(table,1);
1748 table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1749 //table.getDefaultCell().setBackgroundColor(Color.decode(Globals.getDataTableHeaderBackgroundFontColor()));
1750 /*title = Utils.replaceInString(title, "<BR/>", " ");
1751 title = Utils.replaceInString(title, "<br/>", " ");
1752 title = Utils.replaceInString(title, "<br>", " ");
1753 title = strip.stripHtml(nvl(title).trim());*/
1754 StyleSheet style = new StyleSheet();
1756 HTMLWorker htmlWorker = new HTMLWorker(document);
1757 ArrayList cc = new ArrayList();
1758 cc = htmlWorker.parseToList(new StringReader(title), style);
1760 Phrase p1 = new Phrase();
1761 for (int i = 0; i < cc.size(); i++){
1762 Element elem = (Element)cc.get(i);
1763 ArrayList al = elem.getChunks();
1764 for (int j = 0; j < al.size(); j++) {
1765 Chunk chunk = (Chunk) al.get(j);
1766 chunk.font().setSize(6.0f);
1772 HTMLWorker.parseToList(new StringReader(nvl(title)), style);*/
1773 PdfPCell titleCell = new PdfPCell(p1);
1774 titleCell.setHorizontalAlignment(Element.ALIGN_LEFT);
1775 table.addCell(titleCell);
1777 document.add(table);
1783 private void paintPdfTableHeader(Document document, ReportData rd, PdfPTable table)
1784 throws DocumentException {
1786 Font font = FontFactory.getFont(FONT_FAMILY,
1789 Color.decode(Globals.getDataTableHeaderFontColor()));
1790 //table.setHeaderRows(1);
1791 table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
1792 table.getDefaultCell().setBackgroundColor(Color.decode(Globals.getDataTableHeaderBackgroundFontColor()));
1795 boolean firstPass = true;
1797 /*if(rd.reportTotalRowHeaderCols!=null) {
1799 table.addCell(new Paragraph("No.", font));
1803 for (rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext();)
1806 for(rd.reportRowHeaderCols.resetNext();rd.reportRowHeaderCols.hasNext();) {
1808 table.addCell(new Paragraph("No.", font));
1811 RowHeaderCol rhc = rd.reportRowHeaderCols.getNext();
1812 title = rhc.getColumnTitle();
1813 title = Utils.replaceInString(title,"_nl_", " \n");
1814 table.addCell(new Paragraph(title,font));
1819 ColumnHeaderRow chr = rd.reportColumnHeaderRows.getNext();
1820 for (chr.resetNext(); chr.hasNext();) {
1821 ColumnHeader ch = chr.getNext();
1822 //System.out.println(ch);
1823 if(ch.isVisible()) {
1824 title = ch.getColumnTitle();
1825 title = Utils.replaceInString(title,"_nl_", " \n");
1826 table.addCell(new Paragraph(title,font));
1832 public static String currentTime(String pattern) {
1834 SimpleDateFormat oracleDateFormat = new SimpleDateFormat("MM/dd/yyyy kk:mm:ss");
1835 Date sysdate = oracleDateFormat.parse(ReportLoader.getSystemDateTime());
1836 SimpleDateFormat dtimestamp = new SimpleDateFormat(Globals.getScheduleDatePattern());
1837 return dtimestamp.format(sysdate)+" "+Globals.getTimeZone();
1838 //paramList.add(new IdNameValue("DATE", dtimestamp.format(sysdate)+" "+Globals.getTimeZone()));
1839 } catch(Exception ex) {}
1841 SimpleDateFormat s = new SimpleDateFormat(pattern);
1842 s.setTimeZone(TimeZone.getTimeZone(Globals.getTimeZone()));
1843 //System.out.println("^^^^^^^^^^^^^^^^^^^^ " + Calendar.getInstance().getTime());
1844 //System.out.println("^^^^^^^^^^^^^^^^^^^^ " + s.format(Calendar.getInstance().getTime()));
1845 return s.format(Calendar.getInstance().getTime());
1848 private PdfBean preparePdfBean(HttpServletRequest request,ReportRuntime rr) {
1849 PdfBean pb = new PdfBean();
1851 pb.setUserId(AppUtils.getUserID(request));
1853 pb.setWhereToShowPageNumber(Globals.getPageNumberPosition());
1854 pb.setAlternateColor(Globals.isDataAlternateColor());
1855 pb.setTimestampPattern(Globals.getDatePattern());
1859 temp = Integer.parseInt(request.getParameter(AppConstants.RI_NEXT_PAGE));
1860 } catch (NumberFormatException e) {}
1861 pb.setCurrentPage(temp);
1863 //pb.setPortrait( trueORfalse(request.getParameter("isPortrait"),true));
1864 pb.setPortrait(trueORfalse(rr.getPDFOrientation() == "portait"?"true":"false", true));
1865 //pb.setCoverPageIncluded( trueORfalse(request.getParameter("isCoverPageIncluded"), true));
1866 //if(Globals.isCoverPageNeeded()) {
1867 pb.setCoverPageIncluded(Globals.isCoverPageNeeded()?rr.isPDFCoverPage():false);
1869 pb.setTitle(nvl(request.getParameter("title")));
1870 pb.setPagesize(nvls(request.getParameter("pagesize"),"LETTER"));
1872 pb.setLogo1Url(rr.getPDFLogo1());
1873 pb.setLogo2Url(rr.getPDFLogo2());
1874 pb.setLogo1Size(rr.getPDFLogo1Size());
1875 pb.setLogo2Size(rr.getPDFLogo2Size());
1876 pb.setFullWebContextPath(request.getSession().getServletContext().getRealPath(File.separator));
1879 pb.setDisplayChart(nvl(rr.getChartType()).trim().length()>0 && rr.getDisplayChart());
1881 String id = nvl(request.getParameter("pdfAttachmentKey")).trim();
1882 String log_id = nvl(request.getParameter("log_id")).trim();
1883 if(id.length()>0 && log_id.length()>0)
1884 pb.setAttachmentOfEmail(true);
1889 private boolean trueORfalse(String str) {
1890 return (str != null) && (str.equalsIgnoreCase("true"));
1893 private boolean trueORfalse(String str,boolean b_default) {
1894 return str==null ? b_default : (str.equalsIgnoreCase("true"));