001package org.kuali.ole.deliver.bo; 002 003/** 004 * Created with IntelliJ IDEA. 005 * User: ? 006 * Date: 11/2/12 007 * Time: 2:27 PM 008 * To change this template use File | Settings | File Templates. 009 */ 010 011import com.lowagie.text.*; 012import com.lowagie.text.Font; 013import com.lowagie.text.pdf.BaseFont; 014import com.lowagie.text.pdf.PdfPTable; 015import com.lowagie.text.pdf.PdfPageEventHelper; 016import com.lowagie.text.pdf.PdfWriter; 017import org.apache.log4j.Logger; 018import org.kuali.ole.OLEConstants; 019import org.kuali.rice.core.web.format.CurrencyFormatter; 020import org.kuali.rice.coreservice.impl.parameter.ParameterBo; 021import org.kuali.rice.krad.service.BusinessObjectService; 022import org.kuali.rice.krad.service.KRADServiceLocator; 023 024import javax.servlet.ServletOutputStream; 025import javax.servlet.http.HttpServletResponse; 026import java.awt.*; 027import java.io.ByteArrayOutputStream; 028import java.io.IOException; 029import java.io.OutputStream; 030import java.math.BigDecimal; 031import java.text.SimpleDateFormat; 032import java.util.*; 033import java.util.List; 034 035/** 036 * The PrintBill class used to create pdf document . 037 */ 038public class PrintBill extends PdfPageEventHelper { 039 040 private static final Logger LOG = Logger.getLogger(PrintBill.class); 041 042 private Map<String, Font> printFontMap = new HashMap<String, Font>(); 043 044 private Map<String, Font> fontMap = new HashMap<String, Font>(); 045 private Map<String, Color> colorMap = new HashMap<String, Color>(); 046 private Map<String, Color> printColorMap = new HashMap<String, Color>(); 047 048 049 public void populateFontMap() { 050 fontMap.put("COURIER", new Font(Font.COURIER)); 051 fontMap.put("BOLD", new Font(Font.BOLD)); 052 fontMap.put("BOLDITALIC", new Font(Font.BOLDITALIC)); 053 fontMap.put("DEFAULTSIZE", new Font(Font.DEFAULTSIZE)); 054 fontMap.put("HELVETICA", new Font(Font.HELVETICA)); 055 fontMap.put("ITALIC", new Font(Font.ITALIC)); 056 fontMap.put("NORMAL", new Font(Font.NORMAL)); 057 fontMap.put("STRIKETHRU", new Font(Font.STRIKETHRU)); 058 fontMap.put("SYMBOL", new Font(Font.SYMBOL)); 059 fontMap.put("TIMES_ROMAN", new Font(Font.TIMES_ROMAN)); 060 fontMap.put("UNDEFINED", new Font(Font.UNDEFINED)); 061 fontMap.put("UNDERLINE", new Font(Font.UNDERLINE)); 062 fontMap.put("ZAPFDINGBATS", new Font(Font.ZAPFDINGBATS)); 063 064 } 065 066 public void populateColorMap() { 067 colorMap.put("WHITE", Color.WHITE); 068 colorMap.put("YELLOW", Color.YELLOW); 069 colorMap.put("BLACK", Color.BLACK); 070 colorMap.put("BLUE", Color.BLUE); 071 colorMap.put("CYAN", Color.CYAN); 072 colorMap.put("DARK_GRAY", Color.DARK_GRAY); 073 colorMap.put("GRAY", Color.GRAY); 074 colorMap.put("GREEN", Color.GREEN); 075 colorMap.put("LIGHT_GRAY", Color.LIGHT_GRAY); 076 colorMap.put("MAGENTA", Color.MAGENTA); 077 colorMap.put("ORANGE", Color.ORANGE); 078 colorMap.put("PINK", Color.PINK); 079 colorMap.put("RED", Color.RED); 080 081 colorMap.put("PINK", Color.PINK); 082 } 083 084 public void populatePrintFontMap() { 085 BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService(); 086 Map<String, String> criteriaMap = new HashMap<String, String>(); 087 criteriaMap.put("namespaceCode", "OLE-PRNT"); 088 criteriaMap.put("componentCode", "Patron Bill Font"); 089 List<ParameterBo> parametersList = (List<ParameterBo>) businessObjectService.findMatching(ParameterBo.class, criteriaMap); 090 for (int i = 0; i < parametersList.size(); i++) { 091 printFontMap.put(parametersList.get(i).getName(), fontMap.get(parametersList.get(i).getValue())); 092 } 093 } 094 095 public void populatePrintColorMap() { 096 BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService(); 097 Map<String, String> criteriaMap = new HashMap<String, String>(); 098 criteriaMap.put("namespaceCode", "OLE-PRNT"); 099 criteriaMap.put("componentCode", "Patron Bill Color"); 100 List<ParameterBo> parametersList = (List<ParameterBo>) businessObjectService.findMatching(ParameterBo.class, criteriaMap); 101 for (int i = 0; i < parametersList.size(); i++) { 102 printColorMap.put(parametersList.get(i).getName(), colorMap.get(parametersList.get(i).getValue())); 103 } 104 } 105 106 public String getTemplate() { 107 108 BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService(); 109 Map<String, String> criteriaMap = new HashMap<String, String>(); 110 criteriaMap.put("namespaceCode", "OLE-PRNT"); 111 criteriaMap.put("componentCode", "Print Template"); 112 List<ParameterBo> parametersList = (List<ParameterBo>) businessObjectService.findMatching(ParameterBo.class, criteriaMap); 113 return parametersList.get(0).getValue(); 114 115 } 116 117 /** 118 * Used to select pdf template 119 * 120 * @param patronBillPayments,feeTypeList,response 121 * 122 * @return Void 123 */ 124 public void generatePdf(String firstName, String lastName, List<PatronBillPayment> patronBillPayments, List<FeeType> feeTypeList,boolean isDefaultPrint,List<String> transactionIds, HttpServletResponse response) { 125 String template = getTemplate(); 126 if (template.equalsIgnoreCase(OLEConstants.BILL_TEMP_NORMAL)) { 127 createPdf(firstName, lastName, patronBillPayments, feeTypeList,isDefaultPrint,transactionIds, response); 128 } else if (template.equalsIgnoreCase(OLEConstants.BILL_TEMP_TABLE)) { 129 createPdfWithTable(firstName, lastName, patronBillPayments, feeTypeList,isDefaultPrint,transactionIds, response); 130 } 131 } 132 133 /** 134 * Used to create pdf document for patron bill 135 * 136 * @param patronBillPayments,feeTypeList,response 137 * 138 * @return Void 139 */ 140 public void createPdf(String firstName, String lastName, List<PatronBillPayment> patronBillPayments, List<FeeType> feeTypeList,boolean isDefaultPrint,List<String> transactionIds, HttpServletResponse response) { 141 LOG.debug("Initialize Normal pdf Template"); 142 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 143 BigDecimal feeAmount = BigDecimal.valueOf(0); 144 BigDecimal paidAmount = BigDecimal.valueOf(0); 145 String billNumber = ""; 146 try { 147 populateColorMap(); 148 populateFontMap(); 149 populatePrintColorMap(); 150 populatePrintFontMap(); 151 response.setContentType("application/pdf"); 152 Document document = this.getDocument(0, 0, 5, 5); 153 document.open(); 154 document.newPage(); 155 Paragraph paraGraph = new Paragraph(); 156 paraGraph.setAlignment(Element.ALIGN_CENTER); 157 paraGraph.add(new Chunk(OLEConstants.OlePatronBill.HEADER_PATRON_RECEIPT)); 158 paraGraph.add(Chunk.NEWLINE); 159 paraGraph.add(Chunk.NEWLINE); 160 paraGraph.add(Chunk.NEWLINE); 161 SimpleDateFormat df = new SimpleDateFormat(OLEConstants.DAT_FORMAT_EFFECTIVE_PRINT); 162 paraGraph.add(new Chunk(OLEConstants.BILL_DT + " : " + df.format(System.currentTimeMillis()) + "")); 163 paraGraph.add(Chunk.NEWLINE); 164 paraGraph.add(new Chunk(OLEConstants.FIRST_NAME + " : " + firstName, printFontMap.get("Patron_Name_Font"))); 165 paraGraph.add(Chunk.NEWLINE); 166 paraGraph.add(new Chunk(OLEConstants.LAST_NAME + " : " + lastName, printFontMap.get("Item_Title_Font"))); 167 paraGraph.add(Chunk.NEWLINE); 168 for (int j = 0; j < feeTypeList.size(); j++) { 169 List<OleItemLevelBillPayment> oleItemLevelBillPayments = new ArrayList<>(); 170 if (feeTypeList.get(j).getItemLevelBillPaymentList() != null) { 171 oleItemLevelBillPayments.addAll(feeTypeList.get(j).getItemLevelBillPaymentList()); 172 } else { 173 Map<String,String> map=new HashMap<String,String>(); 174 map.put("lineItemId",feeTypeList.get(j).getId()); 175 List<OleItemLevelBillPayment> itemLevelBillPayments=(List<OleItemLevelBillPayment>)KRADServiceLocator.getBusinessObjectService().findMatching(OleItemLevelBillPayment.class,map); 176 if(itemLevelBillPayments!=null){ 177 oleItemLevelBillPayments.addAll(itemLevelBillPayments); 178 } 179 } 180 String feeTypeName=""; 181 if(feeTypeList.get(j).getOleFeeType()!=null && feeTypeList.get(j).getOleFeeType().getFeeTypeName()!=null){ 182 feeTypeName=feeTypeList.get(j).getOleFeeType().getFeeTypeName(); 183 } 184 if (!feeTypeList.get(j).getBillNumber().equals(billNumber)) { 185 paraGraph.add(new Chunk(OLEConstants.BILL_NO + " : " + feeTypeList.get(j).getBillNumber())); 186 paraGraph.add(Chunk.NEWLINE); 187 } 188 for (OleItemLevelBillPayment oleItemLevelBillPayment : oleItemLevelBillPayments) { 189 boolean isAddContent = false; 190 if(isDefaultPrint){ 191 if(transactionIds.contains(oleItemLevelBillPayment.getPaymentId())){ 192 isAddContent=true; 193 } 194 } else { 195 isAddContent=true; 196 } 197 if (isAddContent) { 198 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_PATRON_RECEIPT_NUMBER,oleItemLevelBillPayment.getPaymentId() != null ? oleItemLevelBillPayment.getPaymentId() : " ")); 199 paraGraph.add(Chunk.NEWLINE); 200 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_BILL_NUMBER,feeTypeList.get(j).getBillNumber() != null ? feeTypeList.get(j).getBillNumber() : " ")); 201 paraGraph.add(Chunk.NEWLINE); 202 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_FEE_TYPE,feeTypeName)); 203 paraGraph.add(Chunk.NEWLINE); 204 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_TRANSACTION_DATE,(oleItemLevelBillPayment.getPaymentDate() != null ? df.format(oleItemLevelBillPayment.getPaymentDate()) : " "))); 205 paraGraph.add(Chunk.NEWLINE); 206 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_OPERATOR_ID,oleItemLevelBillPayment.getCreatedUser() != null ? oleItemLevelBillPayment.getCreatedUser() : " ")); 207 paraGraph.add(Chunk.NEWLINE); 208 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_ITEM_BARCODE,feeTypeList.get(j).getItemBarcode() != null ? feeTypeList.get(j).getItemBarcode() : " ")); 209 paraGraph.add(Chunk.NEWLINE); 210 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_ITEM_TITLE,feeTypeList.get(j).getItemTitle() != null ? feeTypeList.get(j).getItemTitle() : " ")); 211 paraGraph.add(Chunk.NEWLINE); 212 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_ITEM_AUTHOR,feeTypeList.get(j).getItemAuthor() != null ? feeTypeList.get(j).getItemAuthor() : " ")); 213 paraGraph.add(Chunk.NEWLINE); 214 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_ITEM_CALL_NUMBER,feeTypeList.get(j).getItemCallNumber() != null ? feeTypeList.get(j).getItemCallNumber() : " ")); 215 paraGraph.add(Chunk.NEWLINE); 216 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_TOTAL_AMOUNT,feeTypeList.get(j).getFeeAmount() != null ? CurrencyFormatter.getSymbolForCurrencyPattern()+feeTypeList.get(j).getFeeAmount().toString() : CurrencyFormatter.getSymbolForCurrencyPattern()+"0")); 217 paraGraph.add(Chunk.NEWLINE); 218 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_PAID_AMOUNT,oleItemLevelBillPayment.getAmount() != null ? CurrencyFormatter.getSymbolForCurrencyPattern()+oleItemLevelBillPayment.getAmount().toString() : CurrencyFormatter.getSymbolForCurrencyPattern()+"0")); 219 paraGraph.add(Chunk.NEWLINE); 220 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_TRANSACTION_NUMBER,oleItemLevelBillPayment.getTransactionNumber() != null ? oleItemLevelBillPayment.getAmount().toString() : " ")); 221 paraGraph.add(Chunk.NEWLINE); 222 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_TRANSACTION_NOTE,oleItemLevelBillPayment.getTransactionNote() != null ? oleItemLevelBillPayment.getTransactionNumber() : " ")); 223 paraGraph.add(Chunk.NEWLINE); 224 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_PAYMENT_MODE,oleItemLevelBillPayment.getPaymentMode() != null ? oleItemLevelBillPayment.getTransactionNote() : " ")); 225 paraGraph.add(Chunk.NEWLINE); 226 paraGraph.add(populateParagraphCell(OLEConstants.OlePatronBill.LABEL_NOTE,feeTypeList.get(j).getGeneralNote() != null ? feeTypeList.get(j).getGeneralNote() : " ")); 227 paraGraph.add(Chunk.NEWLINE); 228 feeAmount = feeAmount.add(feeTypeList.get(j).getFeeAmount().bigDecimalValue()); 229 billNumber = feeTypeList.get(j).getBillNumber(); 230 paidAmount=paidAmount.add(oleItemLevelBillPayment.getAmount().bigDecimalValue()); 231 } 232 233 } 234 } 235 236 237 paraGraph.add(Chunk.NEWLINE); 238 paraGraph.add(new Chunk(OLEConstants.TOT_AMT + " : " +CurrencyFormatter.getSymbolForCurrencyPattern()+ feeAmount.subtract(paidAmount)!=null?feeAmount.subtract(paidAmount).toString():"0" + "", printFontMap.get("Total_Font")).setBackground(printColorMap.get("Total_BGColor"))); 239 response.setContentType("application/pdf"); 240 ServletOutputStream sos = response.getOutputStream(); 241 PdfWriter.getInstance(document, sos); 242 document.open(); 243 document.add(paraGraph); 244 document.close(); 245 byteArrayOutputStream.flush(); 246 byteArrayOutputStream.close(); 247 sos.flush(); 248 sos.close(); 249 } catch (Exception e) { 250 LOG.error("Exception while creating pdf", e); 251 } 252 } 253 254 255 public Document getDocument(float f1, float f2, float f3, float f4) { 256 Document document = new Document(PageSize.A4); 257 document.setMargins(f1, f2, f3, f4); 258 return document; 259 } 260 261 /** 262 * Used to create pdf document for patron bill 263 * 264 * @param patronBillPayments,feeTypeList,response 265 * 266 * @return Void 267 */ 268 public void createPdfWithTable(String firstName, String lastName, List<PatronBillPayment> patronBillPayments, List<FeeType> feeTypeList,boolean isDefaultPrint,List<String> transactionIds, HttpServletResponse response) { 269 LOG.debug("Initialize Table pdf Template"); 270 OutputStream out = null; 271 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 272 BigDecimal feeAmount = BigDecimal.valueOf(0); 273 BigDecimal paidAmount = BigDecimal.valueOf(0); 274 try { 275 populateColorMap(); 276 populateFontMap(); 277 populatePrintColorMap(); 278 populatePrintFontMap(); 279 response.setContentType("application/pdf"); 280 Document document = this.getDocument(0, 0, 0, 0); 281 document.open(); 282 document.newPage(); 283 PdfPTable pdfTable = new PdfPTable(9); 284 pdfTable.getDefaultCell().setBorder(0); 285 Table table = new Table(15); 286 int headerwidths[] = {5,5,8,9,9,9,20,10,15,7,7,14,15,7,15}; 287 table.setWidths(headerwidths); 288 table.setWidth(97); 289 //table.setWidth(100); 290 table.setDefaultVerticalAlignment(Element.ALIGN_TOP); 291 table.setCellsFitPage(true); 292 table.setPadding(1); 293 table.setSpacing(0); 294 table.getMarkupAttributeNames(); 295 Paragraph paraGraph = new Paragraph(); 296 paraGraph.setAlignment(Element.ALIGN_CENTER); 297 paraGraph.add(new Chunk(OLEConstants.OlePatronBill.HEADER_PATRON_RECEIPT)); 298 paraGraph.add(Chunk.NEWLINE); 299 paraGraph.add(Chunk.NEWLINE); 300 paraGraph.add(Chunk.NEWLINE); 301 SimpleDateFormat df=new SimpleDateFormat(OLEConstants.DAT_FORMAT_EFFECTIVE_PRINT); 302 paraGraph.add(new Chunk(OLEConstants.BILL_DT + " : " + df.format(System.currentTimeMillis()) + " ")); 303 paraGraph.add(Chunk.NEWLINE); 304 paraGraph.add(new Chunk(OLEConstants.FIRST_NAME + " : " + firstName, printFontMap.get("Patron_Name_Font"))); 305 paraGraph.add(Chunk.NEWLINE); 306 paraGraph.add(new Chunk(OLEConstants.LAST_NAME + " : " + lastName, printFontMap.get("Patron_Name_Font"))); 307 paraGraph.add(Chunk.NEWLINE); 308 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_PATRON_RECEIPT_NUMBER, Color.gray)); 309 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_BILL_NUMBER, Color.gray)); 310 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_FEE_TYPE, Color.gray)); 311 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_TRANSACTION_DATE, Color.gray)); 312 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_OPERATOR_ID,Color.gray)); 313 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_ITEM_BARCODE, Color.gray)); 314 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_ITEM_TITLE,Color.gray)); 315 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_ITEM_AUTHOR,Color.gray)); 316 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_ITEM_CALL_NUMBER,Color.gray)); 317 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_TOTAL_AMOUNT,Color.gray)); 318 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_PAID_AMOUNT,Color.gray)); 319 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_TRANSACTION_NUMBER,Color.gray)); 320 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_TRANSACTION_NOTE,Color.gray)); 321 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_PAYMENT_MODE,Color.gray)); 322 table.addCell(populateCellHeader(OLEConstants.OlePatronBill.LABEL_NOTE,Color.gray)); 323 table.endHeaders(); 324 325 for (FeeType feeType : feeTypeList) { 326 327 List<OleItemLevelBillPayment> oleItemLevelBillPayments = new ArrayList<>(); 328 if (feeType.getItemLevelBillPaymentList() != null) { 329 oleItemLevelBillPayments.addAll(feeType.getItemLevelBillPaymentList()); 330 } else { 331 Map<String,String> map=new HashMap<String,String>(); 332 map.put("lineItemId",feeType.getId()); 333 List<OleItemLevelBillPayment> itemLevelBillPayments=(List<OleItemLevelBillPayment>)KRADServiceLocator.getBusinessObjectService().findMatching(OleItemLevelBillPayment.class,map); 334 if(itemLevelBillPayments!=null){ 335 oleItemLevelBillPayments.addAll(itemLevelBillPayments); 336 } 337 } 338 String feeTypeName=""; 339 if(feeType.getOleFeeType()!=null && feeType.getOleFeeType().getFeeTypeName()!=null){ 340 feeTypeName=feeType.getOleFeeType().getFeeTypeName(); 341 } 342 343 for (OleItemLevelBillPayment oleItemLevelBillPayment : oleItemLevelBillPayments) { 344 boolean isAddContent = false; 345 if(isDefaultPrint){ 346 if(transactionIds.contains(oleItemLevelBillPayment.getPaymentId())){ 347 isAddContent=true; 348 } 349 } else { 350 isAddContent=true; 351 } 352 if (isAddContent) { 353 table.addCell(populateCell(oleItemLevelBillPayment.getPaymentId() != null ? oleItemLevelBillPayment.getPaymentId() : " ")); 354 table.addCell(populateCell(feeType.getBillNumber() != null ? feeType.getBillNumber() : " ")); 355 table.addCell(populateCell(feeTypeName)); 356 table.addCell(populateCell((oleItemLevelBillPayment.getPaymentDate() != null ? df.format(oleItemLevelBillPayment.getPaymentDate()) : " "))); 357 table.addCell(populateCell(oleItemLevelBillPayment.getCreatedUser() != null ? oleItemLevelBillPayment.getCreatedUser() : " ")); 358 table.addCell(populateCell(feeType.getItemBarcode() != null ? feeType.getItemBarcode() : " ")); 359 table.addCell(populateCell(feeType.getItemTitle() != null ? feeType.getItemTitle() : " ")); 360 table.addCell(populateCell(feeType.getItemAuthor() != null ? feeType.getItemAuthor() : " ")); 361 table.addCell(populateCell(feeType.getItemCallNumber() != null ? feeType.getItemCallNumber() : " ")); 362 table.addCell(populateCell(feeType.getFeeAmount() != null ? CurrencyFormatter.getSymbolForCurrencyPattern()+feeType.getFeeAmount().bigDecimalValue().setScale(2, BigDecimal.ROUND_HALF_UP) : CurrencyFormatter.getSymbolForCurrencyPattern()+"0")); 363 table.addCell(populateCell(oleItemLevelBillPayment.getAmount() != null ? CurrencyFormatter.getSymbolForCurrencyPattern()+oleItemLevelBillPayment.getAmount().bigDecimalValue().setScale(2, BigDecimal.ROUND_HALF_UP) : CurrencyFormatter.getSymbolForCurrencyPattern()+"0")); 364 table.addCell(populateCell(oleItemLevelBillPayment.getTransactionNumber() != null ? oleItemLevelBillPayment.getTransactionNumber() : " ")); 365 table.addCell(populateCell(oleItemLevelBillPayment.getTransactionNote() != null ? oleItemLevelBillPayment.getTransactionNote() : " ")); 366 table.addCell(populateCell(oleItemLevelBillPayment.getPaymentMode() != null ? oleItemLevelBillPayment.getPaymentMode() : " ")); 367 table.addCell(populateCell(feeType.getGeneralNote() != null ? feeType.getGeneralNote() : " ")); 368 feeAmount = feeAmount.add(feeType.getFeeAmount().bigDecimalValue()); 369 paidAmount=paidAmount.add(oleItemLevelBillPayment.getAmount().bigDecimalValue()); 370 } 371 372 } 373 } 374 String totaldueAmount=feeAmount.subtract(paidAmount)!=null?feeAmount.subtract(paidAmount).toString():"0"; 375 /* paraGraph.add(new Chunk(OLEConstants.TOT_AMT + " : " + CurrencyFormatter.getSymbolForCurrencyPattern() + totaldueAmount + "",printFontMap.get("Patron_Name_Font"))); 376 paraGraph.add(Chunk.NEWLINE);*/ 377 paraGraph.add(new Chunk(OLEConstants.TOT_AMT_PAID + " : " + CurrencyFormatter.getSymbolForCurrencyPattern()+ (paidAmount!=null?paidAmount.toString():"0") + "",printFontMap.get("Patron_Name_Font"))); 378 paraGraph.add(Chunk.NEWLINE); 379 response.setContentType("application/pdf"); 380 ServletOutputStream sos = response.getOutputStream(); 381 PdfWriter.getInstance(document, sos); 382 document.open(); 383 document.add(paraGraph); 384 document.add(table); 385 document.close(); 386 byteArrayOutputStream.flush(); 387 byteArrayOutputStream.close(); 388 } catch (Exception e) { 389 LOG.error("Exception while creating pdf with table", e); 390 } 391 } 392 393 private Cell populateCellHeader(String header,Color color){ 394 BaseFont bf=null; 395 Cell cell = new Cell(); 396 try { 397 if (header != null) { 398 bf = BaseFont.createFont(BaseFont.COURIER, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED); 399 float glyphWidth = bf.getWidth(header); 400 float width = glyphWidth * 0.001f * 16f; 401 float fontSize = 400 * width / glyphWidth; 402 Font font=new Font(); 403 font.setSize(fontSize); 404 cell.addElement(new Paragraph(header,font)); 405 406 } 407 } catch (DocumentException e) { 408 e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 409 } catch (IOException e) { 410 e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 411 } 412 cell.setBackgroundColor(color); 413 return cell; 414 } 415 416 private Cell populateCell(String header){ 417 BaseFont bf=null; 418 Cell cell = new Cell(); 419 try { 420 if (header != null) { 421 bf = BaseFont.createFont(BaseFont.COURIER, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED); 422 float glyphWidth = bf.getWidth(header); 423 float width = glyphWidth * 0.001f * 16f; 424 float fontSize = 400 * width / glyphWidth; 425 Font font=new Font(); 426 font.setSize(fontSize); 427 cell.addElement(new Paragraph(header, font)); 428 } 429 } catch (DocumentException e) { 430 e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 431 } catch (IOException e) { 432 e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 433 } 434 return cell; 435 } 436 437 private Chunk populateParagraphCell(String header,String value){ 438 return (new Chunk(header+" : " + value ,printFontMap.get("Patron_Name_Font"))); 439 } 440} 441 442