Example usage for com.lowagie.text Element ALIGN_RIGHT

List of usage examples for com.lowagie.text Element ALIGN_RIGHT

Introduction

In this page you can find the example usage for com.lowagie.text Element ALIGN_RIGHT.

Prototype

int ALIGN_RIGHT

To view the source code for com.lowagie.text Element ALIGN_RIGHT.

Click Source Link

Document

A possible value for paragraph alignment.

Usage

From source file:org.kuali.kfs.module.endow.report.util.TransactionSummaryReportPrint.java

License:Educational Community License

/**
 * Helper method to go through the security list and write the lines..
 * @param table//from   w  w  w. j av  a2s.  co  m
 * @param cellFont
 * @param transactionSummaryReport
 */
protected void writeSecurityTransfersRecordsForSummaryReportOption(PdfPTable table, Font cellFont,
        TransactionSummaryReportDataHolder transactionSummaryReport) {
    String amount;
    BigDecimal totalIncomeAmounts = BigDecimal.ZERO;
    BigDecimal totalPrincipalAmounts = BigDecimal.ZERO;

    //write Contributions header....
    writeSubHeader(table, "Security Transfers", EndowConstants.EndowmentReport.TOTAL);

    //now write out the records....
    List<SecurityTransfersDataHolder> securityTransfersData = transactionSummaryReport
            .getReportGroupsForSecurityTransfers();

    if (securityTransfersData != null) {
        for (SecurityTransfersDataHolder securityTransfer : securityTransfersData) {
            table.addCell(
                    createCell("\t\t\t\t\t\t\t".concat(securityTransfer.getSecurityTransfersDescription()),
                            cellFont, Element.ALIGN_LEFT, true));
            totalIncomeAmounts = totalIncomeAmounts.add(securityTransfer.getIncomeSecurityTransfers());
            totalPrincipalAmounts = totalPrincipalAmounts.add(securityTransfer.getPrincipalSecurityTransfers());
            amount = formatAmount(securityTransfer.getTotalSecurityTransfers());
            table.addCell(createCell(amount, cellFont, Element.ALIGN_RIGHT, true));
        }
    }

    //now write out the sub-total line....amount
    table.addCell("\t\t\t\t\t\t\t\tActivity Sub-Total");
    amount = formatAmount(totalIncomeAmounts.add(totalPrincipalAmounts));
    table.addCell(createCell(amount, cellFont, Element.ALIGN_RIGHT, true));
}

From source file:org.kuali.kfs.module.endow.report.util.TransactionSummaryReportPrint.java

License:Educational Community License

/**
 * Helper method to go through the cash transfers list and write the lines..
 * @param table// w ww .  j a va 2 s . co m
 * @param cellFont
 * @param transactionSummaryReport
 */
protected void writeSecurityTransfersRecordsForDetailReportOption(PdfPTable table, Font cellFont,
        TransactionSummaryReportDataHolder transactionSummaryReport) {
    String amount;
    BigDecimal totalIncomeAmounts = BigDecimal.ZERO;
    BigDecimal totalPrincipalAmounts = BigDecimal.ZERO;

    //write Contributions header....
    writeSubHeader(table, "Security Transfers", EndowConstants.EndowmentReport.DETAIL);

    //now write out the records....
    List<SecurityTransfersDataHolder> SecurityTransfersData = transactionSummaryReport
            .getReportGroupsForSecurityTransfers();

    if (SecurityTransfersData != null) {
        for (SecurityTransfersDataHolder securityTransfer : SecurityTransfersData) {
            table.addCell(
                    createCell("\t\t\t\t\t\t\t".concat(securityTransfer.getSecurityTransfersDescription()),
                            cellFont, Element.ALIGN_LEFT, true));
            totalIncomeAmounts = totalIncomeAmounts.add(securityTransfer.getIncomeSecurityTransfers());
            amount = formatAmount(securityTransfer.getIncomeSecurityTransfers());
            table.addCell(createCell(amount, cellFont, Element.ALIGN_RIGHT, true));
            totalPrincipalAmounts = totalPrincipalAmounts.add(securityTransfer.getPrincipalSecurityTransfers());
            amount = formatAmount(securityTransfer.getPrincipalSecurityTransfers());
            table.addCell(createCell(amount, cellFont, Element.ALIGN_RIGHT, true));
            amount = formatAmount(securityTransfer.getTotalSecurityTransfers());
            table.addCell(createCell(amount, cellFont, Element.ALIGN_RIGHT, true));
        }
    }

    //now write out the sub-total line....amount
    table.addCell("\t\t\t\t\t\t\t\tActivity Sub-Total");
    amount = formatAmount(totalIncomeAmounts);
    table.addCell(createCell(amount, cellFont, Element.ALIGN_RIGHT, true));
    amount = formatAmount(totalPrincipalAmounts);
    table.addCell(createCell(amount, cellFont, Element.ALIGN_RIGHT, true));
    amount = formatAmount(totalIncomeAmounts.add(totalPrincipalAmounts));
    table.addCell(createCell(amount, cellFont, Element.ALIGN_RIGHT, true));
}

From source file:org.kuali.kfs.module.endow.report.util.TransactionSummaryReportPrint.java

License:Educational Community License

/**
 * helper method to write the details lines where only the last column exists for amounts..
 * @param description//w  w  w .  j  a v a2 s . com
 * @param amount
 */
protected void writeDetailsLineWithTotalAmountOnly(PdfPTable table, Font cellFont, String description,
        BigDecimal amount, String reportOption) {
    table.addCell("\t\t".concat(description));
    if (reportOption.equalsIgnoreCase(EndowConstants.EndowmentReport.DETAIL)) {
        table.addCell("");
        table.addCell("");
    }
    table.addCell(createCell(formatAmount(amount), cellFont, Element.ALIGN_RIGHT, true));
}

From source file:org.kuali.kfs.module.endow.report.util.TrialBalanceReportPrint.java

License:Educational Community License

/**
 * Generates the report in PDF using iText
 * // ww  w  . j  a  va  2 s .  c  o  m
 * @param reportRequestHeaderDataHolder
 * @param trialBalanceDataReportHolders
 * @return ByteArrayOutputStream
 */
public ByteArrayOutputStream printTrialBalanceReport(
        EndowmentReportHeaderDataHolder reportRequestHeaderDataHolder,
        List<TrialBalanceReportDataHolder> trialBalanceDataReportHolders, String listKemidsInHeader) {

    final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(TrialBalanceReportPrint.class);

    Document document = new Document();
    document.setPageSize(LETTER_PORTRAIT);
    document.addTitle("Endowment Trial Balance");

    // get the stream for PDF
    ByteArrayOutputStream pdfStream = new ByteArrayOutputStream();

    try {
        PdfWriter.getInstance(document, pdfStream);
        document.open();

        // page
        HeaderFooter header = new HeaderFooter(new Phrase(new Date().toString() + "     Page: ", headerFont),
                true);
        header.setBorder(Rectangle.NO_BORDER);
        header.setAlignment(Element.ALIGN_RIGHT);
        header.setPageNumber(0);
        document.setHeader(header);

        // print the report header
        if (printReportHeaderPage(reportRequestHeaderDataHolder, document, listKemidsInHeader)) {

            if (trialBalanceDataReportHolders != null && trialBalanceDataReportHolders.size() > 0) {
                document.setPageSize(LETTER_LANDSCAPE);
                document.resetPageCount();
                header.setPageNumber(1);
                document.newPage();
                printTrialBalanceReportBody(trialBalanceDataReportHolders, document);
            } else {
                LOG.error("Trial Balance Report Header Error");
            }
        }

        document.close();

    } catch (Exception e) {
        LOG.error("PDF Error: " + e.getMessage());
        return null;
    }

    return pdfStream;
}

From source file:org.kuali.kfs.module.endow.report.util.TrialBalanceReportPrint.java

License:Educational Community License

/**
 * Generates the Trial Balance report//from   w w w. j a  va 2  s .co  m
 * 
 * @param trialBalanceReports
 * @param document
 * @return
 */
public boolean printTrialBalanceReportBody(List<TrialBalanceReportDataHolder> trialBalanceReports,
        Document document) {

    try {
        // title
        Paragraph title = new Paragraph("KEMID Trial Balance");
        title.setAlignment(Element.ALIGN_CENTER);
        Date currentDate = SpringContext.getBean(KEMService.class).getCurrentDate();
        DateTimeService dateTimeService = SpringContext.getBean(DateTimeService.class);
        String asOfDate = dateTimeService.toDateString(currentDate);
        title.add("\nAs of " + asOfDate + "\n\n");
        document.add(title);

        // report table
        PdfPTable table = new PdfPTable(7);
        table.setWidthPercentage(FULL_TABLE_WIDTH);
        int[] relativeWidths = { 10, 15, 15, 15, 15, 15, 15 };
        table.setWidths(relativeWidths);
        table.getDefaultCell().setPadding(2);

        // table titles
        table.addCell(new Phrase("KEMID", titleFont));
        table.addCell(new Phrase("KEMID Name", titleFont));
        table.addCell(new Phrase("Income Cash Balance", titleFont));
        table.addCell(new Phrase("Principal Cash Balance", titleFont));
        table.addCell(new Phrase("KEMID Total Market Value", titleFont));
        table.addCell(new Phrase("Available Expendable Funds", titleFont));
        table.addCell(new Phrase("FY Remainder Estimated Income", titleFont));

        // table body
        Font cellFont = regularFont;
        BigDecimal totalIncomeCashBalance = BigDecimal.ZERO;
        BigDecimal totalPrincipalCashBalance = BigDecimal.ZERO;
        BigDecimal totalMarketValueBalance = BigDecimal.ZERO;
        BigDecimal totalAvailableExpendableFundsBalance = BigDecimal.ZERO;
        BigDecimal totalFyRemainderEstimatedIncome = BigDecimal.ZERO;

        for (TrialBalanceReportDataHolder trialBalanceReport : trialBalanceReports) {

            // totals, which is the last row
            if (trialBalanceReport.getKemid().equalsIgnoreCase("TOTALS")) {
                cellFont = titleFont;
            }

            table.addCell(new Phrase(trialBalanceReport.getKemid(), cellFont));
            table.addCell(new Phrase(trialBalanceReport.getKemidName(), cellFont));
            if (trialBalanceReport.getInocmeCashBalance() != null) {
                String amount = formatAmount(trialBalanceReport.getInocmeCashBalance().bigDecimalValue());
                table.addCell(createCell(amount, cellFont, Element.ALIGN_RIGHT, true));
                totalIncomeCashBalance = totalIncomeCashBalance
                        .add(trialBalanceReport.getInocmeCashBalance().bigDecimalValue());
            } else {
                table.addCell(createCell(ZERO_FOR_REPORT, cellFont, Element.ALIGN_RIGHT, true));
            }
            if (trialBalanceReport.getPrincipalcashBalance() != null) {
                String amount = formatAmount(trialBalanceReport.getPrincipalcashBalance().bigDecimalValue());
                totalPrincipalCashBalance = totalPrincipalCashBalance
                        .add(trialBalanceReport.getPrincipalcashBalance().bigDecimalValue());
                table.addCell(createCell(amount, cellFont, Element.ALIGN_RIGHT, true));
            } else {
                table.addCell(createCell(ZERO_FOR_REPORT, cellFont, Element.ALIGN_RIGHT, true));
            }
            if (trialBalanceReport.getKemidTotalMarketValue() != null) {
                String amount = formatAmount(trialBalanceReport.getKemidTotalMarketValue());
                totalMarketValueBalance = totalMarketValueBalance
                        .add(trialBalanceReport.getKemidTotalMarketValue());
                table.addCell(createCell(amount, cellFont, Element.ALIGN_RIGHT, true));
            } else {
                table.addCell(createCell(ZERO_FOR_REPORT, cellFont, Element.ALIGN_RIGHT, true));
            }
            if (trialBalanceReport.getAvailableExpendableFunds() != null) {
                String amount = formatAmount(trialBalanceReport.getAvailableExpendableFunds());
                totalAvailableExpendableFundsBalance = totalAvailableExpendableFundsBalance
                        .add(trialBalanceReport.getAvailableExpendableFunds());
                table.addCell(createCell(amount, cellFont, Element.ALIGN_RIGHT, true));
            } else {
                table.addCell(createCell(ZERO_FOR_REPORT, cellFont, Element.ALIGN_RIGHT, true));
            }
            if (trialBalanceReport.getFyRemainderEstimatedIncome() != null) {
                String amount = formatAmount(trialBalanceReport.getFyRemainderEstimatedIncome());
                totalFyRemainderEstimatedIncome = totalFyRemainderEstimatedIncome
                        .add(trialBalanceReport.getFyRemainderEstimatedIncome());
                table.addCell(createCell(amount, cellFont, Element.ALIGN_RIGHT, true));
            } else {
                table.addCell(createCell(ZERO_FOR_REPORT, cellFont, Element.ALIGN_RIGHT, true));
            }
        }

        // totals
        PdfPCell blank = new PdfPCell(new Paragraph("", cellFont));
        blank.setColspan(7);
        blank.setBackgroundColor(Color.LIGHT_GRAY);
        table.addCell(blank);

        table.addCell(createCell("TOTALS", titleFont, Element.ALIGN_LEFT, true));
        table.addCell(createCell("", cellFont, Element.ALIGN_RIGHT, true));
        table.addCell(createCell(formatAmount(totalIncomeCashBalance), cellFont, Element.ALIGN_RIGHT, true));
        table.addCell(createCell(formatAmount(totalPrincipalCashBalance), cellFont, Element.ALIGN_RIGHT, true));
        table.addCell(createCell(formatAmount(totalMarketValueBalance), cellFont, Element.ALIGN_RIGHT, true));
        table.addCell(createCell(formatAmount(totalAvailableExpendableFundsBalance), cellFont,
                Element.ALIGN_RIGHT, true));
        table.addCell(
                createCell(formatAmount(totalFyRemainderEstimatedIncome), cellFont, Element.ALIGN_RIGHT, true));

        document.add(table);

    } catch (Exception e) {
        return false;
    }

    return true;
}

From source file:org.kuali.kfs.module.purap.pdf.BulkReceivingPdf.java

License:Open Source License

private void loadHeaderTable() throws Exception {

    float[] headerWidths = { 0.20f, 0.80f };

    headerTable = new PdfPTable(headerWidths);
    headerTable.setWidthPercentage(100);
    headerTable.setHorizontalAlignment(Element.ALIGN_CENTER);
    headerTable.setSplitLate(false);// w w  w . j a  va 2s .  c om
    headerTable.getDefaultCell().setBorderWidth(0);
    headerTable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
    headerTable.getDefaultCell().setVerticalAlignment(Element.ALIGN_CENTER);

    /**
     * Logo display
     */
    if (StringUtils.isNotBlank(logoImage)) {
        logo = Image.getInstance(logoImage);
        logo.scalePercent(3, 3);
        headerTable.addCell(new Phrase(new Chunk(logo, 0, 0)));
    } else {
        headerTable.addCell(new Phrase(new Chunk("")));
    }

    /**
     * Nested table in tableHeader to display title and doc number
     */
    float[] nestedHeaderWidths = { 0.70f, 0.30f };
    nestedHeaderTable = new PdfPTable(nestedHeaderWidths);
    nestedHeaderTable.setSplitLate(false);
    PdfPCell cell;

    /**
     * Title
     */
    cell = new PdfPCell(new Paragraph("RECEIVING TICKET", ver_15_normal));
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    cell.setBorderWidth(0);
    nestedHeaderTable.addCell(cell);

    /**
     * Doc Number
     */
    Paragraph p = new Paragraph();
    p.add(new Chunk("Doc Number: ", ver_11_normal));
    p.add(new Chunk(blkRecDoc.getDocumentNumber().toString(), cour_10_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    cell.setBorderWidth(0);
    nestedHeaderTable.addCell(cell);

    // Add the nestedHeaderTable to the headerTable
    cell = new PdfPCell(nestedHeaderTable);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    cell.setBorderWidth(0);
    headerTable.addCell(cell);
}

From source file:org.kuali.kfs.module.purap.pdf.BulkReceivingPdf.java

License:Open Source License

private PdfPTable createAdditionalDetailsTable() {

    float[] additionalInfoWidths = { 0.25f, 0.75f };
    PdfPTable additionalInfoTable = new PdfPTable(additionalInfoWidths);
    additionalInfoTable.setWidthPercentage(100);
    additionalInfoTable.setSplitLate(false);

    Paragraph p = new Paragraph();
    PdfPCell cell;/*from   w  w w. java 2 s.  com*/

    /**
     * Notes to vendor
     */
    p.add(new Chunk("  Notes to Vendor  ", ver_5_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    additionalInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  " + StringUtils.defaultString(blkRecDoc.getVendorNoteText()), cour_10_normal));

    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    additionalInfoTable.addCell(cell);

    /**
     * Delivery instructions
     */
    p = new Paragraph();
    p.add(new Chunk("  Delivery instructions  ", ver_5_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    additionalInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  " + StringUtils.defaultString(blkRecDoc.getDeliveryInstructionText()), cour_10_normal));

    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    additionalInfoTable.addCell(cell);

    /**
     * Additional Delivery instructions
     */
    p = new Paragraph();
    p.add(new Chunk("  Additional Delivery instructions  ", ver_5_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    additionalInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  " + StringUtils.defaultString(blkRecDoc.getDeliveryAdditionalInstructionText()),
            cour_10_normal));

    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    additionalInfoTable.addCell(cell);

    updateRequestorInfo(blkRecDoc, additionalInfoTable);

    String campusCode = blkRecDoc.getDeliveryCampusCode();

    /**
     * Dept Contact 
     */
    p = new Paragraph();
    p.add(new Chunk("   Contact Name ", ver_5_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    additionalInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  " + StringUtils.defaultString(blkRecDoc.getInstitutionContactName()), cour_10_normal));

    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    additionalInfoTable.addCell(cell);

    /**
     * Dept Contact Phone 
     */
    p = new Paragraph();
    p.add(new Chunk("  Contact Phone  ", ver_5_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    additionalInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  " + StringUtils.defaultString(blkRecDoc.getInstitutionContactPhoneNumber()),
            cour_10_normal));

    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    additionalInfoTable.addCell(cell);

    /**
     * Dept Contact email 
     */
    p = new Paragraph();
    p.add(new Chunk("  Contact Email  ", ver_5_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    additionalInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  " + StringUtils.defaultString(blkRecDoc.getInstitutionContactEmailAddress()),
            cour_10_normal));

    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    additionalInfoTable.addCell(cell);

    /**
     * Signature
     */
    p = new Paragraph();
    p.add(new Chunk("  " + " Signature  ", ver_5_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    additionalInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("\n\n\n\n"));

    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    additionalInfoTable.addCell(cell);

    /**
     * Date
     */
    p = new Paragraph();
    p.add(new Chunk("  " + " Date  ", ver_5_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    additionalInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("\n\n\n\n"));

    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    additionalInfoTable.addCell(cell);

    return additionalInfoTable;
}

From source file:org.kuali.kfs.module.purap.pdf.BulkReceivingPdf.java

License:Open Source License

private void updateRequestorInfo(BulkReceivingDocument blkRecDoc, PdfPTable additionalInfoTable) {
    /**//w  ww.j ava  2  s.c  o m
     * Requestor Name
     */
    Paragraph p = new Paragraph();
    p.add(new Chunk("  Requestor Name  ", ver_5_normal));
    PdfPCell cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    additionalInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  " + StringUtils.defaultString(blkRecDoc.getRequestorPersonName()), cour_10_normal));

    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    additionalInfoTable.addCell(cell);

    /**
     * Requestor Phone
     */
    p = new Paragraph();
    p.add(new Chunk("  Requestor Phone  ", ver_5_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    additionalInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  " + StringUtils.defaultString(blkRecDoc.getRequestorPersonPhoneNumber()),
            cour_10_normal));

    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    additionalInfoTable.addCell(cell);

    /**
     * Requestor Email
     */
    p = new Paragraph();
    p.add(new Chunk("  Requestor Email  ", ver_5_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    additionalInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  " + StringUtils.defaultString(blkRecDoc.getRequestorPersonEmailAddress()),
            cour_10_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    additionalInfoTable.addCell(cell);
}

From source file:org.kuali.kfs.module.purap.pdf.PurchaseOrderPdf.java

License:Open Source License

/**
 * Overrides the method in PdfPageEventHelper from itext to create and set the headerTable and set its logo image if
 * there is a logoImage to be used, creates and sets the nestedHeaderTable and its content.
 *
 * @param writer    The PdfWriter for this document.
 * @param document  The document.//from w ww .j a  va  2 s . c  om
 * @see com.lowagie.text.pdf.PdfPageEventHelper#onOpenDocument(com.lowagie.text.pdf.PdfWriter, com.lowagie.text.Document)
 */
@Override
public void onOpenDocument(PdfWriter writer, Document document) {
    if (LOG.isDebugEnabled()) {
        LOG.debug("onOpenDocument() started. isRetransmit is " + isRetransmit);
    }
    try {
        float[] headerWidths = { 0.20f, 0.80f };
        headerTable = new PdfPTable(headerWidths);
        headerTable.setWidthPercentage(100);
        headerTable.setHorizontalAlignment(Element.ALIGN_CENTER);
        headerTable.setSplitLate(false);
        headerTable.getDefaultCell().setBorderWidth(0);
        headerTable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
        headerTable.getDefaultCell().setVerticalAlignment(Element.ALIGN_CENTER);

        Image logo = null;
        if (StringUtils.isNotBlank(logoImage)) {
            try {
                logo = Image.getInstance(logoImage);
            } catch (IOException e) {
                LOG.info("The logo image [" + logoImage
                        + "] is not available.  Defaulting to the default image.");
            }
        }

        if (logo == null) {
            // if we don't use images
            headerTable.addCell(new Phrase(new Chunk("")));
        } else {
            logo.scalePercent(3, 3);
            headerTable.addCell(new Phrase(new Chunk(logo, 0, 0)));
        }
        // Nested table for titles, etc.
        float[] nestedHeaderWidths = { 0.70f, 0.30f };
        nestedHeaderTable = new PdfPTable(nestedHeaderWidths);
        nestedHeaderTable.setSplitLate(false);
        PdfPCell cell;

        // New nestedHeaderTable row
        cell = new PdfPCell(new Paragraph(po.getBillingName(), ver_15_normal));
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setBorderWidth(0);
        nestedHeaderTable.addCell(cell);
        cell = new PdfPCell(new Paragraph(" ", ver_15_normal));
        cell.setBorderWidth(0);
        nestedHeaderTable.addCell(cell);
        // New nestedHeaderTable row
        if (isRetransmit) {
            cell = new PdfPCell(new Paragraph(po.getRetransmitHeader(), ver_15_normal));
        } else {
            cell = new PdfPCell(new Paragraph("PURCHASE ORDER", ver_15_normal));
        }
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setBorderWidth(0);
        nestedHeaderTable.addCell(cell);
        Paragraph p = new Paragraph();
        p.add(new Chunk("PO Number: ", ver_11_normal));
        p.add(new Chunk(po.getPurapDocumentIdentifier().toString(), cour_16_bold));

        cell = new PdfPCell(p);
        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        cell.setBorderWidth(0);
        nestedHeaderTable.addCell(cell);
        if (!po.getPurchaseOrderAutomaticIndicator()) { // Contract manager name goes on non-APOs.
            // New nestedHeaderTable row, spans both columns
            p = new Paragraph();
            p.add(new Chunk("Contract Manager: ", ver_11_normal));
            p.add(new Chunk(po.getContractManager().getContractManagerName(), cour_7_normal));
            cell = new PdfPCell(p);
            cell.setColspan(2);
            cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            cell.setBorderWidth(0);
            nestedHeaderTable.addCell(cell);
        }
        // Add the nestedHeaderTable to the headerTable
        cell = new PdfPCell(nestedHeaderTable);
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setBorderWidth(0);
        headerTable.addCell(cell);

        // initialization of the template
        tpl = writer.getDirectContent().createTemplate(100, 100);
        // initialization of the font
        helv = BaseFont.createFont("Helvetica", BaseFont.WINANSI, false);
    } catch (Exception e) {
        throw new ExceptionConverter(e);
    }
}

From source file:org.kuali.kfs.module.purap.pdf.PurchaseOrderPdf.java

License:Open Source License

/**
 * Create a PDF using the given input parameters.
 *
 * @param po                             The PurchaseOrderDocument to be used to create the pdf.
 * @param document                       The pdf document whose margins have already been set.
 * @param writer                         The PdfWriter to write the pdf document into.
 * @param statusInquiryUrl               The status inquiry url to be displayed on the pdf document.
 * @param campusName                     The campus name to be displayed on the pdf document.
 * @param contractLanguage               The contract language to be displayed on the pdf document.
 * @param logoImage                      The logo image file name to be displayed on the pdf document.
 * @param directorSignatureImage         The director signature image to be displayed on the pdf document.
 * @param directorName                   The director name to be displayed on the pdf document.
 * @param directorTitle                  The director title to be displayed on the pdf document.
 * @param contractManagerSignatureImage  The contract manager signature image to be displayed on the pdf document.
 * @param isRetransmit                   The boolean to indicate whether this is for a retransmit purchase order document.
 * @param environment                    The current environment used (e.g. DEV if it is a development environment).
 * @param retransmitItems                The items selected by the user to be retransmitted.
 * @throws DocumentException/*  w  w w. j  a  va2 s . c o m*/
 * @throws IOException
 */
private void createPdf(PurchaseOrderDocument po, Document document, PdfWriter writer, String statusInquiryUrl,
        String campusName, String contractLanguage, String logoImage, String directorSignatureImage,
        String directorName, String directorTitle, String contractManagerSignatureImage, boolean isRetransmit,
        String environment, List<PurchaseOrderItem> retransmitItems) throws DocumentException, IOException {
    if (LOG.isDebugEnabled()) {
        LOG.debug("createPdf() started for po number " + po.getPurapDocumentIdentifier().toString());
    }

    // These have to be set because they are used by the onOpenDocument() and onStartPage() methods.
    this.campusName = campusName;
    this.po = po;
    this.logoImage = logoImage;
    this.environment = environment;

    NumberFormat numberFormat = NumberFormat.getCurrencyInstance(Locale.US);
    Collection errors = new ArrayList();

    // Date format pattern: MM-dd-yyyy
    SimpleDateFormat sdf = PurApDateFormatUtils
            .getSimpleDateFormat(PurapConstants.NamedDateFormats.KUALI_SIMPLE_DATE_FORMAT_2);

    // This turns on the page events that handle the header and page numbers.
    PurchaseOrderPdf events = new PurchaseOrderPdf().getPageEvents();
    writer.setPageEvent(this); // Passing in "this" lets it know about the po, campusName, etc.

    document.open();

    PdfPCell cell;
    Paragraph p = new Paragraph();

    // ***** Info table (vendor, address info) *****
    LOG.debug("createPdf() info table started.");
    float[] infoWidths = { 0.50f, 0.50f };
    PdfPTable infoTable = new PdfPTable(infoWidths);

    infoTable.setWidthPercentage(100);
    infoTable.setHorizontalAlignment(Element.ALIGN_CENTER);
    infoTable.setSplitLate(false);

    StringBuffer vendorInfo = new StringBuffer();
    vendorInfo.append("\n");
    if (StringUtils.isNotBlank(po.getVendorName())) {
        vendorInfo.append("     " + po.getVendorName() + "\n");
    }

    vendorInfo.append("     ATTN: " + po.getVendorAttentionName() + "\n");

    if (StringUtils.isNotBlank(po.getVendorLine1Address())) {
        vendorInfo.append("     " + po.getVendorLine1Address() + "\n");
    }
    if (StringUtils.isNotBlank(po.getVendorLine2Address())) {
        vendorInfo.append("     " + po.getVendorLine2Address() + "\n");
    }
    if (StringUtils.isNotBlank(po.getVendorCityName())) {
        vendorInfo.append("     " + po.getVendorCityName());
    }
    if (StringUtils.isNotBlank(po.getVendorStateCode())) {
        vendorInfo.append(", " + po.getVendorStateCode());
    }
    if (StringUtils.isNotBlank(po.getVendorAddressInternationalProvinceName())) {
        vendorInfo.append(", " + po.getVendorAddressInternationalProvinceName());
    }
    if (StringUtils.isNotBlank(po.getVendorPostalCode())) {
        vendorInfo.append(" " + po.getVendorPostalCode() + "\n");
    } else {
        vendorInfo.append("\n");
    }
    if (!KFSConstants.COUNTRY_CODE_UNITED_STATES.equalsIgnoreCase(po.getVendorCountryCode())
            && po.getVendorCountry() != null) {
        vendorInfo.append("     " + po.getVendorCountry().getName() + "\n\n");
    } else {
        vendorInfo.append("\n\n");
    }
    p = new Paragraph();
    p.add(new Chunk(" Vendor", ver_5_normal));
    p.add(new Chunk(vendorInfo.toString(), cour_7_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    infoTable.addCell(cell);

    StringBuffer shipToInfo = new StringBuffer();
    shipToInfo.append("\n");

    if (po.getAddressToVendorIndicator()) { // use receiving address
        shipToInfo.append("     " + po.getReceivingName() + "\n");
        shipToInfo.append("     " + po.getReceivingLine1Address() + "\n");
        if (StringUtils.isNotBlank(po.getReceivingLine2Address())) {
            shipToInfo.append("     " + po.getReceivingLine2Address() + "\n");
        }
        shipToInfo.append("     " + po.getReceivingCityName() + ", " + po.getReceivingStateCode() + " "
                + po.getReceivingPostalCode() + "\n");
        if (StringUtils.isNotBlank(po.getReceivingCountryCode())
                && !KFSConstants.COUNTRY_CODE_UNITED_STATES.equalsIgnoreCase(po.getReceivingCountryCode())) {
            shipToInfo.append("     " + po.getReceivingCountryName() + "\n");
        }
    } else { // use delivery address
        shipToInfo.append("     " + po.getDeliveryToName() + "\n");
        // extra space needed below to separate other text going on same PDF line
        String deliveryBuildingName = po.getDeliveryBuildingName() + " ";
        if (po.isDeliveryBuildingOtherIndicator()) {
            deliveryBuildingName = "";
        }
        shipToInfo
                .append("     " + deliveryBuildingName + "Room #" + po.getDeliveryBuildingRoomNumber() + "\n");
        shipToInfo.append("     " + po.getDeliveryBuildingLine1Address() + "\n");
        if (StringUtils.isNotBlank(po.getDeliveryBuildingLine2Address())) {
            shipToInfo.append("     " + po.getDeliveryBuildingLine2Address() + "\n");
        }
        shipToInfo.append("     " + po.getDeliveryCityName() + ", " + po.getDeliveryStateCode() + " "
                + po.getDeliveryPostalCode() + "\n");
        if (StringUtils.isNotBlank(po.getDeliveryCountryCode())
                && !KFSConstants.COUNTRY_CODE_UNITED_STATES.equalsIgnoreCase(po.getDeliveryCountryCode())) {
            shipToInfo.append("     " + po.getDeliveryCountryName() + "\n");
        }
    }
    // display deliveryToPhoneNumber disregard of whether receiving or delivery address is used
    shipToInfo.append("     " + po.getDeliveryToPhoneNumber());
    /*
    // display deliveryToPhoneNumber based on the parameter indicator, disregard of whether receiving or delivery address is used
    boolean displayDeliveryPhoneNumber = SpringContext.getBean(ParameterService.class).getIndicatorParameter(PurchaseOrderDocument.class, PurapParameterConstants.DISPLAY_DELIVERY_PHONE_NUMBER_ON_PDF_IND);
    if (displayDeliveryPhoneNumber && StringUtils.isNotBlank(po.getDeliveryToPhoneNumber())) {
    shipToInfo.append("     " + po.getDeliveryToPhoneNumber());
    }
    */

    p = new Paragraph();
    p.add(new Chunk("  Shipping Address", ver_5_normal));
    p.add(new Chunk(shipToInfo.toString(), cour_7_normal));
    cell = new PdfPCell(p);
    infoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  Shipping Terms\n", ver_5_normal));
    if (po.getVendorShippingPaymentTerms() != null && po.getVendorShippingTitle() != null) {
        p.add(new Chunk("     " + po.getVendorShippingPaymentTerms().getVendorShippingPaymentTermsDescription(),
                cour_7_normal));
        p.add(new Chunk(" - " + po.getVendorShippingTitle().getVendorShippingTitleDescription(),
                cour_7_normal));
    } else if (po.getVendorShippingPaymentTerms() != null && po.getVendorShippingTitle() == null) {
        p.add(new Chunk("     " + po.getVendorShippingPaymentTerms().getVendorShippingPaymentTermsDescription(),
                cour_7_normal));
    } else if (po.getVendorShippingTitle() != null && po.getVendorShippingPaymentTerms() == null) {
        p.add(new Chunk("     " + po.getVendorShippingTitle().getVendorShippingTitleDescription(),
                cour_7_normal));
    }
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    infoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  Payment Terms\n", ver_5_normal));
    if (po.getVendorPaymentTerms() != null) {
        p.add(new Chunk("     " + po.getVendorPaymentTerms().getVendorPaymentTermsDescription(),
                cour_7_normal));
    }
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    infoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  Delivery Required By\n", ver_5_normal));

    if (po.getDeliveryRequiredDate() != null && po.getDeliveryRequiredDateReason() != null) {
        p.add(new Chunk("     " + sdf.format(po.getDeliveryRequiredDate()), cour_7_normal));
        p.add(new Chunk(" - " + po.getDeliveryRequiredDateReason().getDeliveryRequiredDateReasonDescription(),
                cour_7_normal));
    } else if (po.getDeliveryRequiredDate() != null && po.getDeliveryRequiredDateReason() == null) {
        p.add(new Chunk("     " + sdf.format(po.getDeliveryRequiredDate()), cour_7_normal));
    } else if (po.getDeliveryRequiredDate() == null && po.getDeliveryRequiredDateReason() != null) {
        p.add(new Chunk("     " + po.getDeliveryRequiredDateReason().getDeliveryRequiredDateReasonDescription(),
                cour_7_normal));
    }
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    infoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  ", ver_5_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    infoTable.addCell(cell);

    // Nested table for Order Date, etc.
    float[] nestedInfoWidths = { 0.50f, 0.50f };
    PdfPTable nestedInfoTable = new PdfPTable(nestedInfoWidths);
    nestedInfoTable.setSplitLate(false);

    p = new Paragraph();
    p.add(new Chunk("  Order Date\n", ver_5_normal));

    String orderDate = "";
    if (po.getPurchaseOrderInitialOpenTimestamp() != null) {
        orderDate = sdf.format(po.getPurchaseOrderInitialOpenTimestamp());
    } else {
        // This date isn't set until the first time this document is printed, so will be null the first time; use today's date.
        orderDate = sdf.format(getDateTimeService().getCurrentSqlDate());
    }

    p.add(new Chunk("     " + orderDate, cour_7_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    nestedInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  Customer #\n", ver_5_normal));
    if (po.getVendorCustomerNumber() != null) {
        p.add(new Chunk("     " + po.getVendorCustomerNumber(), cour_7_normal));
    }
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    nestedInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  Delivery Instructions\n", ver_5_normal));
    if (StringUtils.isNotBlank(po.getDeliveryInstructionText())) {
        p.add(new Chunk("     " + po.getDeliveryInstructionText(), cour_7_normal));
    }
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    nestedInfoTable.addCell(cell);

    p = new Paragraph();
    p.add(new Chunk("  Contract ID\n", ver_5_normal));
    if (po.getVendorContract() != null) {
        p.add(new Chunk(po.getVendorContract().getVendorContractName(), cour_7_normal));
    }
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    nestedInfoTable.addCell(cell);

    // Add the nestedInfoTable to the infoTable
    cell = new PdfPCell(nestedInfoTable);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    infoTable.addCell(cell);

    StringBuffer billToInfo = new StringBuffer();
    billToInfo.append("\n");
    billToInfo.append("     " + po.getBillingName() + "\n");
    billToInfo.append("     " + po.getBillingLine1Address() + "\n");
    if (po.getBillingLine2Address() != null) {
        billToInfo.append("     " + po.getBillingLine2Address() + "\n");
    }
    billToInfo.append("     " + po.getBillingCityName() + ", " + po.getBillingStateCode() + " "
            + po.getBillingPostalCode() + "\n");
    if (po.getBillingPhoneNumber() != null) {
        billToInfo.append("     " + po.getBillingPhoneNumber());
    }
    if (po.getBillingEmailAddress() != null) {
        billToInfo.append("\n     " + po.getBillingEmailAddress());
    }
    p = new Paragraph();
    p.add(new Chunk("  Billing Address", ver_5_normal));
    p.add(new Chunk("     " + billToInfo.toString(), cour_7_normal));
    p.add(new Chunk("\n Invoice status inquiry: " + statusInquiryUrl, ver_6_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    infoTable.addCell(cell);

    document.add(infoTable);

    PdfPTable notesStipulationsTable = new PdfPTable(1);
    notesStipulationsTable.setWidthPercentage(100);
    notesStipulationsTable.setSplitLate(false);

    p = new Paragraph();
    p.add(new Chunk("  Vendor Note(s)\n", ver_5_normal));
    if (po.getVendorNoteText() != null) {
        p.add(new Chunk("     " + po.getVendorNoteText() + "\n", cour_7_normal));
    }

    PdfPCell tableCell = new PdfPCell(p);
    tableCell.setHorizontalAlignment(Element.ALIGN_LEFT);
    tableCell.setVerticalAlignment(Element.ALIGN_TOP);

    notesStipulationsTable.addCell(tableCell);

    p = new Paragraph();
    p.add(new Chunk("  Vendor Stipulations and Information\n", ver_5_normal));
    if ((po.getPurchaseOrderBeginDate() != null) && (po.getPurchaseOrderEndDate() != null)) {
        p.add(new Chunk("     Order in effect from " + sdf.format(po.getPurchaseOrderBeginDate()) + " to "
                + sdf.format(po.getPurchaseOrderEndDate()) + ".\n", cour_7_normal));

    }
    Collection<PurchaseOrderVendorStipulation> vendorStipulationsList = po.getPurchaseOrderVendorStipulations();
    if (vendorStipulationsList.size() > 0) {
        StringBuffer vendorStipulations = new StringBuffer();
        for (PurchaseOrderVendorStipulation povs : vendorStipulationsList) {
            vendorStipulations.append("     " + povs.getVendorStipulationDescription() + "\n");
        }
        p.add(new Chunk("     " + vendorStipulations.toString(), cour_7_normal));
    }

    tableCell = new PdfPCell(p);
    tableCell.setHorizontalAlignment(Element.ALIGN_LEFT);
    tableCell.setVerticalAlignment(Element.ALIGN_TOP);
    notesStipulationsTable.addCell(tableCell);

    document.add(notesStipulationsTable);

    // ***** Items table *****
    LOG.debug("createPdf() items table started.");

    float[] itemsWidths = { 0.07f, 0.1f, 0.07f, 0.45f, 0.15f, 0.15f };

    if (!po.isUseTaxIndicator()) {
        itemsWidths = ArrayUtils.add(itemsWidths, 0.14f);
        itemsWidths = ArrayUtils.add(itemsWidths, 0.15f);
    }

    PdfPTable itemsTable = new PdfPTable(itemsWidths.length);

    // itemsTable.setCellsFitPage(false); With this set to true a large cell will
    // skip to the next page. The default Table behaviour seems to be what we want:
    // start the large cell on the same page and continue it to the next.
    itemsTable.setWidthPercentage(100);
    itemsTable.setWidths(itemsWidths);
    itemsTable.setSplitLate(false);

    tableCell = new PdfPCell(new Paragraph("Item\nNo.", ver_5_normal));
    tableCell.setHorizontalAlignment(Element.ALIGN_CENTER);
    itemsTable.addCell(tableCell);
    tableCell = new PdfPCell(new Paragraph("Quantity", ver_5_normal));
    tableCell.setHorizontalAlignment(Element.ALIGN_CENTER);
    itemsTable.addCell(tableCell);
    tableCell = new PdfPCell(new Paragraph("UOM", ver_5_normal));
    tableCell.setHorizontalAlignment(Element.ALIGN_CENTER);
    itemsTable.addCell(tableCell);
    tableCell = new PdfPCell(new Paragraph("Description", ver_5_normal));
    tableCell.setHorizontalAlignment(Element.ALIGN_CENTER);
    itemsTable.addCell(tableCell);
    tableCell = new PdfPCell(new Paragraph("Unit Cost", ver_5_normal));
    tableCell.setHorizontalAlignment(Element.ALIGN_CENTER);
    itemsTable.addCell(tableCell);
    tableCell = new PdfPCell(new Paragraph("Extended Cost", ver_5_normal));
    tableCell.setHorizontalAlignment(Element.ALIGN_CENTER);
    itemsTable.addCell(tableCell);

    if (!po.isUseTaxIndicator()) {
        tableCell = new PdfPCell(new Paragraph("Tax Amount", ver_5_normal));
        tableCell.setHorizontalAlignment(Element.ALIGN_CENTER);
        itemsTable.addCell(tableCell);

        tableCell = new PdfPCell(new Paragraph("Total Amount", ver_5_normal));
        tableCell.setHorizontalAlignment(Element.ALIGN_CENTER);
        itemsTable.addCell(tableCell);
    }

    Collection<PurchaseOrderItem> itemsList = new ArrayList();
    if (isRetransmit) {
        itemsList = retransmitItems;
    } else {
        itemsList = po.getItems();
    }
    for (PurchaseOrderItem poi : itemsList) {
        if ((poi.getItemType() != null)
                && (poi.getItemType().isLineItemIndicator()
                        || poi.getItemType().getItemTypeCode()
                                .equals(PurapConstants.ItemTypeCodes.ITEM_TYPE_SHIP_AND_HAND_CODE)
                        || poi.getItemType().getItemTypeCode()
                                .equals(PurapConstants.ItemTypeCodes.ITEM_TYPE_FREIGHT_CODE)
                        || poi.getItemType().getItemTypeCode()
                                .equals(PurapConstants.ItemTypeCodes.ITEM_TYPE_ORDER_DISCOUNT_CODE)
                        || poi.getItemType().getItemTypeCode()
                                .equals(PurapConstants.ItemTypeCodes.ITEM_TYPE_TRADE_IN_CODE))
                && lineItemDisplaysOnPdf(poi)) {

            String description = (poi.getItemCatalogNumber() != null)
                    ? poi.getItemCatalogNumber().trim() + " - "
                    : "";
            description = description
                    + ((poi.getItemDescription() != null) ? poi.getItemDescription().trim() : "");
            if (StringUtils.isNotBlank(description)) {
                if (poi.getItemType().getItemTypeCode()
                        .equals(PurapConstants.ItemTypeCodes.ITEM_TYPE_ORDER_DISCOUNT_CODE)
                        || poi.getItemType().getItemTypeCode()
                                .equals(PurapConstants.ItemTypeCodes.ITEM_TYPE_TRADE_IN_CODE)
                        || poi.getItemType().getItemTypeCode()
                                .equals(PurapConstants.ItemTypeCodes.ITEM_TYPE_FREIGHT_CODE)
                        || poi.getItemType().getItemTypeCode()
                                .equals(PurapConstants.ItemTypeCodes.ITEM_TYPE_SHIP_AND_HAND_CODE)) {
                    // If this is a full order discount or trade-in item, we add the item type description to the description.
                    description = poi.getItemType().getItemTypeDescription() + " - " + description;
                }
            }

            // Above the line item types items display the line number; other types don't.
            if (poi.getItemType().isLineItemIndicator()) {
                tableCell = new PdfPCell(new Paragraph(poi.getItemLineNumber().toString(), cour_7_normal));
            } else {
                tableCell = new PdfPCell(new Paragraph(" ", cour_7_normal));
            }
            tableCell.setHorizontalAlignment(Element.ALIGN_CENTER);
            itemsTable.addCell(tableCell);
            String quantity = (poi.getItemQuantity() != null) ? poi.getItemQuantity().toString() : " ";
            tableCell = new PdfPCell(new Paragraph(quantity, cour_7_normal));
            tableCell.setHorizontalAlignment(Element.ALIGN_CENTER);
            tableCell.setNoWrap(true);
            itemsTable.addCell(tableCell);
            tableCell = new PdfPCell(new Paragraph(poi.getItemUnitOfMeasureCode(), cour_7_normal));
            tableCell.setHorizontalAlignment(Element.ALIGN_CENTER);
            itemsTable.addCell(tableCell);

            tableCell = new PdfPCell(new Paragraph(" " + description, cour_7_normal));
            tableCell.setHorizontalAlignment(Element.ALIGN_LEFT);
            itemsTable.addCell(tableCell);
            String unitPrice = poi.getItemUnitPrice().setScale(4, BigDecimal.ROUND_HALF_UP).toString();
            tableCell = new PdfPCell(new Paragraph(unitPrice + " ", cour_7_normal));
            tableCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            tableCell.setNoWrap(true);
            itemsTable.addCell(tableCell);
            tableCell = new PdfPCell(
                    new Paragraph(numberFormat.format(poi.getExtendedPrice()) + " ", cour_7_normal));
            tableCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            tableCell.setNoWrap(true);
            itemsTable.addCell(tableCell);

            if (!po.isUseTaxIndicator()) {
                KualiDecimal taxAmount = poi.getItemTaxAmount();
                taxAmount = taxAmount == null ? KualiDecimal.ZERO : taxAmount;
                tableCell = new PdfPCell(new Paragraph(numberFormat.format(taxAmount) + " ", cour_7_normal));
                tableCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
                tableCell.setNoWrap(true);
                itemsTable.addCell(tableCell);

                tableCell = new PdfPCell(
                        new Paragraph(numberFormat.format(poi.getTotalAmount()) + " ", cour_7_normal));
                tableCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
                tableCell.setNoWrap(true);
                itemsTable.addCell(tableCell);
            }

        }
    }
    // Blank line before totals
    itemsTable.addCell(" ");
    itemsTable.addCell(" ");
    itemsTable.addCell(" ");
    itemsTable.addCell(" ");
    itemsTable.addCell(" ");
    itemsTable.addCell(" ");

    if (!po.isUseTaxIndicator()) {
        itemsTable.addCell(" ");
        itemsTable.addCell(" ");
    }

    //Next Line
    if (!po.isUseTaxIndicator()) {

        //Print Total Prior to Tax
        itemsTable.addCell(" ");
        itemsTable.addCell(" ");
        itemsTable.addCell(" ");
        itemsTable.addCell(" ");
        itemsTable.addCell(" ");

        tableCell = new PdfPCell(new Paragraph("Total Prior to Tax: ", ver_10_normal));
        tableCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        itemsTable.addCell(tableCell);
        itemsTable.addCell(" ");
        KualiDecimal totalDollarAmount = new KualiDecimal(BigDecimal.ZERO);
        if (po instanceof PurchaseOrderRetransmitDocument) {
            totalDollarAmount = ((PurchaseOrderRetransmitDocument) po)
                    .getTotalPreTaxDollarAmountForRetransmit();
        } else {
            totalDollarAmount = po.getTotalPreTaxDollarAmount();
        }
        tableCell = new PdfPCell(new Paragraph(numberFormat.format(totalDollarAmount) + " ", cour_7_normal));
        tableCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        tableCell.setNoWrap(true);
        itemsTable.addCell(tableCell);

        //Print Total Tax
        itemsTable.addCell(" ");
        itemsTable.addCell(" ");
        itemsTable.addCell(" ");
        itemsTable.addCell(" ");
        itemsTable.addCell(" ");

        tableCell = new PdfPCell(new Paragraph("Total Tax: ", ver_10_normal));
        tableCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        itemsTable.addCell(tableCell);
        itemsTable.addCell(" ");
        totalDollarAmount = new KualiDecimal(BigDecimal.ZERO);
        if (po instanceof PurchaseOrderRetransmitDocument) {
            totalDollarAmount = ((PurchaseOrderRetransmitDocument) po).getTotalTaxDollarAmountForRetransmit();
        } else {
            totalDollarAmount = po.getTotalTaxAmount();
        }
        tableCell = new PdfPCell(new Paragraph(numberFormat.format(totalDollarAmount) + " ", cour_7_normal));
        tableCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        tableCell.setNoWrap(true);
        itemsTable.addCell(tableCell);

    }

    // Totals line; first 3 cols empty
    itemsTable.addCell(" ");
    itemsTable.addCell(" ");
    itemsTable.addCell(" ");

    if (!po.isUseTaxIndicator()) {
        itemsTable.addCell(" ");
        itemsTable.addCell(" ");
    }

    tableCell = new PdfPCell(new Paragraph("Total order amount: ", ver_10_normal));
    tableCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    itemsTable.addCell(tableCell);
    itemsTable.addCell(" ");
    KualiDecimal totalDollarAmount = new KualiDecimal(BigDecimal.ZERO);
    if (po instanceof PurchaseOrderRetransmitDocument) {
        totalDollarAmount = ((PurchaseOrderRetransmitDocument) po).getTotalDollarAmountForRetransmit();
    } else {
        totalDollarAmount = po.getTotalDollarAmount();
    }
    tableCell = new PdfPCell(new Paragraph(numberFormat.format(totalDollarAmount) + " ", cour_7_normal));
    tableCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    tableCell.setNoWrap(true);
    itemsTable.addCell(tableCell);
    // Blank line after totals
    itemsTable.addCell(" ");
    itemsTable.addCell(" ");
    itemsTable.addCell(" ");
    itemsTable.addCell(" ");
    itemsTable.addCell(" ");
    itemsTable.addCell(" ");

    if (!po.isUseTaxIndicator()) {
        itemsTable.addCell(" ");
        itemsTable.addCell(" ");
    }

    document.add(itemsTable);

    // Contract language.
    LOG.debug("createPdf() contract language started.");
    document.add(new Paragraph(contractLanguage, ver_6_normal));
    document.add(new Paragraph("\n", ver_6_normal));

    // ***** Signatures table *****
    LOG.debug("createPdf() signatures table started.");
    float[] signaturesWidths = { 0.30f, 0.70f };
    PdfPTable signaturesTable = new PdfPTable(signaturesWidths);
    signaturesTable.setWidthPercentage(100);
    signaturesTable.setHorizontalAlignment(Element.ALIGN_CENTER);
    signaturesTable.setSplitLate(false);

    // Director signature and "for more info" line; only on APOs
    if (po.getPurchaseOrderAutomaticIndicator()) {
        // Empty cell.
        cell = new PdfPCell(new Paragraph(" ", cour_7_normal));
        cell.setBorderWidth(0);
        signaturesTable.addCell(cell);

        //boolean displayRequestorEmail = true; //SpringContext.getBean(ParameterService.class).getIndicatorParameter(PurchaseOrderDocument.class, PurapParameterConstants.DISPLAY_REQUESTOR_EMAIL_ADDRESS_ON_PDF_IND);
        if (StringUtils.isBlank(po.getInstitutionContactName())
                || StringUtils.isBlank(po.getInstitutionContactPhoneNumber())
                || StringUtils.isBlank(po.getInstitutionContactEmailAddress())) {
            //String emailAddress = displayRequestorEmail ? "  " + po.getRequestorPersonEmailAddress() : "";
            //p = new Paragraph("For more information contact: " + po.getRequestorPersonName() + "  " + po.getRequestorPersonPhoneNumber() + emailAddress, cour_7_normal);
            p = new Paragraph(
                    "For more information contact: " + po.getRequestorPersonName() + "  "
                            + po.getRequestorPersonPhoneNumber() + "  " + po.getRequestorPersonEmailAddress(),
                    cour_7_normal);
        } else {
            //String emailAddress = displayRequestorEmail ? "  " + po.getInstitutionContactEmailAddress() : "";
            //p = new Paragraph("For more information contact: " + po.getInstitutionContactName() + "  " + po.getInstitutionContactPhoneNumber() + emailAddress, cour_7_normal);
            p = new Paragraph("For more information contact: " + po.getInstitutionContactName() + "  "
                    + po.getInstitutionContactPhoneNumber() + "  " + po.getInstitutionContactEmailAddress(),
                    cour_7_normal);
        }
        cell = new PdfPCell(p);
        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        cell.setVerticalAlignment(Element.ALIGN_CENTER);
        cell.setBorderWidth(0);
        signaturesTable.addCell(cell);

        Image directorSignature = null;
        if (StringUtils.isNotBlank(directorSignatureImage)) {
            try {
                directorSignature = Image.getInstance(directorSignatureImage);
            } catch (FileNotFoundException e) {
                LOG.info("The director signature image [" + directorSignatureImage
                        + "] is not available.  Defaulting to the default image.");
            }
        }

        if (directorSignature == null) {
            // an empty cell if the contract manager signature image is not available.
            cell = new PdfPCell();
        } else {
            directorSignature.scalePercent(30, 30);
            cell = new PdfPCell(directorSignature, false);
        }

        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setVerticalAlignment(Element.ALIGN_BOTTOM);
        cell.setBorderWidth(0);
        signaturesTable.addCell(cell);

        // Empty cell.
        cell = new PdfPCell(new Paragraph(" ", cour_7_normal));
        cell.setBorderWidth(0);
        signaturesTable.addCell(cell);
    }

    // Director name and title; on every pdf.
    p = new Paragraph();
    if (LOG.isDebugEnabled()) {
        LOG.debug("createPdf() directorName parameter: " + directorName);
    }
    if (po.getPurchaseOrderAutomaticIndicator()) { // The signature is on the pdf; use small font.
        p.add(new Chunk(directorName, ver_6_normal));
    } else { // The signature isn't on the pdf; use larger font.
        p.add(new Chunk(directorName, ver_10_normal));
    }
    p.add(new Chunk("\n" + directorTitle, ver_4_normal));
    cell = new PdfPCell(p);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    cell.setVerticalAlignment(Element.ALIGN_TOP);
    cell.setBorderWidth(0);
    signaturesTable.addCell(cell);

    // Contract manager signature, name and phone; only on non-APOs
    if (!po.getPurchaseOrderAutomaticIndicator()) {

        Image contractManagerSignature = null;
        if (StringUtils.isNotBlank(contractManagerSignatureImage)) {
            try {
                contractManagerSignature = Image.getInstance(contractManagerSignatureImage);
            } catch (IOException e) {
                LOG.info("The contract manager image [" + contractManagerSignatureImage
                        + "] is not available.  Defaulting to the default image.");
            }
        }

        if (contractManagerSignature == null) {
            // an empty cell if the contract manager signature image is not available.
            cell = new PdfPCell();
        } else {
            contractManagerSignature.scalePercent(15, 15);
            cell = new PdfPCell(contractManagerSignature, false);
        }
        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        cell.setVerticalAlignment(Element.ALIGN_BOTTOM);
        cell.setBorderWidth(0);
        signaturesTable.addCell(cell);

        // Empty cell.
        cell = new PdfPCell(new Paragraph(" ", ver_10_normal));
        cell.setBorderWidth(0);
        signaturesTable.addCell(cell);

        cell = new PdfPCell(new Paragraph(po.getContractManager().getContractManagerName() + "  "
                + po.getContractManager().getContractManagerPhoneNumber(), cour_7_normal));
        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        cell.setVerticalAlignment(Element.ALIGN_TOP);
        cell.setBorderWidth(0);
        signaturesTable.addCell(cell);
    } else { // Empty cell.
        cell = new PdfPCell(new Paragraph(" ", ver_10_normal));
        cell.setBorderWidth(0);
        signaturesTable.addCell(cell);
    }
    document.add(signaturesTable);

    document.close();
    LOG.debug("createPdf()pdf document closed.");
}