我正在使用iText 2.1.7在Web应用程序中生成PDF报告。对于大多数报告来说,它运行良好。在将表添加到文档实例的一种特殊情况下,代码执行会挂起相当长的时间,然后在线程thread_name:java.lang.OutOfMemoryError:Java堆空间中抛出 Exception。
try {
Document document = new Document(PageSize.A4.rotate());
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destinationPath));
document.addTitle("CONTINGENT PAYBILL");
document.open();
PdfContentByte content = writer.getDirectContent();
Table table;
Cell cell;
table = new Table(8);
table.setPadding(2);
table.setWidths(new int[] { 12, 13, 12, 13, 12, 13, 12, 13 });
table.setWidth(100);
table.setCellsFitPage(true);
StringBuilder temp = new StringBuilder();
for (PaybillContingencyBeneficiary beneficiary : contingencyBenfList) {
beneficiaryName.delete(0, beneficiaryName.length());
bankStatement = new BankAccnt();
beneficiaryAllowanceTotal = 0d;
beneficiaryDeductionTotal = 0d;
// *****CONTINGENT-BENEFICIARY-DATA*****//
if (beneficiary.getUserType().equals("V")) {
beneficiary.setVendorData(
(PaybillVendor) billsService.getBeanById(PaybillVendor.class, beneficiary.getUserId()));
beneficiaryName.append(beneficiary.getVendorData().getVendorName());
beneficiaryName.append("\n" + beneficiary.getVendorData().getVendorAddress());
beneficiaryName.append("\n" + beneficiary.getVendorData().getVendorGstin());
bankStatement.setEmployeeName(beneficiary.getVendorData().getVendorName());
bankStatement.setIfscCode(beneficiary.getVendorData().getVendorIfsc());
bankStatement.setAccountNo(beneficiary.getVendorData().getVendorAccount());
} else if (beneficiary.getUserType().equals("E")) {
beneficiary.setEisData(billsService.getEmployeeDetails(beneficiary.getUserId()));
beneficiaryName.append(beneficiary.getEisData().getFullName());
beneficiaryName.append("\n" + beneficiary.getEisData().getGpfOrPpanNo());
beneficiaryName.append("\n" + beneficiary.getEisData().getPanNo());
bankStatement.setEmployeeName(beneficiary.getEisData().getFullName());
bankStatement.setIfscCode(beneficiary.getEisData().getIfscCode());
bankStatement.setAccountNo(beneficiary.getEisData().getAccountNo());
}
// *****CONTINGENT-DETAILS-LIST*****//
beneficiary
.setContingencyDetails(billsService.getContingencyDetailsList(beneficiary.getBeneficiaryId()));
if (beneficiary.getContingencyDetails() != null)
beneficiary.setNumOfVoucher(beneficiary.getContingencyDetails().size());
// *****CONTINGENT-BUDGET-DATA*****//
beneficiary.setBudgetDetail(billsService.getContingentBudget(beneficiary.getBeneficiaryId()));
if (beneficiary.getBudgetDetail() != null && beneficiary.getBudgetDetail().getDetailId() != null) {
beneficiary.getBudgetDetail()
.setHeadName(billsService.getHoaName(beneficiary.getBudgetDetail().getHeadId(), true));
}
cell = new Cell(new Phrase(i.toString(), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setRowspan(beneficiary.getNumOfVoucher());
table.addCell(cell);
temp.delete(0, temp.length());
temp.append("--NA--");
if (beneficiary.getBudgetDetail() != null && beneficiary.getBudgetDetail().getHeadName() != null
&& !beneficiary.getBudgetDetail().getHeadName().isEmpty()) {
try {
temp.delete(0, temp.length());
temp.append(beneficiary.getBudgetDetail().getHeadName().split("-", 6)[5]);
temp.delete(5, temp.length());
} catch (ArrayIndexOutOfBoundsException e) {
}
}
cell = new Cell(new Phrase(temp.toString(), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setRowspan(beneficiary.getNumOfVoucher());
table.addCell(cell);
temp.delete(0, temp.length());
temp.append(beneficiaryName.toString());
cell = new Cell(new Phrase(temp.toString(), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setRowspan(beneficiary.getNumOfVoucher());
table.addCell(cell);
for (PaybillContingencyDetails details : beneficiary.getContingencyDetails()) {
elementAmount = 0d;
netAmount = 0d;
temp.delete(0, temp.length());
temp.append(details.getInvoiceNo());
temp.append(" dated " + sdf1.format(details.getInvoiceDate()));
cell = new Cell(new Phrase(temp.toString(), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
temp.delete(0, temp.length());
temp.append((details.getDetailDescription() != null) ? details.getDetailDescription() : "--NA--");
cell = new Cell(new Phrase(temp.toString(), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
elementAmount = (details.getBillAmount() != null) ? details.getBillAmount() : 0d;
beneficiaryAllowanceTotal += elementAmount;
netAmount += elementAmount;
cell = new Cell(new Phrase(df.format(elementAmount), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
elementAmount = (details.getBillCgst() != null) ? details.getBillCgst() : 0d;
beneficiaryDeductionTotal += elementAmount;
deductionColTotal[0] += elementAmount;
netAmount -= elementAmount;
cell = new Cell(new Phrase(df.format(elementAmount), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
elementAmount = (details.getBillSgst() != null) ? details.getBillSgst() : 0d;
beneficiaryDeductionTotal += elementAmount;
deductionColTotal[1] += elementAmount;
netAmount -= elementAmount;
cell = new Cell(new Phrase(df.format(elementAmount), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
elementAmount = (details.getBillIgst() != null) ? details.getBillIgst() : 0d;
beneficiaryDeductionTotal += elementAmount;
deductionColTotal[2] += elementAmount;
netAmount -= elementAmount;
cell = new Cell(new Phrase(df.format(elementAmount), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
elementAmount = (details.getCentralSales() != null) ? details.getCentralSales() : 0d;
beneficiaryDeductionTotal += elementAmount;
deductionColTotal[3] += elementAmount;
netAmount -= elementAmount;
cell = new Cell(new Phrase(df.format(elementAmount), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
elementAmount = (details.getForestRoyalty() != null) ? details.getForestRoyalty() : 0d;
beneficiaryDeductionTotal += elementAmount;
deductionColTotal[4] += elementAmount;
netAmount -= elementAmount;
cell = new Cell(new Phrase(df.format(elementAmount), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
elementAmount = (details.getIncomeTax() != null) ? details.getIncomeTax() : 0d;
beneficiaryDeductionTotal += elementAmount;
deductionColTotal[5] += elementAmount;
netAmount -= elementAmount;
cell = new Cell(new Phrase(df.format(elementAmount), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
elementAmount = (details.getStateSales() != null) ? details.getStateSales() : 0d;
beneficiaryDeductionTotal += elementAmount;
deductionColTotal[6] += elementAmount;
netAmount -= elementAmount;
cell = new Cell(new Phrase(df.format(elementAmount), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
elementAmount = (details.getVat() != null) ? details.getVat() : 0d;
beneficiaryDeductionTotal += elementAmount;
deductionColTotal[7] += elementAmount;
netAmount -= elementAmount;
cell = new Cell(new Phrase(df.format(elementAmount), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
elementAmount = (details.getSecurityDeposit() != null) ? details.getSecurityDeposit() : 0d;
beneficiaryDeductionTotal += elementAmount;
deductionColTotal[8] += elementAmount;
netAmount -= elementAmount;
cell = new Cell(new Phrase(df.format(elementAmount), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
netAmountTotal += netAmount;
cell = new Cell(new Phrase(df.format(netAmount), FontFactory.getFont(FontFactory.HELVETICA, 8)));
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
}
allowanceTotal += beneficiaryAllowanceTotal;
deductionTotal += beneficiaryDeductionTotal;
beneficiary.setVoucherAmount(beneficiaryAllowanceTotal);
beneficiary.setVoucherDeduction(beneficiaryDeductionTotal);
bankStatement.setAmount(beneficiaryAllowanceTotal - beneficiaryDeductionTotal);
bankStmtList.add(bankStatement);
i++;
}
document.add(table);
到达document.add(table);
时抛出异常
有人可以找出这里出了什么问题吗?