Example usage for com.lowagie.text.pdf PdfContentByte stroke

List of usage examples for com.lowagie.text.pdf PdfContentByte stroke

Introduction

In this page you can find the example usage for com.lowagie.text.pdf PdfContentByte stroke.

Prototype


public void stroke() 

Source Link

Document

Strokes the path.

Usage

From source file:classroom.filmfestival_c.Movies19.java

protected static void drawMovie(PdfWriter writer, FestivalScreening screening, List<String> places,
        float minute, float left, float top, float row_height) throws DocumentException {
    FilmTitle movie = screening.getFilmTitle();
    // defining the rectangle
    int place = places.indexOf(screening.getId().getPlace());
    float llx, urx, lly, ury;
    llx = left + minute * getMinutesAfter930(screening);
    urx = llx + minute * (screening.getShortfilm() + movie.getDuration());
    ury = top - place * row_height;/*from   w  w  w  . j a  v  a 2 s.  c  o  m*/
    lly = top - ((place + 1) * row_height);

    // FOREGROUND
    PdfContentByte foreground = writer.getDirectContent();

    // rectangle
    foreground.setColorStroke(BLACK);
    foreground.setLineWidth(1);
    foreground.moveTo(urx, lly);
    foreground.lineTo(llx, lly);
    foreground.lineTo(llx, ury);
    foreground.lineTo(urx, ury);
    foreground.closePathStroke();
    // title
    ColumnText ct = new ColumnText(foreground);
    ct.setSimpleColumn(new Phrase(movie.getTitle(), SMALLEST), llx, lly, urx, ury, 14, Element.ALIGN_CENTER);
    ct.go();

    // BACKGROUND
    PdfContentByte background = writer.getDirectContentUnder();

    // draw background
    background.setColorFill(getColor(movie));
    background.moveTo(urx, lly);
    background.lineTo(llx, lly);
    background.lineTo(llx, ury);
    background.lineTo(urx, ury);
    background.fill();

    // draw a white P for press screenings
    if (screening.getPress() == 1) {
        background.saveState();
        background.beginText();
        background.setFontAndSize(FONT, 24);
        background.setColorFill(WHITE);
        background.showTextAligned(Element.ALIGN_CENTER, "P", (llx + urx) / 2f, (lly + ury) / 2f - 12, 0);
        background.endText();
        background.restoreState();
    }

    // draw shortfilm
    background.setColorStroke(WHITE);
    if (screening.getShortfilm() > 0) {
        background.moveTo(llx + (minute * screening.getShortfilm()), lly);
        background.lineTo(llx + (minute * screening.getShortfilm()), ury);
        background.stroke();
    }
}

From source file:classroom.filmfestival_c.Movies22.java

public static void main(String[] args) {
    // step 1// w w w .  j  a  va2 s  . c om
    Document document = new Document(new Rectangle(WIDTH, HEIGHT));
    try {
        // step 2
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FORM));
        writer.setViewerPreferences(PdfWriter.PageLayoutSinglePage);
        // step 3
        document.open();
        // step 4
        PdfContentByte cb = writer.getDirectContent();

        // top part of the card
        cb.setColorFill(RED);
        cb.rectangle(0, mm2pt(57f), WIDTH, HEIGHT - mm2pt(57f));
        cb.fill();
        cb.setColorFill(BLACK);
        cb.rectangle(0, mm2pt(61), WIDTH, mm2pt(21f));
        cb.fill();
        cb.setColorFill(WHITE);

        Image kubrick = Image.getInstance(KUBRICK);
        kubrick.scaleToFit(WIDTH, mm2pt(21));
        kubrick.setAbsolutePosition(0, mm2pt(61));
        cb.addImage(kubrick);

        Image logo = Image.getInstance(LOGO);
        logo.scaleToFit(mm2pt(14), mm2pt(14));
        logo.setAbsolutePosition(mm2pt(37), mm2pt(65));
        cb.addImage(logo);

        cb.beginText();
        cb.setFontAndSize(FONT, 7);
        cb.showTextAligned(Element.ALIGN_CENTER, "Flanders International Film Festival-Ghent", WIDTH / 2,
                mm2pt(58.5f), 0);
        cb.endText();

        // bottom part of the card

        TextField filmfestival = new TextField(writer, new Rectangle(0, 0, WIDTH, mm2pt(9)), "filmfestival");
        filmfestival.setBackgroundColor(GRAY);
        filmfestival.setTextColor(WHITE);
        filmfestival.setText("www.filmfestival.be");
        filmfestival.setFontSize(14);
        filmfestival.setOptions(TextField.READ_ONLY);
        filmfestival.setAlignment(Element.ALIGN_CENTER);
        writer.addAnnotation(filmfestival.getTextField());

        cb.beginText();
        cb.moveText(mm2pt(1.5f), mm2pt(12));
        cb.setFontAndSize(FONT, 21);
        cb.setColorFill(RED);
        cb.showText("10");
        cb.setColorFill(BLUE);
        cb.showText("/");
        cb.setColorFill(RED);
        cb.showText("21");
        cb.setColorFill(BLUE);
        cb.showText("OCT");
        cb.setColorFill(GREEN);
        cb.showText("2006");
        cb.endText();
        cb.setColorStroke(BLUE);
        cb.moveTo(mm2pt(24.5f), mm2pt(29));
        cb.lineTo(mm2pt(24.5f), mm2pt(36));
        cb.moveTo(mm2pt(24.5f), mm2pt(48));
        cb.lineTo(mm2pt(24.5f), mm2pt(54));
        cb.stroke();

        // central part of the card
        PushbuttonField photo = new PushbuttonField(writer,
                new Rectangle(mm2pt(3), mm2pt(29), mm2pt(24), mm2pt(54)), "photo");
        PdfTemplate t1 = cb.createTemplate(mm2pt(21), mm2pt(25));
        t1.setColorFill(GRAY);
        t1.rectangle(0, 0, mm2pt(21), mm2pt(25));
        t1.fill();
        photo.setTemplate(t1);
        photo.setLayout(PushbuttonField.LAYOUT_ICON_ONLY);
        writer.addAnnotation(photo.getField());

        TextField type = new TextField(writer,
                new Rectangle(mm2pt(26), mm2pt(46), WIDTH - mm2pt(1.5f), mm2pt(54)), "type");
        type.setTextColor(GRAY);
        type.setText("TYPE");
        type.setFontSize(0);
        writer.addAnnotation(type.getTextField());

        TextField number = new TextField(writer,
                new Rectangle(mm2pt(26), mm2pt(44), WIDTH - mm2pt(1.5f), mm2pt(48)), "number");
        number.setText("N\u00b0 0000000");
        number.setFontSize(8);
        writer.addAnnotation(number.getTextField());

        TextField name = new TextField(writer,
                new Rectangle(mm2pt(26), mm2pt(28), WIDTH - mm2pt(1.5f), mm2pt(40)), "name");
        name.setText("Name");
        name.setFontSize(8);
        name.setOptions(TextField.MULTILINE);
        writer.addAnnotation(name.getTextField());

        PushbuttonField barcode = new PushbuttonField(writer,
                new Rectangle(mm2pt(3), mm2pt(23), WIDTH - mm2pt(3), mm2pt(28)), "barcode");
        PdfTemplate t2 = cb.createTemplate(WIDTH - mm2pt(6), mm2pt(5));
        t2.setColorFill(GRAY);
        t2.rectangle(0, 0, WIDTH - mm2pt(6), mm2pt(5));
        t2.fill();
        barcode.setTemplate(t2);
        barcode.setLayout(PushbuttonField.LAYOUT_ICON_ONLY);
        writer.addAnnotation(barcode.getField());

    } catch (DocumentException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    // step 4
    document.close();
}

From source file:classroom.newspaper_b.Newspaper12.java

public static void putImage(PdfContentByte canvas, String path, float[] positions)
        throws DocumentException, IOException {
    float w = positions[3] - positions[1];
    float h = positions[4] - positions[2];
    Image img = Image.getInstance(path);
    img.scaleToFit(w, h);//from  www.j  a  v a2s  . c  o m
    float offsetX = (w - img.getScaledWidth()) / 2f;
    float offsetY = (h - img.getScaledHeight()) / 2f;
    img.setAbsolutePosition(positions[1] + offsetX, positions[2] + offsetY);
    canvas.addImage(img);
    canvas.rectangle(positions[1], positions[2], w, h);
    canvas.stroke();
}

From source file:com.actelion.research.spiritapp.print.CagePrinterPDF.java

License:Open Source License

private static void drawCageSeparation(Document doc, PdfContentByte canvas) {
    canvas.setLineWidth(1f);//from   w  ww.  j a  va 2  s  .  com
    canvas.setColorStroke(Color.BLACK);
    canvas.moveTo(0, doc.getPageSize().getHeight() / 2);
    canvas.lineTo(doc.getPageSize().getWidth(), doc.getPageSize().getHeight() / 2);
    canvas.moveTo(doc.getPageSize().getWidth() / 4, 0);
    canvas.lineTo(doc.getPageSize().getWidth() / 4, doc.getPageSize().getHeight());
    canvas.moveTo(2 * doc.getPageSize().getWidth() / 4, doc.getPageSize().getBottom());
    canvas.lineTo(2 * doc.getPageSize().getWidth() / 4, doc.getPageSize().getHeight());
    canvas.moveTo(3 * doc.getPageSize().getWidth() / 4, 0);
    canvas.lineTo(3 * doc.getPageSize().getWidth() / 4, doc.getPageSize().getHeight());
    canvas.stroke();
}

From source file:com.estate.pdf.Page.java

protected void drawLine(float x1, float y1, float x2, float y2, Color color) {
    PdfContentByte cb = writer.getDirectContentUnder();
    // Set our line color
    cb.setColorStroke(color);//  w  w  w  .  j  a v  a  2  s. c om
    cb.setLineWidth(.75f);

    // do the line
    cb.moveTo(x1, y1);
    cb.lineTo(x2, y2);
    cb.stroke();

}

From source file:com.estate.pdf.Page.java

protected void drawSpacingGrid(Rectangle rct, float spacing, Color color) {
    PdfContentByte cb = writer.getDirectContentUnder();

    cb.setLineWidth(.25f);//from   w w w .j a v a2 s. c o  m
    cb.setColorStroke(color);
    for (float x = 0; x < rct.getRight(); x += spacing) {
        cb.moveTo(x, 0);
        cb.lineTo(x, rct.getTop());
    }

    for (float y = 0; y < rct.getTop(); y += spacing) {
        cb.moveTo(0, y);
        cb.lineTo(rct.getRight(), y);
    }

    cb.stroke();

}

From source file:com.estate.pdf.PageBorder.java

public void draw(Document doc, int iconNum, String pageNum, String toolName) {
    try {// w w  w .j  a  v a  2  s.c o  m
        PdfContentByte cb = writer.getDirectContentUnder();
        BaseFont fontBold = BaseFont.createFont(Locations.getFontLocation() + "timesbd.ttf", BaseFont.CP1252,
                BaseFont.EMBEDDED);
        BaseFont font = BaseFont.createFont(Locations.getFontLocation() + "times.ttf", BaseFont.CP1252,
                BaseFont.EMBEDDED);
        Rectangle rct = new Rectangle(doc.getPageSize());
        float iconBase = (1.25f * 72); // This is the base of the icons on
        // the page
        Image icon = Image.getInstance(Locations.getImageLocation() + icons[iconNum]);
        // Image box = Image.getInstance(Locations.ImageLocation() +
        // "blueBOX.png");
        icon.scalePercent(23);
        float scale = .23f;
        float iconLeft = (icon.getWidth() / 2) * scale;
        float boxSize = (.1875f * 72);

        // Adjust the top
        rct.setTop(rct.getTop() - (.5f * 72));

        // Place the Icon
        icon.setAbsolutePosition((1.25f * 72) - iconLeft, rct.getTop() - iconBase);
        doc.add(icon);

        // Set our line color
        cb.setRGBColorStroke(0, 72, 117);

        cb.setLineWidth(.75f);

        // do the bottom line
        cb.moveTo(1.25f * 72, (.5f * 72));
        cb.lineTo(rct.getRight() - (.5f * 72), (.5f * 72));

        cb.moveTo(1.25f * 72, (.5f * 72));
        cb.lineTo(1.25f * 72, rct.getTop());

        // stroke the lines
        cb.stroke();

        // Do the lower left box
        cb.rectangle((1.25f - 0.09375f) * 72, (.5f - 0.09375f) * 72, boxSize, boxSize);
        cb.setRGBColorFill(0, 72, 117);
        cb.closePathFillStroke();

        // Do the lower right box
        Rectangle pnRect = new Rectangle(0, 0);
        pnRect.setLeft(rct.getRight() - ((.5f + 0.09375f) * 72));
        pnRect.setTop((.5f - 0.09375f) * 72);
        pnRect.setRight(pnRect.getLeft() + boxSize);
        pnRect.setBottom(pnRect.getTop() - boxSize);

        // cb.rectangle(rct.getRight() - ((.5f + 0.09375f) * 72), (.5f -
        // 0.09375f) * 72, (.1875f * 72), (.1875f * 72));
        cb.rectangle(pnRect.getLeft(), pnRect.getTop(), boxSize, boxSize);
        cb.setRGBColorFill(0, 72, 117);
        cb.closePathFillStroke();

        // Now we do the page number if one is supplied.
        if (pageNum.length() > 0) {
            float pnHeight = fontBold.getAscentPoint(pageNum, 9) - fontBold.getDescentPoint(pageNum, 9);
            float pnWidth = fontBold.getWidthPoint(pageNum, 9);

            float l = pnRect.getLeft() + ((boxSize - pnWidth) / 2);
            float b = pnRect.getTop() + ((boxSize - pnHeight) / 2);

            cb.beginText();
            cb.setFontAndSize(fontBold, 9);
            cb.setRGBColorFill(255, 255, 255);
            cb.setTextMatrix(l, b);
            cb.showText(pageNum);
            cb.endText();

        }

        // Display the copyright
        SimpleDateFormat df = new SimpleDateFormat("yyyy");
        char cs = 0x00a9; // Unicode for the copyright symbol
        String copyRight = com.estate.constants.StringConstants.copyRight + cs + " " + df.format(new Date());
        float crWidth;
        float crLeft;

        crWidth = font.getWidthPoint(copyRight, 8);
        cb.beginText();

        cb.setFontAndSize(font, 8);
        cb.setRGBColorFill(0, 0, 0);

        crLeft = (doc.getPageSize().getRight() - crWidth) / 2;
        cb.setTextMatrix(crLeft, .375f * 72); // Place the base of the
        // copyright at 3/8" up from
        // the bottom
        cb.showText(copyRight);
        cb.endText();

        if (toolName.length() > 0) {
            cb.beginText();

            cb.setFontAndSize(font, 8);
            cb.setRGBColorFill(0, 0, 0);

            cb.setTextMatrix((1.25f * 72) + boxSize, .375f * 72);
            cb.showText(toolName);
            cb.endText();
        }

        // Fix a licensee at left
        cb.beginText();
        cb.setFontAndSize(font, 8);
        cb.setRGBColorFill(0, 0, 0);
        cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, " Licensee: " + getLicense(), (10.2f * 72), .375f * 72,
                0);
        cb.endText();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

From source file:com.krawler.spring.exportFuctionality.ExportRecord.java

License:Open Source License

public ByteArrayOutputStream exportRatioAnalysis(HttpServletRequest request, JSONObject jobj, String logoPath,
        String comName) throws DocumentException, ServiceException, IOException {
    ByteArrayOutputStream baos = null;
    double total = 0;
    Document document = null;/*from   www .  jav a2  s. c  o m*/
    PdfWriter writer = null;
    try {
        //flag 1 = BalanceSheet , 2 = P&L

        baos = new ByteArrayOutputStream();
        document = new Document(PageSize.A4, 15, 15, 15, 15);
        writer = PdfWriter.getInstance(document, baos);
        document.open();
        PdfPTable mainTable = new PdfPTable(1);
        mainTable.setWidthPercentage(100);

        PdfPTable tab1 = null;
        Rectangle page = document.getPageSize();

        int bmargin = 15; //border margin
        PdfContentByte cb = writer.getDirectContent();
        cb.rectangle(bmargin, bmargin, page.getWidth() - bmargin * 2, page.getHeight() - bmargin * 2);
        cb.setColorStroke(Color.WHITE);
        cb.stroke();

        //            addHeaderFooter(document, writer);

        PdfPTable table1 = new PdfPTable(4);
        table1.setWidthPercentage(100);
        table1.setWidths(new float[] { 25, 25, 25, 25 });

        PdfPCell blankCell = new PdfPCell();
        blankCell.setBorder(0);
        tab1 = addCompanyLogo(logoPath, comName);
        PdfPCell cell1 = new PdfPCell(tab1);
        cell1.setBorder(0);
        table1.addCell(cell1);
        table1.addCell(blankCell);
        table1.addCell(blankCell);
        table1.addCell(blankCell);

        PdfPCell cell2 = new PdfPCell(new Paragraph(comName, fontSmallRegular));
        cell2.setBorder(0);
        table1.addCell(cell2);
        table1.addCell(blankCell);
        table1.addCell(blankCell);
        table1.addCell(blankCell);

        PdfPCell headerCell = createCell(
                messageSource.getMessage("acc.ra.tabTT", null, RequestContextUtils.getLocale(request)),
                FontContext.TABLE_HEADER, Element.ALIGN_LEFT, 0, 5);
        headerCell.setBorder(0);
        table1.addCell(headerCell);
        table1.addCell(blankCell);
        table1.addCell(blankCell);
        table1.addCell(blankCell);

        table1.addCell(blankCell);
        table1.addCell(blankCell);
        table1.addCell(blankCell);
        table1.addCell(blankCell);

        JSONArray ObjArr = jobj.getJSONArray("data");

        PdfPCell HeaderCell1 = createCell(
                messageSource.getMessage("acc.ra.principalGroups", null,
                        RequestContextUtils.getLocale(request)),
                FontContext.SMALL_TEXT, Element.ALIGN_LEFT, 0, 5);
        HeaderCell1.setBorderWidthLeft(1);
        HeaderCell1.setBorderWidthBottom(1);
        HeaderCell1.setBorderWidthTop(1);
        PdfPCell HeaderCell2 = createCell(
                messageSource.getMessage("acc.ra.value", null, RequestContextUtils.getLocale(request)),
                FontContext.SMALL_TEXT, Element.ALIGN_RIGHT, 0, 5);
        HeaderCell2.setBorderWidthBottom(1);
        HeaderCell2.setBorderWidthTop(1);

        PdfPCell HeaderCell3 = createCell(
                messageSource.getMessage("acc.ra.principalRatios", null,
                        RequestContextUtils.getLocale(request)),
                FontContext.SMALL_TEXT, Element.ALIGN_LEFT, 0, 5);
        HeaderCell3.setBorderWidthBottom(1);
        HeaderCell3.setBorderWidthTop(1);
        HeaderCell3.setBorderWidthLeft(1);
        PdfPCell HeaderCell4 = createCell(
                messageSource.getMessage("acc.ra.value", null, RequestContextUtils.getLocale(request)),
                FontContext.SMALL_TEXT, Element.ALIGN_RIGHT, 0, 5);
        HeaderCell4.setBorderWidthBottom(1);
        HeaderCell4.setBorderWidthRight(1);
        HeaderCell4.setBorderWidthTop(1);
        table1.addCell(HeaderCell1);
        table1.addCell(HeaderCell2);
        table1.addCell(HeaderCell3);
        table1.addCell(HeaderCell4);
        PdfPCell objCell1 = null;
        PdfPCell objCell2 = null;
        PdfPCell objCell3 = null;
        PdfPCell objCell4 = null;
        int objArrLength = ObjArr.length();
        for (int i = 0; i < objArrLength; i++) {
            JSONObject leftObj = ObjArr.getJSONObject(i);
            objCell1 = createBalanceSheetCell(leftObj.getString("lname"), FontContext.TABLE_DATA,
                    Element.ALIGN_LEFT, 0, 5, 0);
            objCell2 = createBalanceSheetCell(leftObj.getString("lvalue"), FontContext.TABLE_DATA,
                    Element.ALIGN_RIGHT, 0, 0, 0);
            objCell3 = createBalanceSheetCell(leftObj.getString("rname"), FontContext.TABLE_DATA,
                    Element.ALIGN_LEFT, 0, 5, 0);
            objCell4 = createBalanceSheetCell(leftObj.getString("rvalue"), FontContext.TABLE_DATA,
                    Element.ALIGN_RIGHT, 0, 0, 0);
            objCell1.setBorderWidthLeft(1);
            objCell3.setBorderWidthLeft(1);
            objCell4.setBorderWidthRight(1);
            if (i != (objArrLength - 1)) {
                table1.addCell(objCell1);
                table1.addCell(objCell2);
                table1.addCell(objCell3);
                table1.addCell(objCell4);
            }
        }
        objCell1.setBorderWidthBottom(1);
        objCell2.setBorderWidthBottom(1);
        objCell3.setBorderWidthBottom(1);
        objCell4.setBorderWidthBottom(1);
        table1.addCell(objCell1);
        table1.addCell(objCell2);
        table1.addCell(objCell3);
        table1.addCell(objCell4);

        PdfPCell mainCell11 = new PdfPCell(table1);
        mainCell11.setBorder(0);
        mainCell11.setPadding(10);
        mainTable.addCell(mainCell11);

        document.add(mainTable);
    } catch (Exception ex) {
        return null;
    } finally {
        if (document != null) {
            document.close();
        }
        if (writer != null) {
            writer.close();
        }
        if (baos != null) {
            baos.close();
        }
    }
    return baos;
}

From source file:com.krawler.spring.exportFuctionality.ExportRecord.java

License:Open Source License

public ByteArrayOutputStream exportBalanceSheetPdf(HttpServletRequest request, String currencyid,
        DateFormat formatter, String logoPath, String comName, JSONObject jobj, Date startDate, Date endDate,
        int flag, int toggle) throws DocumentException, ServiceException, IOException {
    ByteArrayOutputStream baos = null;
    double total = 0;
    Document document = null;/*from  ww w.j  ava 2  s .co m*/
    PdfWriter writer = null;
    try {
        //flag 1 = BalanceSheet , 2 = P&L

        String headingString = "";
        String DateheadingString = "";
        String value = "";
        String subHeading1 = "";
        String subHeading2 = "";
        if (flag == 1) {
            headingString = messageSource.getMessage("acc.rem.123", null,
                    RequestContextUtils.getLocale(request)); //"Balance Sheet For : ";
            DateheadingString = messageSource.getMessage("acc.rem.124", null,
                    RequestContextUtils.getLocale(request)); //"Balance Sheet Till :";
            value = formatter.format(endDate);
            subHeading1 = messageSource.getMessage("acc.balanceSheet.Amount(asset)", null,
                    RequestContextUtils.getLocale(request)); //"Asset";
            subHeading2 = messageSource.getMessage("acc.balanceSheet.Amount(liability)", null,
                    RequestContextUtils.getLocale(request)); //"Liability";
            if (toggle == 1) {
                subHeading1 = messageSource.getMessage("acc.balanceSheet.Amount(liability)", null,
                        RequestContextUtils.getLocale(request)); //"Liability";
                subHeading2 = messageSource.getMessage("acc.balanceSheet.Amount(asset)", null,
                        RequestContextUtils.getLocale(request)); //"Asset";
            }
        } else {
            headingString = messageSource.getMessage("acc.rem.125", null,
                    RequestContextUtils.getLocale(request)); // "P&L Statement For : ";
            DateheadingString = messageSource.getMessage("acc.rem.126", null,
                    RequestContextUtils.getLocale(request)); // "P&L Statement From-To :";
            value = formatter.format(startDate) + " "
                    + messageSource.getMessage("acc.common.to", null, RequestContextUtils.getLocale(request))
                    + " " + formatter.format(endDate);
            subHeading1 = messageSource.getMessage("acc.P&L.Amount(Debit)", null,
                    RequestContextUtils.getLocale(request)); //"Debit";
            subHeading2 = messageSource.getMessage("acc.P&L.Amount(Credit)", null,
                    RequestContextUtils.getLocale(request)); //"Credit";
        }
        baos = new ByteArrayOutputStream();
        document = new Document(PageSize.A4, 15, 15, 15, 15);
        writer = PdfWriter.getInstance(document, baos);
        document.open();
        PdfPTable mainTable = new PdfPTable(1);
        mainTable.setWidthPercentage(100);

        PdfPTable tab1 = null;
        Rectangle page = document.getPageSize();

        int bmargin = 15; //border margin
        PdfContentByte cb = writer.getDirectContent();
        cb.rectangle(bmargin, bmargin, page.getWidth() - bmargin * 2, page.getHeight() - bmargin * 2);
        cb.setColorStroke(Color.WHITE);
        cb.stroke();

        //            addHeaderFooter(document, writer);

        PdfPTable table1 = new PdfPTable(3);
        table1.setWidthPercentage(100);
        table1.setWidths(new float[] { 30, 30, 40 });

        PdfPCell blankCell = new PdfPCell();
        blankCell.setBorder(0);
        tab1 = addCompanyLogo(logoPath, comName);
        PdfPCell cell1 = new PdfPCell(tab1);
        cell1.setBorder(0);
        table1.addCell(cell1);
        table1.addCell(blankCell);
        table1.addCell(blankCell);

        PdfPCell headerCell = createCell(headingString, FontContext.TABLE_DATA, Element.ALIGN_LEFT, 0, 5);
        headerCell.setBorder(0);
        table1.addCell(headerCell);
        PdfPCell headerNameCell = createCell(comName, FontContext.TABLE_DATA, Element.ALIGN_LEFT, 0, 5);
        headerNameCell.setBorder(0);
        table1.addCell(headerNameCell);
        table1.addCell(blankCell);

        headerCell = createCell(DateheadingString, FontContext.TABLE_DATA, Element.ALIGN_LEFT, 0, 5);
        headerCell.setBorder(0);
        table1.addCell(headerCell);
        headerNameCell = createCell(value, FontContext.TABLE_DATA, Element.ALIGN_LEFT, 0, 5);
        headerNameCell.setBorder(0);
        table1.addCell(headerNameCell);
        table1.addCell(blankCell);

        table1.addCell(blankCell);
        table1.addCell(blankCell);
        table1.addCell(blankCell);

        jobj = jobj.getJSONObject("data");
        JSONArray rightObjArr = flag == 1 ? jobj.getJSONArray("right") : jobj.getJSONArray("left");
        JSONArray leftObjArr = flag == 1 ? jobj.getJSONArray("left") : jobj.getJSONArray("right");
        if (toggle == 1) {
            rightObjArr = jobj.getJSONArray("left");
            leftObjArr = jobj.getJSONArray("right");
        }
        JSONArray finalValArr = jobj.getJSONArray("total");
        PdfPCell HeaderCell1 = createCell(
                messageSource.getMessage("acc.P&L.particulars", null, RequestContextUtils.getLocale(request)),
                FontContext.TABLE_DATA, Element.ALIGN_LEFT, 0, 5);
        HeaderCell1.setBorderWidthBottom(1);
        PdfPCell HeaderCell2 = createCell(subHeading1, FontContext.TABLE_DATA, Element.ALIGN_LEFT, 0, 5);
        HeaderCell2.setBorderWidthBottom(1);
        table1.addCell(HeaderCell1);
        table1.addCell(HeaderCell2);
        table1.addCell(blankCell);
        double totalAsset = Double.parseDouble(finalValArr.getString(0));
        double totalLibility = Double.parseDouble(finalValArr.getString(1));
        for (int i = 0; i < rightObjArr.length(); i++) {
            JSONObject leftObj = rightObjArr.getJSONObject(i);
            addBalanceSheetCell(leftObj, table1, currencyid);
            //                PdfPCell cell3 = createCell(leftObj.get("accountname").toString(), fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            //                PdfPCell cell4 = createCell(com.krawler.common.util.StringUtil.serverHTMLStripper(leftObj.get("amount").toString()), fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            //                cell3.setBorder(0);
            //                table1.addCell(cell3);
            //                cell4.setBorder(0);
            //                table1.addCell(cell4);
        }
        PdfPCell totalAsscell = createBalanceSheetCell(
                messageSource.getMessage("acc.common.total", null, RequestContextUtils.getLocale(request)) + " "
                        + subHeading1,
                FontContext.TABLE_DATA, Element.ALIGN_LEFT, 0, 0, 0);
        table1.addCell(totalAsscell);
        PdfPCell totalAssValcell = createBalanceSheetCell(
                exportDaoObj.currencyRender(Double.toString(totalAsset), currencyid), fontSmallBold,
                Element.ALIGN_RIGHT, 0, 0, 0);
        table1.addCell(totalAssValcell);
        for (int i = 0; i < 16; i++)
            table1.addCell(blankCell);

        HeaderCell1 = createCell(
                messageSource.getMessage("acc.balanceSheet.particulars", null,
                        RequestContextUtils.getLocale(request)),
                FontContext.TABLE_DATA, Element.ALIGN_LEFT, 0, 5);
        HeaderCell1.setBorderWidthBottom(1);
        HeaderCell2 = createCell(subHeading2, FontContext.TABLE_DATA, Element.ALIGN_LEFT, 0, 5);
        HeaderCell2.setBorderWidthBottom(1);
        table1.addCell(HeaderCell1);
        table1.addCell(HeaderCell2);
        table1.addCell(blankCell);

        for (int i = 0; i < leftObjArr.length(); i++) {
            JSONObject leftObj = leftObjArr.getJSONObject(i);
            addBalanceSheetCell(leftObj, table1, currencyid);
            //                PdfPCell cell3 = createCell(leftObj.get("accountname").toString(), fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            //                PdfPCell cell4 = createCell(com.krawler.common.util.StringUtil.serverHTMLStripper(leftObj.get("amount").toString()), fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            //                cell3.setBorder(0);
            //                table1.addCell(cell3);
            //                cell4.setBorder(0);
            //                table1.addCell(cell4);
        }
        PdfPCell totalLibcell = createBalanceSheetCell(
                messageSource.getMessage("acc.common.total", null, RequestContextUtils.getLocale(request)) + " "
                        + subHeading2,
                FontContext.TABLE_DATA, Element.ALIGN_LEFT, 0, 0, 0);
        table1.addCell(totalLibcell);
        PdfPCell totalLibValcell = createBalanceSheetCell(
                exportDaoObj.currencyRender(Double.toString(totalLibility), currencyid), FontContext.TABLE_DATA,
                Element.ALIGN_RIGHT, 0, 0, 0);
        table1.addCell(totalLibValcell);
        table1.addCell(blankCell);

        PdfPCell mainCell11 = new PdfPCell(table1);
        mainCell11.setBorder(0);
        mainCell11.setPadding(10);
        mainTable.addCell(mainCell11);

        //            document.add(mainTable);
        document.add(mainTable);
    } catch (Exception ex) {
        return null;
    } finally {
        if (document != null) {
            document.close();
        }
        if (writer != null) {
            writer.close();
        }
        if (baos != null) {
            baos.close();
        }
    }
    return baos;
}

From source file:com.krawler.spring.exportFuctionality.ExportRecord.java

License:Open Source License

public ByteArrayOutputStream createPdf(HttpServletRequest request, String currencyid, String billid,
        DateFormat formatter, int mode, double amount, String logoPath, String customer, String accname,
        String address, boolean isExpenseInv) throws DocumentException, ServiceException, IOException {
    ByteArrayOutputStream baos = null;
    double total = 0;
    Document document = null;/*from  ww  w.  jav a 2s . c o m*/
    PdfWriter writer = null;
    try {
        String poRefno = "";
        baos = new ByteArrayOutputStream();
        document = new Document(PageSize.A4, 15, 15, 15, 15);
        writer = PdfWriter.getInstance(document, baos);
        document.open();
        PdfPTable mainTable = new PdfPTable(1);
        mainTable.setWidthPercentage(100);

        PdfPTable blankTable = null;
        PdfPCell blankCell = null;
        PdfPTable tab1 = null;
        PdfPTable tab2 = null;
        PdfPTable tab3 = null;
        Rectangle page = document.getPageSize();

        int bmargin = 15; //border margin
        PdfContentByte cb = writer.getDirectContent();
        cb.rectangle(bmargin, bmargin, page.getWidth() - bmargin * 2, page.getHeight() - bmargin * 2);
        cb.setColorStroke(Color.WHITE);
        cb.stroke();

        if (mode == StaticValues.AUTONUM_INVOICE || mode == StaticValues.AUTONUM_BILLINGINVOICE
                || mode == StaticValues.AUTONUM_BILLINGSALESORDER
                || mode == StaticValues.AUTONUM_BILLINGPURCHASEORDER || mode == StaticValues.AUTONUM_SALESORDER
                || mode == StaticValues.AUTONUM_PURCHASEORDER || mode == StaticValues.AUTONUM_QUOTATION) {
            addHeaderFooter(document, writer);
            Invoice inv = null;
            BillingInvoice inv1 = null;
            BillingSalesOrder so = null;
            Company com = null;
            Account cEntry;
            String invno = "";
            Date entryDate = null;
            BillingPurchaseOrder po = null;
            SalesOrder sOrder = null;
            PurchaseOrder pOrder = null;
            Tax mainTax = null;
            Quotation quotation = null;
            if (mode == StaticValues.AUTONUM_INVOICE) {
                KwlReturnObject cap = kwlCommonTablesDAOObj.getObject(Invoice.class.getName(), billid);
                inv = (Invoice) cap.getEntityList().get(0);
                com = inv.getCompany();
                cEntry = inv.getCustomerEntry().getAccount();
                invno = inv.getInvoiceNumber();
                entryDate = inv.getJournalEntry().getEntryDate();
                //inv = (Invoice) session.get(Invoice.class, billid);
            } else if (mode == StaticValues.AUTONUM_BILLINGSALESORDER) {
                so = (BillingSalesOrder) kwlCommonTablesDAOObj.getClassObject(BillingSalesOrder.class.getName(),
                        billid);
                com = so.getCompany();
                cEntry = so.getCustomer().getAccount();
                invno = so.getSalesOrderNumber();
                entryDate = so.getOrderDate();
                mainTax = so.getTax();
            } else if (mode == StaticValues.AUTONUM_BILLINGPURCHASEORDER) {
                po = (BillingPurchaseOrder) kwlCommonTablesDAOObj
                        .getClassObject(BillingPurchaseOrder.class.getName(), billid);
                com = po.getCompany();
                cEntry = po.getVendor().getAccount();
                invno = po.getPurchaseOrderNumber();
                entryDate = po.getOrderDate();
                mainTax = po.getTax();
            } else if (mode == StaticValues.AUTONUM_SALESORDER) {
                sOrder = (SalesOrder) kwlCommonTablesDAOObj.getClassObject(SalesOrder.class.getName(), billid);
                com = sOrder.getCompany();
                cEntry = sOrder.getCustomer().getAccount();
                invno = sOrder.getSalesOrderNumber();
                entryDate = sOrder.getOrderDate();
                mainTax = sOrder.getTax();

            } else if (mode == StaticValues.AUTONUM_PURCHASEORDER) {
                pOrder = (PurchaseOrder) kwlCommonTablesDAOObj.getClassObject(PurchaseOrder.class.getName(),
                        billid);
                com = pOrder.getCompany();
                cEntry = pOrder.getVendor().getAccount();
                invno = pOrder.getPurchaseOrderNumber();
                entryDate = pOrder.getOrderDate();
                mainTax = pOrder.getTax();

            } else if (mode == StaticValues.AUTONUM_QUOTATION) {
                quotation = (Quotation) kwlCommonTablesDAOObj.getClassObject(Quotation.class.getName(), billid);
                com = quotation.getCompany();
                cEntry = quotation.getCustomer().getAccount();
                invno = quotation.getquotationNumber();
                entryDate = quotation.getQuotationDate();
                mainTax = quotation.getTax();

            } else {
                KwlReturnObject cap = kwlCommonTablesDAOObj.getObject(BillingInvoice.class.getName(), billid);
                inv1 = (BillingInvoice) cap.getEntityList().get(0);
                com = inv1.getCompany();
                cEntry = inv1.getCustomerEntry().getAccount();
                invno = inv1.getBillingInvoiceNumber();
                entryDate = inv1.getJournalEntry().getEntryDate();
                poRefno = inv1.getPoRefNumber() == null ? "" : inv1.getPoRefNumber();
                mainTax = inv1.getTax();
                //inv1=(BillingInvoice)session.get(BillingInvoice.class,billid);
            }

            //                Company com = mode != StaticValues.AUTONUM_BILLINGINVOICE ? inv.getCompany() : inv1.getCompany();
            String company[] = new String[4];
            company[0] = com.getCompanyName();
            company[1] = com.getAddress();
            company[2] = com.getEmailID();
            company[3] = com.getPhoneNumber();

            PdfPTable table1 = new PdfPTable(2);
            table1.setWidthPercentage(100);
            table1.setWidths(new float[] { 50, 50 });

            tab1 = addCompanyLogo(logoPath, com);
            tab2 = new PdfPTable(1);
            PdfPCell invCell = null;

            CompanyAccountPreferences pref = (CompanyAccountPreferences) kwlCommonTablesDAOObj
                    .getClassObject(CompanyAccountPreferences.class.getName(), com.getCompanyID());
            Account cash = pref.getCashAccount();
            //
            //                if (mode != StaticValues.AUTONUM_BILLINGINVOICE) {
            //                    cEntry = inv.getCustomerEntry().getAccount();
            //                } else {
            //                    cEntry = inv1.getCustomerEntry().getAccount();
            //                }
            String theader = cEntry == cash
                    ? messageSource.getMessage("acc.accPref.autoCS", null,
                            RequestContextUtils.getLocale(request))
                    : messageSource.getMessage("acc.accPref.autoInvoice", null,
                            RequestContextUtils.getLocale(request));
            if (mode == StaticValues.AUTONUM_BILLINGSALESORDER || mode == StaticValues.AUTONUM_SALESORDER) {
                theader = messageSource.getMessage("acc.accPref.autoSO", null,
                        RequestContextUtils.getLocale(request));
            } else if (mode == StaticValues.AUTONUM_BILLINGPURCHASEORDER
                    || mode == StaticValues.AUTONUM_PURCHASEORDER) {
                theader = messageSource.getMessage("acc.accPref.autoPO", null,
                        RequestContextUtils.getLocale(request));
            } else if (mode == StaticValues.AUTONUM_QUOTATION) {
                theader = messageSource.getMessage("acc.accPref.autoQN", null,
                        RequestContextUtils.getLocale(request));
            }
            invCell = createCell(theader, fontTbl, Element.ALIGN_RIGHT, 0, 5);
            tab2.addCell(invCell);

            PdfPCell cell1 = new PdfPCell(tab1);
            cell1.setBorder(0);
            table1.addCell(cell1);
            PdfPCell cel2 = new PdfPCell(tab2);
            cel2.setBorder(0);
            table1.addCell(cel2);

            PdfPCell mainCell11 = new PdfPCell(table1);
            mainCell11.setBorder(0);
            mainCell11.setPadding(10);
            mainTable.addCell(mainCell11);

            PdfPTable userTable2 = new PdfPTable(2);
            userTable2.setWidthPercentage(100);
            userTable2.setWidths(new float[] { 60, 40 });

            tab3 = getCompanyInfo(company);

            PdfPTable tab4 = new PdfPTable(2);
            tab4.setWidthPercentage(100);
            tab4.setWidths(new float[] { 50, 50 });

            PdfPCell cell2 = createCell(theader + "# :", fontSmallBold, Element.ALIGN_RIGHT, 0, 5);
            if (mode == StaticValues.AUTONUM_QUOTATION) {
                cell2 = createCell(theader + "# :", fontSmallBold, Element.ALIGN_RIGHT, 0, 5);
            }
            tab4.addCell(cell2);
            //                String invno = mode != StaticValues.AUTONUM_BILLINGINVOICE ? inv.getInvoiceNumber() : inv1.getBillingInvoiceNumber();
            cell2 = createCell(invno, fontSmallRegular, Element.ALIGN_LEFT, 0, 5);
            tab4.addCell(cell2);
            if (mode != StaticValues.AUTONUM_QUOTATION && mode != StaticValues.AUTONUM_PURCHASEORDER
                    && mode != StaticValues.AUTONUM_SALESORDER) {
                cell2 = createCell(
                        messageSource.getMessage("acc.numb.43", null, RequestContextUtils.getLocale(request))
                                + " # :",
                        fontSmallBold, Element.ALIGN_RIGHT, 0, 5);
                tab4.addCell(cell2);
                cell2 = createCell(poRefno, fontSmallRegular, Element.ALIGN_LEFT, 0, 5);
                tab4.addCell(cell2);
            }

            cell2 = createCell(
                    messageSource.getMessage("acc.rem.198", null, RequestContextUtils.getLocale(request))
                            + " :",
                    fontSmallBold, Element.ALIGN_RIGHT, 0, 5);
            tab4.addCell(cell2);
            cell2 = createCell(formatter.format(entryDate), fontSmallRegular, Element.ALIGN_LEFT, 0, 5);
            tab4.addCell(cell2);

            cell1 = new PdfPCell(tab3);
            cell1.setBorder(0);
            userTable2.addCell(cell1);
            cel2 = new PdfPCell(tab4);
            cel2.setBorder(0);
            userTable2.addCell(cel2);

            PdfPCell mainCell12 = new PdfPCell(userTable2);
            mainCell12.setBorder(0);
            mainCell12.setPadding(10);
            mainTable.addCell(mainCell12);

            PdfPTable tab5 = new PdfPTable(2);
            tab5.setWidthPercentage(100);
            tab5.setWidths(new float[] { 10, 90 });
            PdfPCell cell3 = createCell(
                    messageSource.getMessage("acc.common.to", null, RequestContextUtils.getLocale(request))
                            + " , ",
                    fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            tab5.addCell(cell3);
            cell3 = createCell("", fontSmallBold, Element.ALIGN_LEFT, 0, 0);
            tab5.addCell(cell3);
            cell3 = createCell("", fontSmallBold, Element.ALIGN_LEFT, 0, 0);
            tab5.addCell(cell3);

            HashMap<String, Object> invRequestParams = new HashMap<String, Object>();
            ArrayList filter_names = new ArrayList(), filter_params = new ArrayList(),
                    order_by = new ArrayList(), order_type = new ArrayList();
            order_by.add("srno");
            order_type.add("asc");
            invRequestParams.put("order_by", order_by);
            invRequestParams.put("order_type", order_type);
            KwlReturnObject idresult = null;

            String customerName = "";
            String shipTo = "";
            String memo = "";
            Iterator itr = null;
            if (mode == StaticValues.AUTONUM_INVOICE) {
                filter_names.add("invoice.ID");
                filter_params.add(inv.getID());
                invRequestParams.put("filter_names", filter_names);
                invRequestParams.put("filter_params", filter_params);
                idresult = accInvoiceDAOobj.getInvoiceDetails(invRequestParams);
                customerName = inv.getCustomer() == null ? inv.getCustomerEntry().getAccount().getName()
                        : inv.getCustomer().getName();
                shipTo = inv.getShipTo();
                itr = idresult.getEntityList().iterator();
                memo = inv.getMemo();
            } else if (mode == StaticValues.AUTONUM_BILLINGSALESORDER) {
                customerName = so.getCustomer().getName();
                shipTo = so.getCustomer().getShippingAddress();
                filter_names.add("salesOrder.ID");
                filter_params.add(so.getID());
                invRequestParams.put("filter_names", filter_names);
                invRequestParams.put("filter_params", filter_params);
                idresult = accSalesOrderDAOobj.getBillingSalesOrderDetails(invRequestParams);
                itr = idresult.getEntityList().iterator();
                memo = so.getMemo();
            } else if (mode == StaticValues.AUTONUM_BILLINGPURCHASEORDER) {
                customerName = po.getVendor().getName();
                shipTo = po.getVendor().getAddress();
                filter_names.add("purchaseOrder.ID");
                filter_params.add(po.getID());
                invRequestParams.put("filter_names", filter_names);
                invRequestParams.put("filter_params", filter_params);
                idresult = accPurchaseOrderobj.getBillingPurchaseOrderDetails(invRequestParams);
                itr = idresult.getEntityList().iterator();
                memo = po.getMemo();
            } else if (mode == StaticValues.AUTONUM_SALESORDER) {
                customerName = sOrder.getCustomer().getName();
                shipTo = sOrder.getCustomer().getShippingAddress();
                filter_names.add("salesOrder.ID");
                filter_params.add(sOrder.getID());
                invRequestParams.put("filter_names", filter_names);
                invRequestParams.put("filter_params", filter_params);
                idresult = accSalesOrderDAOobj.getSalesOrderDetails(invRequestParams);
                itr = idresult.getEntityList().iterator();
                memo = sOrder.getMemo();
            } else if (mode == StaticValues.AUTONUM_PURCHASEORDER) {
                customerName = pOrder.getVendor().getName();
                shipTo = pOrder.getVendor().getAddress();
                filter_names.add("purchaseOrder.ID");
                filter_params.add(pOrder.getID());
                invRequestParams.put("filter_names", filter_names);
                invRequestParams.put("filter_params", filter_params);
                idresult = accPurchaseOrderobj.getPurchaseOrderDetails(invRequestParams);
                itr = idresult.getEntityList().iterator();
                memo = pOrder.getMemo();
            } else if (mode == StaticValues.AUTONUM_QUOTATION) {
                customerName = quotation.getCustomer().getName();
                shipTo = quotation.getCustomer().getShippingAddress();
                filter_names.add("quotation.ID");
                filter_params.add(quotation.getID());
                invRequestParams.put("filter_names", filter_names);
                invRequestParams.put("filter_params", filter_params);
                idresult = accSalesOrderDAOobj.getQuotationDetails(invRequestParams);
                itr = idresult.getEntityList().iterator();
                memo = quotation.getMemo();
            } else {
                filter_names.add("billingInvoice.ID");
                filter_params.add(inv1.getID());
                invRequestParams.put("filter_names", filter_names);
                invRequestParams.put("filter_params", filter_params);
                idresult = accInvoiceDAOobj.getBillingInvoiceDetails(invRequestParams);
                customerName = inv1.getCustomer() == null ? inv1.getCustomerEntry().getAccount().getName()
                        : inv1.getCustomer().getName();
                shipTo = inv1.getShipTo();
                itr = idresult.getEntityList().iterator();
                memo = inv1.getMemo();
            }
            cell3 = createCell(customerName, fontSmallRegular, Element.ALIGN_LEFT, 0, 5);
            tab5.addCell(cell3);
            cell3 = createCell("", fontSmallBold, Element.ALIGN_LEFT, 0, 0);
            tab5.addCell(cell3);
            cell3 = createCell(shipTo, fontSmallRegular, Element.ALIGN_LEFT, 0, 5);
            tab5.addCell(cell3);

            PdfPCell mainCell14 = new PdfPCell(tab5);
            mainCell14.setBorder(0);
            mainCell14.setPadding(10);
            mainTable.addCell(mainCell14);

            //                if(mode == StaticValues.AUTONUM_QUOTATION)
            //                   String[] header = {"S.No.","PRODUCT DESCRIPTION", "QUANTITY", "UNIT PRICE", "TAX", "AMOUNT"};

            String[] header = {
                    messageSource.getMessage("acc.setupWizard.sno", null,
                            RequestContextUtils.getLocale(request)),
                    messageSource.getMessage("acc.rem.176", null, RequestContextUtils.getLocale(request)),
                    messageSource.getMessage("acc.rem.187", null, RequestContextUtils.getLocale(request)),
                    messageSource.getMessage("acc.rem.188", null, RequestContextUtils.getLocale(request)),
                    messageSource.getMessage("acc.rem.191", null, RequestContextUtils.getLocale(request)),
                    messageSource.getMessage("acc.rem.192", null, RequestContextUtils.getLocale(request)),
                    messageSource.getMessage("acc.rem.193", null, RequestContextUtils.getLocale(request)) };
            PdfPTable table = getBlankTable();
            PdfPCell invcell = null;
            for (int i = 0; i < header.length; i++) {
                invcell = new PdfPCell(new Paragraph(header[i], fontSmallBold));
                invcell.setHorizontalAlignment(Element.ALIGN_CENTER);
                invcell.setBackgroundColor(Color.LIGHT_GRAY);
                invCell.setBorder(0);
                invcell.setPadding(3);
                table.addCell(invcell);
            }

            addTableRow(mainTable, table); //Break table after adding header row
            table = getBlankTable();

            HashMap<String, Object> requestParams = AccountingManager.getGlobalParams(request);
            KwlReturnObject bAmt = null;
            InvoiceDetail row = null;
            BillingInvoiceDetail row1 = null;
            BillingSalesOrderDetail row3 = null;
            BillingPurchaseOrderDetail row4 = null;
            SalesOrderDetail row5 = null;
            PurchaseOrderDetail row6 = null;
            QuotationDetail row7 = null;
            int index = 0;
            while (itr.hasNext()) {
                String prodName = "";
                double quantity = 0, discountQuotation = 0;
                double rate = 0;
                Discount discount = null;
                String uom = "";
                double amount1 = 0;
                if (mode == StaticValues.AUTONUM_INVOICE) {
                    row = (InvoiceDetail) itr.next();
                    prodName = row.getInventory().getProduct().getName();
                    quantity = row.getInventory().getQuantity();
                    rate = row.getRate();
                    discount = row.getDiscount();
                    uom = row.getInventory().getProduct().getUnitOfMeasure() == null ? ""
                            : row.getInventory().getProduct().getUnitOfMeasure().getName();
                } else if (mode == StaticValues.AUTONUM_BILLINGSALESORDER) {
                    row3 = (BillingSalesOrderDetail) itr.next();
                    prodName = row3.getProductDetail();
                    quantity = row3.getQuantity();
                    rate = row3.getRate();
                } else if (mode == StaticValues.AUTONUM_BILLINGPURCHASEORDER) {
                    row4 = (BillingPurchaseOrderDetail) itr.next();
                    prodName = row4.getProductDetail();
                    quantity = row4.getQuantity();
                    rate = row4.getRate();
                } else if (mode == StaticValues.AUTONUM_SALESORDER) {
                    row5 = (SalesOrderDetail) itr.next();
                    prodName = row5.getProduct().getName();
                    quantity = row5.getQuantity();
                    rate = row5.getRate();
                    uom = row5.getProduct().getUnitOfMeasure() == null ? ""
                            : row5.getProduct().getUnitOfMeasure().getName();
                } else if (mode == StaticValues.AUTONUM_PURCHASEORDER) {
                    row6 = (PurchaseOrderDetail) itr.next();
                    prodName = row6.getProduct().getName();
                    quantity = row6.getQuantity();
                    rate = row6.getRate();
                    uom = row6.getProduct().getUnitOfMeasure() == null ? ""
                            : row6.getProduct().getUnitOfMeasure().getName();
                } else if (mode == StaticValues.AUTONUM_QUOTATION) {
                    row7 = (QuotationDetail) itr.next();
                    prodName = row7.getProduct().getName();
                    quantity = row7.getQuantity();
                    rate = row7.getRate();
                    discountQuotation = rate * quantity * row7.getDiscount() / 100;
                    uom = row7.getProduct().getUnitOfMeasure() == null ? ""
                            : row7.getProduct().getUnitOfMeasure().getName();
                } else {
                    row1 = (BillingInvoiceDetail) itr.next();
                    prodName = row1.getProductDetail();
                    quantity = row1.getQuantity();
                    rate = row1.getRate();
                    discount = row1.getDiscount() != null ? row1.getDiscount() : null;
                    //                        uom = row1.getInventory().getProduct().getUnitOfMeasure()==null?"":row1.getInventory().getProduct().getUnitOfMeasure().getName();
                }
                invcell = createCell((++index) + ".", fontSmallRegular, Element.ALIGN_RIGHT,
                        Rectangle.LEFT + Rectangle.RIGHT, 5);
                table.addCell(invcell);
                invcell = createCell(prodName, fontSmallRegular, Element.ALIGN_LEFT,
                        Rectangle.LEFT + Rectangle.RIGHT, 5);
                table.addCell(invcell);

                String qtyStr = Double.toString(quantity);
                if (mode == StaticValues.AUTONUM_INVOICE || mode == StaticValues.AUTONUM_SALESORDER
                        || mode == StaticValues.AUTONUM_PURCHASEORDER
                        || mode == StaticValues.AUTONUM_QUOTATION) {
                    qtyStr = Integer.toString((int) quantity); //For with-Inventory flow, Don't show decimal point as inventory has integer value
                }
                invcell = createCell(qtyStr + " " + uom, fontSmallRegular, Element.ALIGN_CENTER,
                        Rectangle.LEFT + Rectangle.RIGHT, 5);
                table.addCell(invcell);
                if (mode == StaticValues.AUTONUM_PURCHASEORDER || mode == StaticValues.AUTONUM_SALESORDER
                        || mode == StaticValues.AUTONUM_QUOTATION) {
                    bAmt = accCurrencyobj.getBaseToCurrencyAmount(requestParams, rate,
                            cEntry.getCurrency().getCurrencyID(), entryDate, 0);
                    double rateInBase = (Double) bAmt.getEntityList().get(0);
                    rate = rateInBase;
                }
                invcell = createCell(authHandlerDAOObj.getFormattedCurrency(rate, currencyid), fontSmallRegular,
                        Element.ALIGN_RIGHT, Rectangle.LEFT + Rectangle.RIGHT, 5);
                table.addCell(invcell);
                if (mode == StaticValues.AUTONUM_QUOTATION)
                    invcell = calculateDiscount(discountQuotation, currencyid);
                else
                    invcell = calculateDiscount(discount, currencyid);
                invcell.setHorizontalAlignment(Element.ALIGN_RIGHT);
                invcell.setPadding(5);
                invcell.setBorder(Rectangle.LEFT + Rectangle.RIGHT);
                table.addCell(invcell);

                amount1 = rate * quantity;
                if (discount != null) {
                    amount1 -= mode != StaticValues.AUTONUM_BILLINGINVOICE
                            ? (row.getDiscount().getDiscountValue())
                            : (row1.getDiscount().getDiscountValue());
                }
                if (discountQuotation != 0) {
                    amount1 -= discountQuotation;
                }
                double rowTaxPercent = 0;
                if (row != null && row.getTax() != null) {
                    requestParams.put("transactiondate", entryDate);
                    requestParams.put("taxid", row.getTax().getID());
                    KwlReturnObject result = accTaxObj.getTax(requestParams);
                    List taxList = result.getEntityList();
                    Object[] taxObj = (Object[]) taxList.get(0);
                    rowTaxPercent = taxObj[1] == null ? 0 : (Double) taxObj[1];
                } else if (row1 != null && row1.getTax() != null) {
                    requestParams.put("transactiondate", entryDate);
                    requestParams.put("taxid", row1.getTax().getID());
                    KwlReturnObject result = accTaxObj.getTax(requestParams);
                    List taxList = result.getEntityList();
                    Object[] taxObj = (Object[]) taxList.get(0);
                    rowTaxPercent = taxObj[1] == null ? 0 : (Double) taxObj[1];
                } else if (row3 != null && row3.getTax() != null) {
                    requestParams.put("transactiondate", entryDate);
                    requestParams.put("taxid", row3.getTax().getID());
                    KwlReturnObject result = accTaxObj.getTax(requestParams);
                    List taxList = result.getEntityList();
                    Object[] taxObj = (Object[]) taxList.get(0);
                    rowTaxPercent = taxObj[1] == null ? 0 : (Double) taxObj[1];
                } else if (row4 != null && row4.getTax() != null) {
                    requestParams.put("transactiondate", entryDate);
                    requestParams.put("taxid", row4.getTax().getID());
                    KwlReturnObject result = accTaxObj.getTax(requestParams);
                    List taxList = result.getEntityList();
                    Object[] taxObj = (Object[]) taxList.get(0);
                    rowTaxPercent = taxObj[1] == null ? 0 : (Double) taxObj[1];
                } else if (row5 != null && row5.getTax() != null) {
                    requestParams.put("transactiondate", entryDate);
                    requestParams.put("taxid", row5.getTax().getID());
                    KwlReturnObject result = accTaxObj.getTax(requestParams);
                    List taxList = result.getEntityList();
                    Object[] taxObj = (Object[]) taxList.get(0);
                    rowTaxPercent = taxObj[1] == null ? 0 : (Double) taxObj[1];
                } else if (row6 != null && row6.getTax() != null) {
                    requestParams.put("transactiondate", entryDate);
                    requestParams.put("taxid", row6.getTax().getID());
                    KwlReturnObject result = accTaxObj.getTax(requestParams);
                    List taxList = result.getEntityList();
                    Object[] taxObj = (Object[]) taxList.get(0);
                    rowTaxPercent = taxObj[1] == null ? 0 : (Double) taxObj[1];
                } else if (row7 != null && row7.getTax() != null) {
                    requestParams.put("transactiondate", entryDate);
                    requestParams.put("taxid", row7.getTax().getID());
                    KwlReturnObject result = accTaxObj.getTax(requestParams);
                    List taxList = result.getEntityList();
                    Object[] taxObj = (Object[]) taxList.get(0);
                    rowTaxPercent = taxObj[1] == null ? 0 : (Double) taxObj[1];
                }
                invcell = createCell(
                        authHandlerDAOObj.getFormattedCurrency(amount1 * rowTaxPercent / 100, currencyid),
                        fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.LEFT + Rectangle.RIGHT, 5);
                table.addCell(invcell);
                amount1 += amount1 * rowTaxPercent / 100;
                invcell = createCell(authHandlerDAOObj.getFormattedCurrency(amount1, currencyid),
                        fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.LEFT + Rectangle.RIGHT, 5);
                table.addCell(invcell);
                total += amount1;

                addTableRow(mainTable, table); //Break table after adding detail's row
                table = getBlankTable();
            }
            for (int j = 0; j < 98; j++) {
                invcell = new PdfPCell(new Paragraph("", fontSmallRegular));
                invcell.setHorizontalAlignment(Element.ALIGN_CENTER);
                invcell.setBorder(Rectangle.LEFT + Rectangle.RIGHT);
                table.addCell(invcell);
            }
            addTableRow(mainTable, table); //Break table after adding extra space
            table = getBlankTable();
            //                for (int i = 0; i < 5; i++) {
            //                    invcell = new PdfPCell(new Paragraph("", fontSmallRegular));
            //                    invcell.setHorizontalAlignment(Element.ALIGN_CENTER);
            //                    invcell.setBorder(Rectangle.TOP);
            //                    table.addCell(invcell);
            //                }
            cell3 = createCell(
                    messageSource.getMessage("acc.rem.194", null, RequestContextUtils.getLocale(request)),
                    fontSmallBold, Element.ALIGN_RIGHT, Rectangle.TOP, 5);
            cell3.setColspan(6);
            table.addCell(cell3);
            //                if(mode == StaticValues.AUTONUM_INVOICE || mode==StaticValues.AUTONUM_PURCHASEORDER || mode==StaticValues.AUTONUM_SALESORDER){
            //                    bAmt = accCurrencyobj.getBaseToCurrencyAmount(requestParams, total, cEntry.getCurrency().getCurrencyID(), entryDate, 0);
            //                    double baseTotalAmount = (Double) bAmt.getEntityList().get(0);
            //                    total = baseTotalAmount;
            //                }
            cell3 = createCell(authHandlerDAOObj.getFormattedCurrency(total, currencyid), fontSmallRegular,
                    Element.ALIGN_RIGHT, 15, 5);
            table.addCell(cell3);
            //                for (int i = 0; i < 5; i++) {
            //                    invcell = new PdfPCell(new Paragraph("", fontSmallRegular));
            //                    invcell.setHorizontalAlignment(Element.ALIGN_CENTER);
            //                    invcell.setPadding(5);
            //                    invcell.setBorder(0);
            //                    table.addCell(invcell);
            //                }
            Discount totalDiscount = null;
            double totaltax = 0, discountTotalQuotation = 0;
            double totalAmount = 0;
            double taxPercent = 0;
            if (mainTax != null) { //Get tax percent
                requestParams.put("transactiondate", entryDate);
                requestParams.put("taxid", mainTax.getID());
                KwlReturnObject result = accTaxObj.getTax(requestParams);
                List taxList = result.getEntityList();
                Object[] taxObj = (Object[]) taxList.get(0);
                taxPercent = taxObj[1] == null ? 0 : (Double) taxObj[1];
            }

            if (mode == StaticValues.AUTONUM_INVOICE) {
                totalDiscount = inv.getDiscount();
                totaltax = inv.getTaxEntry() != null ? inv.getTaxEntry().getAmount() : 0;
                totalAmount = inv.getCustomerEntry().getAmount();
            } else if (mode == StaticValues.AUTONUM_BILLINGSALESORDER
                    || mode == StaticValues.AUTONUM_BILLINGPURCHASEORDER
                    || mode == StaticValues.AUTONUM_PURCHASEORDER || mode == StaticValues.AUTONUM_SALESORDER
                    || mode == StaticValues.AUTONUM_QUOTATION) {
                totalAmount = total;
                if (mode == StaticValues.AUTONUM_QUOTATION && quotation.getDiscount() != 0) {
                    if (!quotation.isPerDiscount()) {
                        discountTotalQuotation = quotation.getDiscount();
                        total = total - quotation.getDiscount();
                        totalAmount = total;
                    } else {
                        discountTotalQuotation = total * quotation.getDiscount() / 100;
                        total -= (total * quotation.getDiscount() / 100);
                        totalAmount = total;
                    }
                }
                totaltax = (taxPercent == 0 ? 0 : totalAmount * taxPercent / 100);
                totalAmount = total + totaltax;
            } else {
                totalDiscount = inv1.getDiscount();
                totaltax = inv1.getTaxEntry() != null ? inv1.getTaxEntry().getAmount() : 0;
                totalAmount = (inv1.getCustomerEntry().getAmount());
            }
            if (mode != StaticValues.AUTONUM_PURCHASEORDER || mode != StaticValues.AUTONUM_SALESORDER) {
                cell3 = createCell(
                        messageSource.getMessage("acc.rem.195", null, RequestContextUtils.getLocale(request)),
                        fontSmallBold, Element.ALIGN_RIGHT, 0, 5);
                cell3.setColspan(6);
                table.addCell(cell3);
                if (mode == StaticValues.AUTONUM_QUOTATION)
                    invcell = calculateDiscount(discountTotalQuotation, currencyid);
                else
                    invcell = calculateDiscount(totalDiscount, currencyid);
                invcell.setHorizontalAlignment(Element.ALIGN_RIGHT);
                invcell.setPadding(5);
                table.addCell(invcell);
            }
            //                for (int i = 0; i < 5; i++) {
            //                    invcell = new PdfPCell(new Paragraph("", fontSmallRegular));
            //                    invcell.setHorizontalAlignment(Element.ALIGN_CENTER);
            //                    invcell.setPadding(5);
            //                    invcell.setBorder(0);
            //                    table.addCell(invcell);
            //                }
            StringBuffer taxNameStr = new StringBuffer();
            if (mainTax != null) {
                taxNameStr.append(mainTax.getName());
                taxNameStr.append(" ");
                taxNameStr.append(taxPercent);
                taxNameStr.append("% (+)");
            } else {
                taxNameStr.append(
                        messageSource.getMessage("acc.rem.196", null, RequestContextUtils.getLocale(request)));
            }
            cell3 = createCell(taxNameStr.toString(), fontSmallBold, Element.ALIGN_RIGHT, 0, 5);
            cell3.setColspan(6);
            table.addCell(cell3);
            cell3 = createCell(authHandlerDAOObj.getFormattedCurrency(totaltax, currencyid), fontSmallRegular,
                    Element.ALIGN_RIGHT, 15, 5);
            table.addCell(cell3);
            //                for (int i = 0; i < 5; i++) {
            //                    invcell = new PdfPCell(new Paragraph("", fontSmallRegular));
            //                    invcell.setHorizontalAlignment(Element.ALIGN_CENTER);
            //                    invcell.setPadding(5);
            //                    invcell.setBorder(0);
            //                    table.addCell(invcell);
            //                }
            cell3 = createCell(
                    messageSource.getMessage("acc.rem.197", null, RequestContextUtils.getLocale(request)),
                    fontSmallBold, Element.ALIGN_RIGHT, 0, 5);
            cell3.setColspan(6);
            table.addCell(cell3);
            cell3 = createCell(authHandlerDAOObj.getFormattedCurrency(totalAmount, currencyid),
                    fontSmallRegular, Element.ALIGN_RIGHT, 15, 5);
            table.addCell(cell3);

            addTableRow(mainTable, table);

            KWLCurrency currency = (KWLCurrency) kwlCommonTablesDAOObj
                    .getClassObject(KWLCurrency.class.getName(), currencyid);
            String netinword = EnglishNumberToWordsOjb.convert(Double.parseDouble(String.valueOf(totalAmount)),
                    currency);
            String currencyname = currency.getName();
            cell3 = createCell(
                    messageSource.getMessage("acc.rem.177", null, RequestContextUtils.getLocale(request))
                            + " : " + currencyname + " " + netinword + " Only.",
                    fontSmallRegular, Element.ALIGN_LEFT,
                    Rectangle.LEFT + Rectangle.RIGHT + Rectangle.BOTTOM + Rectangle.TOP, 5);
            PdfPTable table2 = new PdfPTable(1);
            table2.addCell(cell3);
            PdfPCell mainCell62 = new PdfPCell(table2);
            mainCell62.setBorder(0);
            mainCell62.setPadding(10);
            mainTable.addCell(mainCell62);
            PdfPTable helpTable = new PdfPTable(new float[] { 8, 92 });
            helpTable.setWidthPercentage(100);
            Phrase phrase1 = new Phrase(
                    messageSource.getMessage("acc.common.memo", null, RequestContextUtils.getLocale(request))
                            + ":  ",
                    fontSmallBold);
            Phrase phrase2 = new Phrase(memo, fontSmallRegular);
            PdfPCell pcell1 = new PdfPCell(phrase1);
            PdfPCell pcell2 = new PdfPCell(phrase2);
            pcell1.setBorder(0);
            pcell1.setPadding(10);
            pcell1.setPaddingRight(0);
            pcell2.setBorder(0);
            pcell2.setPadding(10);
            helpTable.addCell(pcell1);
            helpTable.addCell(pcell2);

            PdfPCell mainCell61 = new PdfPCell(helpTable);
            mainCell61.setBorder(0);
            mainTable.addCell(mainCell61);

        } else if (mode == StaticValues.AUTONUM_DEBITNOTE || mode == StaticValues.AUTONUM_CREDITNOTE
                || mode == StaticValues.AUTONUM_BILLINGCREDITNOTE
                || mode == StaticValues.AUTONUM_BILLINGDEBITNOTE) {
            addHeaderFooter(document, writer);

            CreditNote creNote = null;
            DebitNote dbNote = null;
            BillingCreditNote biCreNote = null;
            BillingDebitNote biDeNote = null;
            Company com = null;
            Account cEntry = null;
            String invno = "";
            Date entryDate = null;
            Customer customerObj = null;
            Vendor vendorObj = null;
            double taxMain = 0;

            if (mode == StaticValues.AUTONUM_BILLINGCREDITNOTE) {
                KwlReturnObject cap = kwlCommonTablesDAOObj.getObject(BillingCreditNote.class.getName(),
                        billid);
                biCreNote = (BillingCreditNote) cap.getEntityList().get(0);
                Set<JournalEntryDetail> entryset = biCreNote.getJournalEntry().getDetails();
                customerObj = new Customer();
                Iterator itr = entryset.iterator();
                while (itr.hasNext()) {
                    cEntry = ((JournalEntryDetail) itr.next()).getAccount();
                    //                    customer=(Customer)session.get(Customer.class,acc.getID());
                    customerObj = (Customer) kwlCommonTablesDAOObj.getClassObject(Customer.class.getName(),
                            cEntry.getID());
                    if (customerObj != null)
                        break;
                }
                com = biCreNote.getCompany();
                invno = biCreNote.getCreditNoteNumber();
                entryDate = biCreNote.getJournalEntry().getEntryDate();
            } else if (mode == StaticValues.AUTONUM_BILLINGDEBITNOTE) {
                KwlReturnObject cap = kwlCommonTablesDAOObj.getObject(BillingDebitNote.class.getName(), billid);
                biDeNote = (BillingDebitNote) cap.getEntityList().get(0);
                //                    dbNote = (BillingDebitNote) kwlCommonTablesDAOObj.getClassObject(BillingDebitNote.class.getName(), billid);
                com = biDeNote.getCompany();
                Set<JournalEntryDetail> entryset = biDeNote.getJournalEntry().getDetails();
                vendorObj = new Vendor();
                Iterator itr = entryset.iterator();
                while (itr.hasNext()) {
                    cEntry = ((JournalEntryDetail) itr.next()).getAccount();
                    //                    vendor=(Vendor)session.get(Vendor.class,acc.getID());
                    vendorObj = (Vendor) kwlCommonTablesDAOObj.getClassObject(Vendor.class.getName(),
                            cEntry.getID());
                    if (vendorObj != null)
                        break;
                }
                invno = biDeNote.getDebitNoteNumber();
                entryDate = biDeNote.getJournalEntry().getEntryDate();
            }
            if (mode == StaticValues.AUTONUM_CREDITNOTE) {
                KwlReturnObject cap = kwlCommonTablesDAOObj.getObject(CreditNote.class.getName(), billid);
                creNote = (CreditNote) cap.getEntityList().get(0);
                Set<JournalEntryDetail> entryset = creNote.getJournalEntry().getDetails();
                customerObj = new Customer();
                Iterator itr = entryset.iterator();
                while (itr.hasNext()) {
                    cEntry = ((JournalEntryDetail) itr.next()).getAccount();
                    //                    customer=(Customer)session.get(Customer.class,acc.getID());
                    customerObj = (Customer) kwlCommonTablesDAOObj.getClassObject(Customer.class.getName(),
                            cEntry.getID());
                    if (customerObj != null)
                        break;
                }
                com = creNote.getCompany();
                invno = creNote.getCreditNoteNumber();
                entryDate = creNote.getJournalEntry().getEntryDate();
                //inv = (Invoice) session.get(Invoice.class, billid);
            } else if (mode == StaticValues.AUTONUM_DEBITNOTE) {
                KwlReturnObject cap = kwlCommonTablesDAOObj.getObject(DebitNote.class.getName(), billid);
                dbNote = (DebitNote) cap.getEntityList().get(0);
                //                    dbNote = (BillingDebitNote) kwlCommonTablesDAOObj.getClassObject(BillingDebitNote.class.getName(), billid);
                com = dbNote.getCompany();
                Set<JournalEntryDetail> entryset = dbNote.getJournalEntry().getDetails();
                vendorObj = new Vendor();
                Iterator itr = entryset.iterator();
                while (itr.hasNext()) {
                    cEntry = ((JournalEntryDetail) itr.next()).getAccount();
                    //                    vendor=(Vendor)session.get(Vendor.class,acc.getID());
                    vendorObj = (Vendor) kwlCommonTablesDAOObj.getClassObject(Vendor.class.getName(),
                            cEntry.getID());
                    if (vendorObj != null)
                        break;
                }
                invno = dbNote.getDebitNoteNumber();
                entryDate = dbNote.getJournalEntry().getEntryDate();
            }

            //                Company com = mode != StaticValues.AUTONUM_BILLINGINVOICE ? inv.getCompany() : inv1.getCompany();
            String company[] = new String[4];
            company[0] = com.getCompanyName();
            company[1] = com.getAddress();
            company[2] = com.getEmailID();
            company[3] = com.getPhoneNumber();

            PdfPTable table1 = new PdfPTable(2);
            table1.setWidthPercentage(100);
            table1.setWidths(new float[] { 50, 50 });

            tab1 = addCompanyLogo(logoPath, com);
            tab2 = new PdfPTable(1);
            PdfPCell invCell = null;

            CompanyAccountPreferences pref = (CompanyAccountPreferences) kwlCommonTablesDAOObj
                    .getClassObject(CompanyAccountPreferences.class.getName(), com.getCompanyID());
            Account cash = pref.getCashAccount();
            //
            //                if (mode != StaticValues.AUTONUM_BILLINGINVOICE) {
            //                    cEntry = inv.getCustomerEntry().getAccount();
            //                } else {
            //                    cEntry = inv1.getCustomerEntry().getAccount();
            //                }
            String theader = "";
            if (mode == StaticValues.AUTONUM_CREDITNOTE || mode == StaticValues.AUTONUM_BILLINGCREDITNOTE) {
                theader = messageSource.getMessage("acc.accPref.autoCN", null,
                        RequestContextUtils.getLocale(request));
            } else if (mode == StaticValues.AUTONUM_DEBITNOTE
                    || mode == StaticValues.AUTONUM_BILLINGDEBITNOTE) {
                theader = messageSource.getMessage("acc.accPref.autoDN", null,
                        RequestContextUtils.getLocale(request));
            }
            invCell = createCell(theader, fontTbl, Element.ALIGN_RIGHT, 0, 5);
            tab2.addCell(invCell);

            PdfPCell cell1 = new PdfPCell(tab1);
            cell1.setBorder(0);
            table1.addCell(cell1);
            PdfPCell cel2 = new PdfPCell(tab2);
            cel2.setBorder(0);
            table1.addCell(cel2);

            PdfPCell mainCell11 = new PdfPCell(table1);
            mainCell11.setBorder(0);
            mainCell11.setPadding(10);
            mainTable.addCell(mainCell11);

            PdfPTable userTable2 = new PdfPTable(2);
            userTable2.setWidthPercentage(100);
            userTable2.setWidths(new float[] { 60, 40 });

            tab3 = getCompanyInfo(company);

            PdfPTable tab4 = new PdfPTable(2);
            tab4.setWidthPercentage(100);
            tab4.setWidths(new float[] { 30, 70 });

            PdfPCell cell2 = createCell(theader + " #", fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            tab4.addCell(cell2);
            //                String invno = mode != StaticValues.AUTONUM_BILLINGINVOICE ? inv.getInvoiceNumber() : inv1.getBillingInvoiceNumber();
            cell2 = createCell(": " + invno, fontSmallRegular, Element.ALIGN_LEFT, 0, 5);
            tab4.addCell(cell2);
            cell2 = createCell(
                    messageSource.getMessage("acc.rem.198", null, RequestContextUtils.getLocale(request)) + " ",
                    fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            tab4.addCell(cell2);
            cell2 = createCell(": " + formatter.format(entryDate), fontSmallRegular, Element.ALIGN_LEFT, 0, 5);
            tab4.addCell(cell2);

            cell1 = new PdfPCell(tab3);
            cell1.setBorder(0);
            userTable2.addCell(cell1);
            cel2 = new PdfPCell(tab4);
            cel2.setBorder(0);
            userTable2.addCell(cel2);

            PdfPCell mainCell12 = new PdfPCell(userTable2);
            mainCell12.setBorder(0);
            mainCell12.setPadding(10);
            mainTable.addCell(mainCell12);

            PdfPTable tab5 = new PdfPTable(2);
            tab5.setWidthPercentage(100);
            tab5.setWidths(new float[] { 10, 90 });
            PdfPCell cell3 = createCell(
                    messageSource.getMessage("acc.common.to", null, RequestContextUtils.getLocale(request))
                            + " , ",
                    fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            tab5.addCell(cell3);
            cell3 = createCell("", fontSmallBold, Element.ALIGN_LEFT, 0, 0);
            tab5.addCell(cell3);
            cell3 = createCell("", fontSmallBold, Element.ALIGN_LEFT, 0, 0);
            tab5.addCell(cell3);

            String customerName = "";
            String shipTo = "";
            String memo = "";
            Iterator itr = null;

            HashMap<String, Object> invRequestParams = new HashMap<String, Object>();
            ArrayList filter_names = new ArrayList(), filter_params = new ArrayList(),
                    order_by = new ArrayList(), order_type = new ArrayList();
            order_by.add("srno");
            order_type.add("asc");
            invRequestParams.put("order_by", order_by);
            invRequestParams.put("order_type", order_type);
            KwlReturnObject idresult = null;

            if (mode == StaticValues.AUTONUM_BILLINGCREDITNOTE) {
                customerName = customerObj.getName();//inv.getCustomer()==null?inv.getCustomerEntry().getAccount().getName():inv.getCustomer().getName();
                shipTo = customerObj.getBillingAddress();//inv.getShipTo();
                filter_names.add("creditNote.ID");
                filter_params.add(biCreNote.getID());
                invRequestParams.put("filter_names", filter_names);
                invRequestParams.put("filter_params", filter_params);
                idresult = accCreditNoteDAOobj.getBillingCreditNoteDetails(invRequestParams);
                itr = idresult.getEntityList().iterator();
                memo = biCreNote.getMemo();
            } else if (mode == StaticValues.AUTONUM_BILLINGDEBITNOTE) {
                customerName = vendorObj.getName();//dbNote.getCustomer().getName();
                shipTo = vendorObj.getAddress();
                filter_names.add("debitNote.ID");
                filter_params.add(biDeNote.getID());
                invRequestParams.put("filter_names", filter_names);
                invRequestParams.put("filter_params", filter_params);
                idresult = accDebitNoteobj.getBillingDebitNoteDetails(invRequestParams);
                itr = idresult.getEntityList().iterator();
                memo = biDeNote.getMemo();
            } else if (mode == StaticValues.AUTONUM_CREDITNOTE) {
                customerName = customerObj.getName();//inv.getCustomer()==null?inv.getCustomerEntry().getAccount().getName():inv.getCustomer().getName();
                shipTo = customerObj.getBillingAddress();//inv.getShipTo();
                filter_names.add("creditNote.ID");
                filter_params.add(creNote.getID());
                invRequestParams.put("filter_names", filter_names);
                invRequestParams.put("filter_params", filter_params);
                idresult = accCreditNoteDAOobj.getCreditNoteDetails(invRequestParams);
                itr = idresult.getEntityList().iterator();
                memo = creNote.getMemo();
            } else if (mode == StaticValues.AUTONUM_DEBITNOTE) {
                customerName = vendorObj.getName();//dbNote.getCustomer().getName();
                shipTo = vendorObj.getAddress();
                filter_names.add("debitNote.ID");
                filter_params.add(dbNote.getID());
                invRequestParams.put("filter_names", filter_names);
                invRequestParams.put("filter_params", filter_params);
                idresult = accDebitNoteobj.getDebitNoteDetails(invRequestParams);
                itr = idresult.getEntityList().iterator();
                memo = dbNote.getMemo();
            }
            cell3 = createCell(customerName, fontSmallRegular, Element.ALIGN_LEFT, 0, 5);
            tab5.addCell(cell3);
            cell3 = createCell("", fontSmallBold, Element.ALIGN_LEFT, 0, 0);
            tab5.addCell(cell3);
            cell3 = createCell(shipTo, fontSmallRegular, Element.ALIGN_LEFT, 0, 5);
            tab5.addCell(cell3);

            PdfPCell mainCell14 = new PdfPCell(tab5);
            mainCell14.setBorder(0);
            mainCell14.setPadding(10);
            mainTable.addCell(mainCell14);

            String[] header = {
                    messageSource.getMessage("acc.cnList.Sno", null, RequestContextUtils.getLocale(request)),
                    messageSource.getMessage("acc.rem.190", null, RequestContextUtils.getLocale(request)),
                    messageSource.getMessage("acc.rem.187", null, RequestContextUtils.getLocale(request)),
                    messageSource.getMessage("acc.rem.193", null, RequestContextUtils.getLocale(request)) };
            PdfPTable table = new PdfPTable(4);
            table.setWidthPercentage(100);
            table.setWidths(new float[] { 7, 35, 29, 29 });
            PdfPCell invcell = null;
            for (int i = 0; i < header.length; i++) {
                invcell = new PdfPCell(new Paragraph(header[i], fontSmallBold));
                invcell.setHorizontalAlignment(Element.ALIGN_CENTER);
                invcell.setBackgroundColor(Color.LIGHT_GRAY);
                invCell.setBorder(0);
                invcell.setPadding(3);
                table.addCell(invcell);
            }

            //                Iterator itr = mode != StaticValues.AUTONUM_BILLINGINVOICE ? inv.getRows().iterator() : inv1.getRows().iterator();
            CreditNoteDetail row = null;
            DebitNoteDetail row1 = null;
            BillingCreditNoteDetail row2 = null;
            BillingDebitNoteDetail row3 = null;
            int index = 0;
            while (itr.hasNext()) {
                String prodName = "";
                double quantity = 0;
                Discount discount = null;
                String uom = "";
                double amount1 = 0;
                if (mode == StaticValues.AUTONUM_CREDITNOTE) {
                    row = (CreditNoteDetail) itr.next();
                    prodName = row.getInvoiceRow().getInventory().getProduct().getName();
                    quantity = row.getQuantity();
                    discount = row.getDiscount();
                    taxMain = taxMain + row.getTaxAmount();
                    total = total + row.getTaxAmount();
                    try {
                        uom = row.getInvoiceRow().getInventory().getProduct().getUnitOfMeasure() == null ? ""
                                : row.getInvoiceRow().getInventory().getProduct().getUnitOfMeasure().getName();
                    } catch (Exception ex) {//In case of exception use uom="";
                    }
                } else if (mode == StaticValues.AUTONUM_DEBITNOTE) {
                    row1 = (DebitNoteDetail) itr.next();
                    prodName = row1.getGoodsReceiptRow().getInventory().getProduct().getName();
                    quantity = row1.getQuantity();
                    discount = row1.getDiscount();
                    taxMain = taxMain + row1.getTaxAmount();
                    total = total + row1.getTaxAmount();
                    try {
                        uom = row1.getGoodsReceiptRow().getInventory().getProduct().getUnitOfMeasure() == null
                                ? ""
                                : row1.getGoodsReceiptRow().getInventory().getProduct().getUnitOfMeasure()
                                        .getName();
                    } catch (Exception ex) {//In case of exception use uom="";
                    }
                } else if (mode == StaticValues.AUTONUM_BILLINGCREDITNOTE) {
                    row2 = (BillingCreditNoteDetail) itr.next();
                    prodName = row2.getInvoiceRow().getProductDetail();
                    quantity = row2.getQuantity();
                    discount = row2.getDiscount();
                    taxMain = taxMain + row2.getTaxAmount();
                    total = total + row2.getTaxAmount();
                } else if (mode == StaticValues.AUTONUM_BILLINGDEBITNOTE) {
                    row3 = (BillingDebitNoteDetail) itr.next();
                    prodName = row3.getGoodsReceiptRow().getProductDetail();
                    quantity = row3.getQuantity();
                    discount = row3.getDiscount();
                    taxMain = taxMain + row3.getTaxAmount();
                    total = total + row3.getTaxAmount();
                }

                invcell = createCell((++index) + ".", fontSmallRegular, Element.ALIGN_RIGHT,
                        Rectangle.LEFT + Rectangle.RIGHT, 5);
                table.addCell(invcell);
                invcell = createCell(prodName, fontSmallRegular, Element.ALIGN_LEFT,
                        Rectangle.LEFT + Rectangle.RIGHT, 5);
                table.addCell(invcell);
                invcell = createCell((int) quantity + " " + uom, fontSmallRegular, Element.ALIGN_CENTER,
                        Rectangle.LEFT + Rectangle.RIGHT, 5);
                table.addCell(invcell);
                invcell = calculateDiscount(discount, currencyid);
                invcell.setHorizontalAlignment(Element.ALIGN_RIGHT);
                invcell.setPadding(5);
                invcell.setBorder(Rectangle.LEFT + Rectangle.RIGHT);
                table.addCell(invcell);

                total += discount.getDiscountValue();
                //                    invcell = createCell(authHandlerDAOObj.getFormattedCurrency(amount1, currencyid), fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.LEFT + Rectangle.RIGHT, 5);
                //                    table.addCell(invcell);

            }
            //                for (int j = 0; j < 70; j++) {
            //                    invcell = new PdfPCell(new Paragraph("", fontSmallRegular));
            //                    invcell.setHorizontalAlignment(Element.ALIGN_CENTER);
            //                    invcell.setBorder(Rectangle.LEFT + Rectangle.RIGHT);
            //                    table.addCell(invcell);
            //                }
            //                for (int i = 0; i < 3; i++) {
            //                    invcell = new PdfPCell(new Paragraph("", fontSmallRegular));
            //                    invcell.setHorizontalAlignment(Element.ALIGN_CENTER);
            //                    invcell.setBorder(Rectangle.TOP);
            //                    table.addCell(invcell);
            //                }

            for (int i = 0; i < 2; i++) {
                invcell = new PdfPCell(new Paragraph("", fontSmallRegular));
                invcell.setHorizontalAlignment(Element.ALIGN_CENTER);
                invcell.setBorder(Rectangle.TOP);
                table.addCell(invcell);
            }

            cell3 = createCell(
                    messageSource.getMessage("acc.rem.192", null, RequestContextUtils.getLocale(request)),
                    fontSmallBold, Element.ALIGN_CENTER, Rectangle.TOP, 5);
            table.addCell(cell3);
            cell3 = createCell(authHandlerDAOObj.getFormattedCurrency(taxMain, currencyid), fontSmallRegular,
                    Element.ALIGN_RIGHT, 15, 5);
            table.addCell(cell3);

            for (int i = 0; i < 2; i++) {
                invcell = new PdfPCell(new Paragraph("", fontSmallRegular));
                invcell.setHorizontalAlignment(Element.ALIGN_CENTER);
                invcell.setBorder(0);
                table.addCell(invcell);
            }

            cell3 = createCell(
                    messageSource.getMessage("acc.rem.197", null, RequestContextUtils.getLocale(request)),
                    fontSmallBold, Element.ALIGN_CENTER, 0, 5);
            table.addCell(cell3);
            cell3 = createCell(authHandlerDAOObj.getFormattedCurrency(total, currencyid), fontSmallRegular,
                    Element.ALIGN_RIGHT, 15, 5);
            table.addCell(cell3);

            PdfPCell mainCell5 = new PdfPCell(table);
            mainCell5.setBorder(0);
            mainCell5.setPadding(10);
            mainTable.addCell(mainCell5);

            PdfPTable helpTable = new PdfPTable(new float[] { 8, 92 });
            helpTable.setWidthPercentage(100);
            Phrase phrase1 = new Phrase(
                    messageSource.getMessage("acc.common.memo", null, RequestContextUtils.getLocale(request))
                            + " : ",
                    fontSmallBold);
            Phrase phrase2 = new Phrase(memo, fontSmallRegular);
            PdfPCell pcell1 = new PdfPCell(phrase1);
            PdfPCell pcell2 = new PdfPCell(phrase2);
            pcell1.setBorder(0);
            pcell1.setPadding(10);
            pcell1.setPaddingRight(0);
            pcell2.setBorder(0);
            pcell2.setPadding(10);
            helpTable.addCell(pcell1);
            helpTable.addCell(pcell2);

            PdfPCell mainCell61 = new PdfPCell(helpTable);
            mainCell61.setBorder(0);
            mainTable.addCell(mainCell61);

        } else if (mode == StaticValues.AUTONUM_GOODSRECEIPT
                || mode == StaticValues.AUTONUM_BILLINGGOODSRECEIPT) {
            addHeaderFooter(document, writer);
            GoodsReceipt gr = null;
            BillingGoodsReceipt gr1 = null;
            if (mode == StaticValues.AUTONUM_GOODSRECEIPT) {
                gr = (GoodsReceipt) kwlCommonTablesDAOObj.getClassObject(GoodsReceipt.class.getName(), billid);
            } else {
                gr1 = (BillingGoodsReceipt) kwlCommonTablesDAOObj
                        .getClassObject(BillingGoodsReceipt.class.getName(), billid);
            }

            Company com = mode == StaticValues.AUTONUM_GOODSRECEIPT ? gr.getCompany() : gr1.getCompany();
            String company[] = new String[4];
            company[0] = com.getCompanyName();
            company[1] = com.getAddress();
            company[2] = com.getEmailID();
            company[3] = com.getPhoneNumber();

            KWLCurrency rowCurrency = (mode == StaticValues.AUTONUM_GOODSRECEIPT ? gr.getCurrency()
                    : gr1.getCurrency());
            String rowCurrenctID = rowCurrency == null ? currencyid : rowCurrency.getCurrencyID();

            PdfPTable table1 = new PdfPTable(2);
            table1.setWidthPercentage(100);
            table1.setWidths(new float[] { 50, 50 });

            tab1 = addCompanyLogo(logoPath, com);
            tab2 = new PdfPTable(1);
            PdfPCell invCell = null;

            CompanyAccountPreferences pref = (CompanyAccountPreferences) kwlCommonTablesDAOObj
                    .getClassObject(CompanyAccountPreferences.class.getName(), com.getCompanyID());
            Account cash = pref.getCashAccount();
            Account vEntry;
            if (mode == StaticValues.AUTONUM_GOODSRECEIPT) {
                vEntry = gr.getVendorEntry().getAccount();
            } else {
                vEntry = gr1.getVendorEntry().getAccount();
            }
            String theader = vEntry == cash
                    ? messageSource.getMessage("acc.accPref.autoCP", null,
                            RequestContextUtils.getLocale(request))
                    : messageSource.getMessage("acc.accPref.autoVI", null,
                            RequestContextUtils.getLocale(request));
            invCell = createCell(theader, fontTbl, Element.ALIGN_RIGHT, 0, 5);
            tab2.addCell(invCell);

            PdfPCell cell1 = new PdfPCell(tab1);
            cell1.setBorder(0);
            table1.addCell(cell1);
            PdfPCell cel2 = new PdfPCell(tab2);
            cel2.setBorder(0);
            table1.addCell(cel2);

            PdfPCell mainCell11 = new PdfPCell(table1);
            mainCell11.setBorder(0);
            mainTable.addCell(mainCell11);

            blankTable = addBlankLine(3);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);

            PdfPTable userTable2 = new PdfPTable(2);
            userTable2.setWidthPercentage(100);
            userTable2.setWidths(new float[] { 60, 40 });

            tab3 = getCompanyInfo(company);

            PdfPTable tab4 = new PdfPTable(2);
            tab4.setWidthPercentage(100);
            tab4.setWidths(new float[] { 30, 70 });

            PdfPCell cell2 = createCell(theader + " #", fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            tab4.addCell(cell2);
            String grno = mode == StaticValues.AUTONUM_GOODSRECEIPT ? gr.getGoodsReceiptNumber()
                    : gr1.getBillingGoodsReceiptNumber();
            cell2 = createCell(": " + grno, fontSmallRegular, Element.ALIGN_LEFT, 0, 5);
            tab4.addCell(cell2);
            cell2 = createCell(
                    messageSource.getMessage("acc.rem.198", null, RequestContextUtils.getLocale(request))
                            + "  ",
                    fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            tab4.addCell(cell2);
            cell2 = createCell(
                    ": " + formatter.format(
                            mode == StaticValues.AUTONUM_GOODSRECEIPT ? gr.getJournalEntry().getEntryDate()
                                    : gr1.getJournalEntry().getEntryDate()),
                    fontSmallRegular, Element.ALIGN_LEFT, 0, 5);
            tab4.addCell(cell2);

            cell1 = new PdfPCell(tab3);
            cell1.setBorder(0);
            userTable2.addCell(cell1);
            cel2 = new PdfPCell(tab4);
            cel2.setBorder(0);
            userTable2.addCell(cel2);

            PdfPCell mainCell12 = new PdfPCell(userTable2);
            mainCell12.setBorder(0);
            mainTable.addCell(mainCell12);

            blankTable = addBlankLine(3);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);

            PdfPTable tab5 = new PdfPTable(2);
            tab5.setWidthPercentage(100);
            tab5.setWidths(new float[] { 10, 90 });
            PdfPCell cell3 = createCell(
                    messageSource.getMessage("acc.common.from", null, RequestContextUtils.getLocale(request))
                            + " , ",
                    fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            tab5.addCell(cell3);
            cell3 = createCell("", fontSmallBold, Element.ALIGN_LEFT, 0, 0);
            tab5.addCell(cell3);
            cell3 = createCell("", fontSmallBold, Element.ALIGN_LEFT, 0, 0);
            tab5.addCell(cell3);

            String vendorName = "";
            if (mode == StaticValues.AUTONUM_GOODSRECEIPT) {
                vendorName = gr.getVendor() == null ? gr.getVendorEntry().getAccount().getName()
                        : gr.getVendor().getName();
            } else {
                vendorName = gr1.getVendor() == null ? gr1.getVendorEntry().getAccount().getName()
                        : gr1.getVendor().getName();
            }
            cell3 = createCell(vendorName, fontSmallRegular, Element.ALIGN_LEFT, 0, 5);
            tab5.addCell(cell3);
            cell3 = createCell("", fontSmallBold, Element.ALIGN_LEFT, 0, 0);
            tab5.addCell(cell3);
            cell3 = createCell(mode == StaticValues.AUTONUM_GOODSRECEIPT ? gr.getBillFrom() : gr1.getBillFrom(),
                    fontSmallRegular, Element.ALIGN_LEFT, 0, 5);
            tab5.addCell(cell3);

            PdfPCell mainCell14 = new PdfPCell(tab5);
            mainCell14.setBorder(0);
            mainTable.addCell(mainCell14);

            blankTable = addBlankLine(3);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);
            PdfPTable table;
            PdfPCell grcell = null;
            if (isExpenseInv) {
                String[] header = { "S.No.", "Account", "PRICE", "DISCOUNT", "TAX", "LINE TOTAL" };
                table = new PdfPTable(6);
                table.setWidthPercentage(100);
                table.setWidths(new float[] { 7, 23, 18, 18, 18, 16 });
                for (int i = 0; i < header.length; i++) {
                    grcell = new PdfPCell(new Paragraph(header[i], fontSmallBold));
                    grcell.setHorizontalAlignment(Element.ALIGN_CENTER);
                    grcell.setBackgroundColor(Color.LIGHT_GRAY);
                    grcell.setBorder(0);
                    grcell.setPadding(3);
                    table.addCell(grcell);
                }
            } else {

                String[] header = {
                        messageSource.getMessage("acc.cnList.Sno", null,
                                RequestContextUtils.getLocale(request)),
                        messageSource.getMessage("acc.rem.190", null, RequestContextUtils.getLocale(request)),
                        messageSource.getMessage("acc.rem.187", null, RequestContextUtils.getLocale(request)),
                        messageSource.getMessage("acc.rem.188", null, RequestContextUtils.getLocale(request)),
                        messageSource.getMessage("acc.rem.191", null, RequestContextUtils.getLocale(request)),
                        messageSource.getMessage("acc.rem.192", null, RequestContextUtils.getLocale(request)),
                        messageSource.getMessage("acc.rem.212", null, RequestContextUtils.getLocale(request)) };
                table = new PdfPTable(7);
                table.setWidthPercentage(100);
                table.setWidths(new float[] { 5, 20, 15, 15, 15, 13, 17 });
                for (int i = 0; i < header.length; i++) {
                    grcell = new PdfPCell(new Paragraph(header[i], fontSmallBold));
                    grcell.setHorizontalAlignment(Element.ALIGN_CENTER);
                    grcell.setBackgroundColor(Color.LIGHT_GRAY);
                    grcell.setBorder(0);
                    grcell.setPadding(3);
                    table.addCell(grcell);
                }
            }
            //                Iterator itr =mode==StaticValues.AUTONUM_GOODSRECEIPT?gr.getRows().iterator():gr1.getRows().iterator();
            HashMap<String, Object> grRequestParams = new HashMap<String, Object>();
            ArrayList filter_names = new ArrayList(), filter_params = new ArrayList(),
                    order_by = new ArrayList(), order_type = new ArrayList();
            order_by.add("srno");
            order_type.add("asc");
            grRequestParams.put("order_by", order_by);
            grRequestParams.put("order_type", order_type);

            KwlReturnObject idresult = null;
            if (mode != StaticValues.AUTONUM_BILLINGINVOICE
                    || mode != StaticValues.AUTONUM_BILLINGGOODSRECEIPT) {
                if (mode == StaticValues.AUTONUM_BILLINGGOODSRECEIPT) {
                    filter_names.add("billingGoodsReceipt.ID");
                    filter_params.add(gr1.getID());
                    grRequestParams.put("filter_names", filter_names);
                    grRequestParams.put("filter_params", filter_params);
                    idresult = accGoodsReceiptobj.getBillingGoodsReceiptDetails(grRequestParams);
                } else {
                    filter_names.add("goodsReceipt.ID");
                    filter_params.add(gr.getID());
                    grRequestParams.put("filter_names", filter_names);
                    grRequestParams.put("filter_params", filter_params);
                    if (isExpenseInv) {
                        idresult = accGoodsReceiptobj.getExpenseGRDetails(grRequestParams);
                    } else
                        idresult = accGoodsReceiptobj.getGoodsReceiptDetails(grRequestParams);
                }
            } else {
                filter_names.add("billingGoodsReceipt.ID");
                filter_params.add(gr.getID());
                grRequestParams.put("filter_names", filter_names);
                grRequestParams.put("filter_params", filter_params);
                idresult = accGoodsReceiptobj.getBillingGoodsReceiptDetails(grRequestParams);
            }
            Iterator itr = idresult.getEntityList().iterator();

            GoodsReceiptDetail row = null;
            BillingGoodsReceiptDetail row1 = null;
            ExpenseGRDetail exprow = null;
            int index = 0;
            while (itr.hasNext()) {
                if (mode == StaticValues.AUTONUM_GOODSRECEIPT) {
                    if (isExpenseInv)
                        exprow = (ExpenseGRDetail) itr.next();
                    else
                        row = (GoodsReceiptDetail) itr.next();
                } else {
                    row1 = (BillingGoodsReceiptDetail) itr.next();
                }
                if (isExpenseInv) {
                    grcell = createCell((++index) + ".", fontSmallRegular, Element.ALIGN_RIGHT,
                            Rectangle.LEFT + Rectangle.RIGHT, 5);
                    table.addCell(grcell);
                    grcell = createCell(exprow.getAccount().getName(), fontSmallRegular, Element.ALIGN_LEFT,
                            Rectangle.LEFT + Rectangle.RIGHT, 5);
                    table.addCell(grcell);
                    grcell = createCell(authHandlerDAOObj.getFormattedCurrency(exprow.getRate(), rowCurrenctID),
                            fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.LEFT + Rectangle.RIGHT, 5);
                    table.addCell(grcell);
                    grcell = calculateDiscount(exprow.getDiscount(), rowCurrenctID);
                    grcell.setHorizontalAlignment(Element.ALIGN_RIGHT);
                    grcell.setPadding(5);
                    grcell.setBorder(Rectangle.LEFT + Rectangle.RIGHT);
                    table.addCell(grcell);
                    double amount1 = exprow.getRate();
                    Discount disc = exprow.getDiscount();
                    if (disc != null) {
                        amount1 -= exprow.getDiscount().getDiscountValue();
                    }

                    double rowTaxPercent = 0;
                    HashMap<String, Object> requestParams = AccountingManager.getGlobalParams(request);
                    if (exprow != null && exprow.getTax() != null) {
                        requestParams.put("transactiondate",
                                exprow.getGoodsReceipt().getJournalEntry().getEntryDate());
                        requestParams.put("taxid", exprow.getTax().getID());
                        KwlReturnObject result = accTaxObj.getTax(requestParams);
                        List taxList = result.getEntityList();
                        Object[] taxObj = (Object[]) taxList.get(0);
                        rowTaxPercent = taxObj[1] == null ? 0 : (Double) taxObj[1];
                    }
                    grcell = createCell(
                            authHandlerDAOObj.getFormattedCurrency(amount1 * rowTaxPercent / 100,
                                    rowCurrenctID),
                            fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.LEFT + Rectangle.RIGHT, 5);
                    table.addCell(grcell);
                    amount1 += amount1 * rowTaxPercent / 100;
                    grcell = createCell(authHandlerDAOObj.getFormattedCurrency(amount1, rowCurrenctID),
                            fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.LEFT + Rectangle.RIGHT, 5);
                    table.addCell(grcell);
                    total += amount1;
                    for (int j = 0; j < 84; j++) {
                        grcell = new PdfPCell(new Paragraph("", fontSmallRegular));
                        grcell.setHorizontalAlignment(Element.ALIGN_CENTER);
                        grcell.setBorder(Rectangle.LEFT + Rectangle.RIGHT);
                        table.addCell(grcell);
                    }

                } else {
                    grcell = createCell((++index) + ".", fontSmallRegular, Element.ALIGN_RIGHT,
                            Rectangle.LEFT + Rectangle.RIGHT, 5);
                    table.addCell(grcell);
                    grcell = createCell(
                            mode == StaticValues.AUTONUM_GOODSRECEIPT
                                    ? row.getInventory().getProduct().getName()
                                    : row1.getProductDetail(),
                            fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
                    table.addCell(grcell);
                    grcell = createCell(
                            Double.toString(mode == StaticValues.AUTONUM_GOODSRECEIPT
                                    ? row.getInventory().getQuantity()
                                    : row1.getQuantity())
                                    + " "
                                    + (mode != StaticValues.AUTONUM_BILLINGGOODSRECEIPT
                                            ? (row.getInventory().getProduct().getUnitOfMeasure() == null ? ""
                                                    : row.getInventory().getProduct().getUnitOfMeasure()
                                                            .getName())
                                            : ""),
                            fontSmallRegular, Element.ALIGN_CENTER, Rectangle.LEFT + Rectangle.RIGHT, 5);
                    table.addCell(grcell);
                    grcell = createCell(
                            authHandlerDAOObj.getFormattedCurrency(
                                    mode == StaticValues.AUTONUM_GOODSRECEIPT ? row.getRate() : row1.getRate(),
                                    rowCurrenctID),
                            fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.LEFT + Rectangle.RIGHT, 5);
                    table.addCell(grcell);
                    grcell = calculateDiscount(
                            mode == StaticValues.AUTONUM_GOODSRECEIPT ? row.getDiscount() : row1.getDiscount(),
                            rowCurrenctID);
                    grcell.setHorizontalAlignment(Element.ALIGN_RIGHT);
                    grcell.setPadding(5);
                    grcell.setBorder(Rectangle.LEFT + Rectangle.RIGHT);
                    table.addCell(grcell);
                    double amount1 = mode == StaticValues.AUTONUM_GOODSRECEIPT
                            ? row.getRate() * row.getInventory().getQuantity()
                            : row1.getRate() * row1.getQuantity();
                    Discount disc = mode == StaticValues.AUTONUM_GOODSRECEIPT ? row.getDiscount()
                            : row1.getDiscount();
                    if (disc != null) {
                        amount1 -= mode == StaticValues.AUTONUM_GOODSRECEIPT
                                ? row.getDiscount().getDiscountValue()
                                : row1.getDiscount().getDiscountValue();
                    }

                    double rowTaxPercent = 0;
                    HashMap<String, Object> requestParams = AccountingManager.getGlobalParams(request);
                    if (row != null && row.getTax() != null) {
                        requestParams.put("transactiondate",
                                row.getGoodsReceipt().getJournalEntry().getEntryDate());
                        requestParams.put("taxid", row.getTax().getID());
                        KwlReturnObject result = accTaxObj.getTax(requestParams);
                        List taxList = result.getEntityList();
                        Object[] taxObj = (Object[]) taxList.get(0);
                        rowTaxPercent = taxObj[1] == null ? 0 : (Double) taxObj[1];
                    } else if (row1 != null && row1.getTax() != null) {
                        requestParams.put("transactiondate",
                                row1.getBillingGoodsReceipt().getJournalEntry().getEntryDate());
                        requestParams.put("taxid", row1.getTax().getID());
                        KwlReturnObject result = accTaxObj.getTax(requestParams);
                        List taxList = result.getEntityList();
                        Object[] taxObj = (Object[]) taxList.get(0);
                        rowTaxPercent = taxObj[1] == null ? 0 : (Double) taxObj[1];
                    }
                    grcell = createCell(
                            authHandlerDAOObj.getFormattedCurrency(amount1 * rowTaxPercent / 100,
                                    rowCurrenctID),
                            fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.LEFT + Rectangle.RIGHT, 5);
                    table.addCell(grcell);
                    amount1 += amount1 * rowTaxPercent / 100;
                    grcell = createCell(authHandlerDAOObj.getFormattedCurrency(amount1, rowCurrenctID),
                            fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.LEFT + Rectangle.RIGHT, 5);
                    table.addCell(grcell);
                    total += amount1;
                    for (int j = 0; j < 98; j++) {
                        grcell = new PdfPCell(new Paragraph("", fontSmallRegular));
                        grcell.setHorizontalAlignment(Element.ALIGN_CENTER);
                        grcell.setBorder(Rectangle.LEFT + Rectangle.RIGHT);
                        table.addCell(grcell);
                    }

                }
            }
            int length = isExpenseInv ? 4 : 5;
            for (int i = 0; i < length; i++) {
                grcell = new PdfPCell(new Paragraph("", fontSmallRegular));
                grcell.setHorizontalAlignment(Element.ALIGN_CENTER);
                grcell.setBorder(Rectangle.TOP);
                table.addCell(grcell);
            }
            cell3 = createCell(
                    messageSource.getMessage("acc.rem.194", null, RequestContextUtils.getLocale(request)),
                    fontSmallBold, Element.ALIGN_LEFT, Rectangle.TOP, 5);
            table.addCell(cell3);
            cell3 = createCell(authHandlerDAOObj.getFormattedCurrency(total, rowCurrenctID), fontSmallRegular,
                    Element.ALIGN_RIGHT, 15, 5);
            table.addCell(cell3);
            for (int i = 0; i < length; i++) {
                grcell = new PdfPCell(new Paragraph("", fontSmallRegular));
                grcell.setHorizontalAlignment(Element.ALIGN_CENTER);
                grcell.setPadding(5);
                grcell.setBorder(0);
                table.addCell(grcell);
            }
            cell3 = createCell(
                    messageSource.getMessage("acc.rem.195", null, RequestContextUtils.getLocale(request)),
                    fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            table.addCell(cell3);
            grcell = calculateDiscount(
                    mode == StaticValues.AUTONUM_GOODSRECEIPT ? gr.getDiscount() : gr1.getDiscount(),
                    rowCurrenctID);
            grcell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            grcell.setPadding(5);
            table.addCell(grcell);
            for (int i = 0; i < length; i++) {
                grcell = new PdfPCell(new Paragraph("", fontSmallRegular));
                grcell.setHorizontalAlignment(Element.ALIGN_CENTER);
                grcell.setPadding(5);
                grcell.setBorder(0);
                table.addCell(grcell);
            }
            cell3 = createCell(
                    messageSource.getMessage("acc.rem.196", null, RequestContextUtils.getLocale(request)),
                    fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            table.addCell(cell3);
            cell3 = createCell(
                    authHandlerDAOObj.getFormattedCurrency(
                            mode == StaticValues.AUTONUM_GOODSRECEIPT
                                    ? (gr.getTaxEntry() != null ? gr.getTaxEntry().getAmount() : 0)
                                    : (gr1.getTaxEntry() != null ? gr1.getTaxEntry().getAmount() : 0),
                            rowCurrenctID),
                    fontSmallRegular, Element.ALIGN_RIGHT, 15, 5);
            table.addCell(cell3);
            for (int i = 0; i < length; i++) {
                grcell = new PdfPCell(new Paragraph("", fontSmallRegular));
                grcell.setHorizontalAlignment(Element.ALIGN_CENTER);
                grcell.setPadding(5);
                grcell.setBorder(0);
                table.addCell(grcell);
            }
            cell3 = createCell(
                    messageSource.getMessage("acc.rem.197", null, RequestContextUtils.getLocale(request)),
                    fontSmallBold, Element.ALIGN_LEFT, 0, 5);
            table.addCell(cell3);
            cell3 = createCell(
                    authHandlerDAOObj.getFormattedCurrency(
                            mode == StaticValues.AUTONUM_GOODSRECEIPT ? (gr.getVendorEntry().getAmount())
                                    : (gr1.getVendorEntry().getAmount()),
                            rowCurrenctID),
                    fontSmallRegular, Element.ALIGN_RIGHT, 15, 5);
            table.addCell(cell3);

            PdfPCell mainCell5 = new PdfPCell(table);
            mainCell5.setBorder(0);
            mainTable.addCell(mainCell5);
            KWLCurrency currency = (KWLCurrency) kwlCommonTablesDAOObj
                    .getClassObject(KWLCurrency.class.getName(), currencyid);
            double totalamount = 0;
            if (gr != null)
                totalamount = gr.getVendorEntry().getAmount();
            else if (gr1 != null)
                totalamount = gr1.getVendorEntry().getAmount();
            String netinword = EnglishNumberToWordsOjb.convert(Double.parseDouble(String.valueOf(totalamount)),
                    currency);
            String currencyname = currency.getName();
            cell3 = createCell(
                    messageSource.getMessage("acc.rem.177", null, RequestContextUtils.getLocale(request))
                            + " : " + currencyname + " " + netinword + " Only.",
                    fontSmallRegular, Element.ALIGN_LEFT,
                    Rectangle.LEFT + Rectangle.RIGHT + Rectangle.BOTTOM + Rectangle.TOP, 5);
            PdfPTable table2 = new PdfPTable(1);
            table2.addCell(cell3);
            PdfPCell mainCell62 = new PdfPCell(table2);
            mainCell62.setBorder(0);
            mainTable.addCell(mainCell62);
            PdfPTable helpTable = new PdfPTable(new float[] { 8, 92 });
            helpTable.setWidthPercentage(100);
            Phrase phrase1 = new Phrase(
                    messageSource.getMessage("acc.common.memo", null, RequestContextUtils.getLocale(request))
                            + ":  ",
                    fontSmallBold);
            Phrase phrase2 = new Phrase(
                    mode == StaticValues.AUTONUM_GOODSRECEIPT ? gr.getMemo() : gr1.getMemo(), fontSmallRegular);
            PdfPCell pcell1 = new PdfPCell(phrase1);
            PdfPCell pcell2 = new PdfPCell(phrase2);
            pcell1.setBorder(0);
            pcell1.setPadding(10);
            pcell1.setPaddingRight(0);
            pcell2.setBorder(0);
            pcell2.setPadding(10);
            helpTable.addCell(pcell1);
            helpTable.addCell(pcell2);

            PdfPCell mainCell61 = new PdfPCell(helpTable);
            mainCell61.setBorder(0);
            mainTable.addCell(mainCell61);

        } else if (mode == StaticValues.AUTONUM_RECEIPT || mode == StaticValues.AUTONUM_BILLINGRECEIPT) {

            Receipt rc = null;
            BillingReceipt rc1 = null;
            if (mode != StaticValues.AUTONUM_BILLINGRECEIPT) {
                rc = (Receipt) kwlCommonTablesDAOObj.getClassObject(Receipt.class.getName(), billid);
            } else {
                rc1 = (BillingReceipt) kwlCommonTablesDAOObj.getClassObject(BillingReceipt.class.getName(),
                        billid);
            }

            KWLCurrency currency = (KWLCurrency) kwlCommonTablesDAOObj
                    .getClassObject(KWLCurrency.class.getName(), currencyid);
            Company com = mode != StaticValues.AUTONUM_BILLINGRECEIPT ? rc.getCompany() : rc1.getCompany();
            String company[] = new String[3];
            company[0] = com.getCompanyName();
            company[1] = com.getAddress();
            company[2] = com.getEmailID();

            PdfPTable table1 = new PdfPTable(2);
            table1.setWidthPercentage(100);
            table1.setWidths(new float[] { 25, 75 });

            tab1 = addCompanyLogo(logoPath, com);

            tab3 = new PdfPTable(1);
            tab3.setWidthPercentage(100);
            PdfPCell mainCell1 = null;
            mainCell1 = createCell(com.getCompanyName(), fontMediumBold, Element.ALIGN_LEFT, 0, 0);
            mainCell1.setPaddingLeft(125);
            tab3.addCell(mainCell1);
            mainCell1 = createCell(com.getAddress(), fontSmallRegular, Element.ALIGN_LEFT, 0, 0);
            mainCell1.setPaddingLeft(75);
            tab3.addCell(mainCell1);
            mainCell1 = createCell(com.getEmailID(), fontSmallRegular, Element.ALIGN_LEFT, 0, 0);
            mainCell1.setPaddingLeft(75);
            tab3.addCell(mainCell1);
            mainCell1 = createCell(com.getPhoneNumber(), fontSmallRegular, Element.ALIGN_LEFT, 0, 0);
            mainCell1.setPaddingLeft(75);
            tab3.addCell(mainCell1);
            mainCell1 = new PdfPCell(tab1);
            mainCell1.setBorder(0);
            table1.addCell(mainCell1);
            mainCell1 = new PdfPCell(tab3);
            mainCell1.setBorder(0);
            table1.addCell(mainCell1);

            mainCell1 = new PdfPCell(table1);
            mainCell1.setBorder(0);
            mainTable.addCell(mainCell1);

            blankTable = addBlankLine(5);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);

            PdfPCell mainCell2 = createCell(
                    messageSource.getMessage("acc.numb.37", null, RequestContextUtils.getLocale(request)),
                    fontMediumBold, Element.ALIGN_CENTER, 0, 0);
            mainTable.addCell(mainCell2);

            blankTable = addBlankLine(2);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);

            tab3 = new PdfPTable(2);
            tab3.setWidthPercentage(100);
            tab3.setWidths(new float[] { 60, 40 });

            tab1 = new PdfPTable(2);
            tab1.setWidthPercentage(100);
            tab1.setWidths(new float[] { 10, 90 });

            PdfPCell cell3 = createCell(
                    messageSource.getMessage("acc.msgbox.no", null, RequestContextUtils.getLocale(request))
                            + " : ",
                    fontSmallRegular, Element.ALIGN_LEFT, 0, 0);
            new PdfPCell(new Paragraph());
            tab1.addCell(cell3);
            cell3 = createCell(mode != StaticValues.AUTONUM_BILLINGRECEIPT ? rc.getReceiptNumber()
                    : rc1.getBillingReceiptNumber(), fontSmallBold, Element.ALIGN_LEFT, 0, 0);
            tab1.addCell(cell3);
            tab2 = new PdfPTable(2);
            tab2.setWidthPercentage(100);
            tab2.setWidths(new float[] { 30, 70 });
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.38", null, RequestContextUtils.getLocale(request)),
                    fontSmallRegular, Element.ALIGN_RIGHT, 0, 0);
            tab2.addCell(cell3);
            cell3 = createCell(
                    formatter.format(
                            mode != StaticValues.AUTONUM_BILLINGRECEIPT ? rc.getJournalEntry().getEntryDate()
                                    : rc1.getJournalEntry().getEntryDate()),
                    fontSmallBold, Element.ALIGN_LEFT, 0, 0);
            tab2.addCell(cell3);

            PdfPCell mainCell3 = new PdfPCell(tab1);
            mainCell3.setBorder(0);
            tab3.addCell(mainCell3);
            mainCell3 = new PdfPCell(tab2);
            mainCell3.setBorder(0);
            tab3.addCell(mainCell3);

            PdfPCell mainCell4 = new PdfPCell(tab3);
            mainCell4.setBorder(0);
            mainTable.addCell(mainCell4);

            blankTable = addBlankLine(5);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);
            tab2 = new PdfPTable(2);
            tab2.setWidthPercentage(100);
            tab2.setWidths(new float[] { 75, 25 });
            cell3 = new PdfPCell(new Paragraph(
                    messageSource.getMessage("acc.report.2", null, RequestContextUtils.getLocale(request)),
                    fontSmallBold));
            cell3.setHorizontalAlignment(Element.ALIGN_LEFT);
            cell3.setBackgroundColor(Color.lightGray);
            cell3.setBorder(Rectangle.LEFT + Rectangle.BOTTOM + Rectangle.RIGHT);
            tab2.addCell(cell3);
            cell3 = new PdfPCell(new Paragraph(
                    messageSource.getMessage("acc.rem.193", null, RequestContextUtils.getLocale(request)),
                    fontSmallBold));
            cell3.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell3.setBackgroundColor(Color.lightGray);
            cell3.setBorder(Rectangle.RIGHT + Rectangle.BOTTOM);
            tab2.addCell(cell3);
            cell3 = createCell(
                    messageSource.getMessage("acc.je.acc", null, RequestContextUtils.getLocale(request))
                            + " : ",
                    fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallBold, Element.ALIGN_LEFT, Rectangle.RIGHT, 0);
            tab2.addCell(cell3);
            cell3 = createCell(accname, fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT,
                    0);
            cell3.setPaddingLeft(50);
            tab2.addCell(cell3);
            cell3 = createCell(authHandlerDAOObj.getFormattedCurrency(amount, currencyid), fontSmallRegular,
                    Element.ALIGN_RIGHT, Rectangle.RIGHT, 15);
            tab2.addCell(cell3);
            cell3 = createCell(address, fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT,
                    0);
            cell3.setPaddingLeft(50);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.RIGHT, 0);
            tab2.addCell(cell3);

            for (int i = 0; i < 30; i++) {
                cell3 = new PdfPCell(new Paragraph("", fontSmallRegular));
                cell3.setBorder(Rectangle.LEFT + Rectangle.RIGHT);
                tab2.addCell(cell3);
            }
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.42", null, RequestContextUtils.getLocale(request)),
                    fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.RIGHT, 0);
            tab2.addCell(cell3);
            cell3 = createCell(
                    mode != StaticValues.AUTONUM_BILLINGRECEIPT
                            ? (rc.getPayDetail() == null ? "Cash"
                                    : rc.getPayDetail().getPaymentMethod().getMethodName())
                            : (rc1.getPayDetail() == null ? "Cash"
                                    : rc1.getPayDetail().getPaymentMethod().getMethodName()),
                    fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            cell3.setPaddingLeft(50);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_CENTER, Rectangle.RIGHT, 0);
            tab2.addCell(cell3);
            cell3 = createCell(
                    mode != StaticValues.AUTONUM_BILLINGRECEIPT
                            ? (rc.getPayDetail() != null
                                    ? (rc.getPayDetail().getPaymentMethod().getMethodName().equals("Cheque")
                                            ? "Cheque No : " + rc.getPayDetail().getCheque().getChequeNo()
                                                    + " and Bank Name : "
                                                    + rc.getPayDetail().getCheque().getBankName()
                                            : "")
                                    : "")
                            : (rc1.getPayDetail() != null
                                    ? (rc1.getPayDetail().getPaymentMethod().getMethodName().equals("Cheque")
                                            ? "Cheque No : " + rc1.getPayDetail().getCheque().getChequeNo()
                                                    + " and Bank Name : "
                                                    + rc1.getPayDetail().getCheque().getBankName()
                                            : "")
                                    : ""),
                    fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            cell3.setPaddingLeft(50);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_CENTER, Rectangle.RIGHT, 0);
            tab2.addCell(cell3);
            String str = "";
            if (mode != StaticValues.AUTONUM_BILLINGRECEIPT) {
                if (rc.getPayDetail() != null)
                    if (rc.getPayDetail().getPaymentMethod().getDetailType() == 2
                            || rc.getPayDetail().getPaymentMethod().getDetailType() == 1)
                        if (rc.getPayDetail().getCard() != null)
                            str = "Card No : " + (rc.getPayDetail().getCard().getCardNo())
                                    + " and Card Holder : " + rc.getPayDetail().getCard().getCardHolder();
                        else if (rc.getPayDetail().getCheque() != null)
                            str = "Bank Name : " + (rc.getPayDetail().getCheque().getBankName())
                                    + "and Ref. No : " + (rc.getPayDetail().getCheque().getChequeNo());
            } else if (rc1.getPayDetail() != null)
                if (rc1.getPayDetail().getPaymentMethod().getDetailType() == 2
                        || rc1.getPayDetail().getPaymentMethod().getDetailType() == 1)
                    if (rc1.getPayDetail().getCard() != null)
                        str = "Card No : " + (rc1.getPayDetail().getCard().getCardNo()) + " and Card Holder : "
                                + rc1.getPayDetail().getCard().getCardHolder();
                    else if (rc1.getPayDetail().getCheque() != null)
                        str = "Bank Name : " + (rc1.getPayDetail().getCheque().getBankName()) + "and Ref. No : "
                                + (rc1.getPayDetail().getCheque().getChequeNo());

            //                mode!=StaticValues.AUTONUM_BILLINGRECEIPT?(rc.getPayDetail()!=null?(rc.getPayDetail().getPaymentMethod().getMethodName().equals("Credit Card")||customer.equals("Debit Card")?
            //                        rc.getPayDetail().getCard()!=null?"Card No : "+(rc.getPayDetail().getCard().getCardNo()+" and Card Holder : "+rc.getPayDetail().getCard().getCardHolder()):"":""):""):
            //                        (rc1.getPayDetail()!=null?(rc1.getPayDetail().getPaymentMethod().getMethodName().equals("Credit Card")||customer.equals("Debit Card")?
            //                        rc1.getPayDetail().getCard()!=null?"Card No : "+(rc1.getPayDetail().getCard().getCardNo()+" and Card Holder : "+rc1.getPayDetail().getCard().getCardHolder()):"":""):"")

            cell3 = createCell(str, fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            cell3.setPaddingLeft(50);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_CENTER, Rectangle.RIGHT, 0);
            tab2.addCell(cell3);
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.41", null, RequestContextUtils.getLocale(request)),
                    fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.RIGHT, 5);
            tab2.addCell(cell3);
            cell3 = createCell(mode != StaticValues.AUTONUM_BILLINGRECEIPT ? rc.getMemo() : rc1.getMemo(),
                    fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            cell3.setPaddingLeft(50);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_CENTER, Rectangle.RIGHT, 5);
            tab2.addCell(cell3);
            String netinword = EnglishNumberToWordsOjb.convert(Double.parseDouble(String.valueOf(amount)),
                    currency);
            String currencyname = currency.getName();
            cell3 = createCell(
                    messageSource.getMessage("acc.rem.177", null, RequestContextUtils.getLocale(request))
                            + " : " + currencyname + " " + netinword + " Only.",
                    fontSmallRegular, Element.ALIGN_LEFT,
                    Rectangle.LEFT + Rectangle.RIGHT + Rectangle.BOTTOM + Rectangle.TOP, 5);
            tab2.addCell(cell3);
            cell3 = createCell(authHandlerDAOObj.getFormattedCurrency(amount, currencyid), fontSmallRegular,
                    Element.ALIGN_RIGHT, Rectangle.LEFT + Rectangle.RIGHT + Rectangle.BOTTOM + Rectangle.TOP,
                    5);
            tab2.addCell(cell3);
            PdfPCell mainCell5 = new PdfPCell(tab2);
            mainCell5.setBorder(1);
            mainTable.addCell(mainCell5);

            blankTable = addBlankLine(25);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);

            tab1 = new PdfPTable(2);
            tab1.setWidthPercentage(100);
            tab1.setWidths(new float[] { 50, 50 });
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.35", null, RequestContextUtils.getLocale(request)),
                    fontTblMediumBold, Element.ALIGN_CENTER, 0, 0);
            tab1.addCell(cell3);
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.36", null, RequestContextUtils.getLocale(request)),
                    fontTblMediumBold, Element.ALIGN_CENTER, 0, 0);
            tab1.addCell(cell3);
            PdfPCell mainCell6 = new PdfPCell(tab1);
            mainCell6.setPadding(5);
            mainCell6.setBorder(0);
            mainTable.addCell(mainCell6);

            blankTable = addBlankLine(15);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);

            tab2 = new PdfPTable(2);
            tab2.setWidthPercentage(100);
            tab2.setWidths(new float[] { 50, 50 });
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.39", null, RequestContextUtils.getLocale(request)),
                    fontTblMediumBold, Element.ALIGN_CENTER, 0, 0);
            tab2.addCell(cell3);
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.40", null, RequestContextUtils.getLocale(request)),
                    fontTblMediumBold, Element.ALIGN_CENTER, 0, 0);
            tab2.addCell(cell3);
            PdfPCell mainCell7 = new PdfPCell(tab2);
            mainCell7.setPadding(5);
            mainCell7.setBorder(0);
            mainTable.addCell(mainCell7);
            blankTable = addBlankLine(5);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);

        } else if (mode == StaticValues.AUTONUM_PAYMENT || mode == StaticValues.AUTONUM_BILLINGPAYMENT) {
            Payment pc = null;
            BillingPayment pc1 = null;
            if (mode == StaticValues.AUTONUM_PAYMENT) {
                pc = (Payment) kwlCommonTablesDAOObj.getClassObject(Payment.class.getName(), billid);
            } else {
                pc1 = (BillingPayment) kwlCommonTablesDAOObj.getClassObject(BillingPayment.class.getName(),
                        billid);
            }
            KWLCurrency currency = (KWLCurrency) kwlCommonTablesDAOObj
                    .getClassObject(KWLCurrency.class.getName(), currencyid);
            Company com = mode == StaticValues.AUTONUM_PAYMENT ? pc.getCompany() : pc1.getCompany();
            String company[] = new String[3];
            company[0] = com.getCompanyName();
            company[1] = com.getAddress();
            company[2] = com.getEmailID();

            PdfPTable table1 = new PdfPTable(2);
            table1.setWidthPercentage(100);
            table1.setWidths(new float[] { 25, 75 });

            tab1 = addCompanyLogo(logoPath, com);

            tab3 = new PdfPTable(1);
            tab3.setWidthPercentage(100);
            PdfPCell mainCell1 = null;
            mainCell1 = createCell(com.getCompanyName(), fontMediumBold, Element.ALIGN_LEFT, 0, 0);
            mainCell1.setPaddingLeft(125);
            tab3.addCell(mainCell1);
            mainCell1 = createCell(com.getAddress(), fontSmallRegular, Element.ALIGN_LEFT, 0, 0);
            mainCell1.setPaddingLeft(75);
            tab3.addCell(mainCell1);
            mainCell1 = createCell(com.getEmailID(), fontSmallRegular, Element.ALIGN_LEFT, 0, 0);
            mainCell1.setPaddingLeft(75);
            tab3.addCell(mainCell1);
            mainCell1 = createCell(com.getPhoneNumber(), fontSmallRegular, Element.ALIGN_LEFT, 0, 0);
            mainCell1.setPaddingLeft(75);
            tab3.addCell(mainCell1);
            mainCell1 = new PdfPCell(tab1);
            mainCell1.setBorder(0);
            table1.addCell(mainCell1);
            mainCell1 = new PdfPCell(tab3);
            mainCell1.setBorder(0);
            table1.addCell(mainCell1);

            mainCell1 = new PdfPCell(table1);
            mainCell1.setBorder(0);
            mainTable.addCell(mainCell1);

            blankTable = addBlankLine(5);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);

            PdfPCell mainCell2 = createCell(
                    messageSource.getMessage("acc.numb.37", null, RequestContextUtils.getLocale(request)),
                    fontMediumBold, Element.ALIGN_CENTER, 0, 0);
            mainTable.addCell(mainCell2);

            blankTable = addBlankLine(2);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);

            tab3 = new PdfPTable(2);
            tab3.setWidthPercentage(100);
            tab3.setWidths(new float[] { 60, 40 });

            tab1 = new PdfPTable(2);
            tab1.setWidthPercentage(100);
            tab1.setWidths(new float[] { 10, 90 });

            PdfPCell cell3 = createCell(
                    messageSource.getMessage("acc.msgbox.no", null, RequestContextUtils.getLocale(request))
                            + " : ",
                    fontSmallRegular, Element.ALIGN_LEFT, 0, 0);
            new PdfPCell(new Paragraph());
            tab1.addCell(cell3);
            cell3 = createCell(mode == StaticValues.AUTONUM_PAYMENT ? pc.getPaymentNumber()
                    : pc1.getBillingPaymentNumber(), fontSmallBold, Element.ALIGN_LEFT, 0, 0);
            tab1.addCell(cell3);
            tab2 = new PdfPTable(2);
            tab2.setWidthPercentage(100);
            tab2.setWidths(new float[] { 30, 70 });
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.38", null, RequestContextUtils.getLocale(request)),
                    fontSmallRegular, Element.ALIGN_RIGHT, 0, 0);
            tab2.addCell(cell3);
            cell3 = createCell(
                    formatter.format(mode == StaticValues.AUTONUM_PAYMENT ? pc.getJournalEntry().getEntryDate()
                            : pc1.getJournalEntry().getEntryDate()),
                    fontSmallBold, Element.ALIGN_LEFT, 0, 0);
            tab2.addCell(cell3);

            PdfPCell mainCell3 = new PdfPCell(tab1);
            mainCell3.setBorder(0);
            tab3.addCell(mainCell3);
            mainCell3 = new PdfPCell(tab2);
            mainCell3.setBorder(0);
            tab3.addCell(mainCell3);

            PdfPCell mainCell4 = new PdfPCell(tab3);
            mainCell4.setBorder(0);
            mainTable.addCell(mainCell4);

            blankTable = addBlankLine(5);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);
            tab2 = new PdfPTable(2);
            tab2.setWidthPercentage(100);
            tab2.setWidths(new float[] { 75, 25 });
            cell3 = new PdfPCell(new Paragraph(
                    messageSource.getMessage("acc.report.2", null, RequestContextUtils.getLocale(request)),
                    fontSmallBold));
            cell3.setHorizontalAlignment(Element.ALIGN_LEFT);
            cell3.setBackgroundColor(Color.lightGray);
            cell3.setBorder(Rectangle.LEFT + Rectangle.BOTTOM + Rectangle.RIGHT);
            tab2.addCell(cell3);
            cell3 = new PdfPCell(new Paragraph(
                    messageSource.getMessage("acc.rem.193", null, RequestContextUtils.getLocale(request)),
                    fontSmallBold));
            cell3.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell3.setBackgroundColor(Color.lightGray);
            cell3.setBorder(Rectangle.RIGHT + Rectangle.BOTTOM);
            tab2.addCell(cell3);
            cell3 = createCell(
                    messageSource.getMessage("acc.rem.193", null, RequestContextUtils.getLocale(request))
                            + " : ",
                    fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallBold, Element.ALIGN_LEFT, Rectangle.RIGHT, 0);
            tab2.addCell(cell3);
            cell3 = createCell(accname, fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT,
                    0);
            cell3.setPaddingLeft(50);
            tab2.addCell(cell3);
            cell3 = createCell(authHandlerDAOObj.getFormattedCurrency(amount, currencyid), fontSmallRegular,
                    Element.ALIGN_RIGHT, Rectangle.RIGHT, 5);
            tab2.addCell(cell3);
            cell3 = createCell(address, fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT,
                    0);
            cell3.setPaddingLeft(50);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.RIGHT, 0);
            tab2.addCell(cell3);

            for (int i = 0; i < 30; i++) {
                cell3 = new PdfPCell(new Paragraph("", fontSmallRegular));
                cell3.setBorder(Rectangle.LEFT + Rectangle.RIGHT);
                tab2.addCell(cell3);
            }
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.42", null, RequestContextUtils.getLocale(request)),
                    fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.RIGHT, 0);
            tab2.addCell(cell3);
            cell3 = createCell(
                    mode == StaticValues.AUTONUM_PAYMENT
                            ? (pc.getPayDetail() == null ? "Cash"
                                    : pc.getPayDetail().getPaymentMethod().getMethodName())
                            : (pc1.getPayDetail() == null ? "Cash"
                                    : pc1.getPayDetail().getPaymentMethod().getMethodName()),
                    fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            cell3.setPaddingLeft(50);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_CENTER, Rectangle.RIGHT, 0);
            tab2.addCell(cell3);
            cell3 = createCell(
                    mode == StaticValues.AUTONUM_PAYMENT
                            ? (pc.getPayDetail() != null
                                    ? (pc.getPayDetail().getPaymentMethod().getMethodName().equals("Cheque")
                                            ? "Cheque No : " + pc.getPayDetail().getCheque().getChequeNo()
                                                    + " and Bank Name : "
                                                    + pc.getPayDetail().getCheque().getBankName()
                                            : "")
                                    : "")
                            : (pc1.getPayDetail() != null
                                    ? (pc1.getPayDetail().getPaymentMethod().getMethodName().equals("Cheque")
                                            ? "Cheque No : " + pc1.getPayDetail().getCheque().getChequeNo()
                                                    + " and Bank Name : "
                                                    + pc1.getPayDetail().getCheque().getBankName()
                                            : "")
                                    : ""),
                    fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            cell3.setPaddingLeft(50);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_CENTER, Rectangle.RIGHT, 0);
            tab2.addCell(cell3);
            String str = "";

            if (mode == StaticValues.AUTONUM_PAYMENT) {
                if (pc.getPayDetail() != null)
                    if (pc.getPayDetail().getPaymentMethod().getDetailType() == 2
                            || pc.getPayDetail().getPaymentMethod().getDetailType() == 1)
                        if (pc.getPayDetail().getCard() != null)
                            str = "Card No : " + (pc.getPayDetail().getCard().getCardNo())
                                    + " and Card Holder : " + pc.getPayDetail().getCard().getCardHolder();
                        else if (pc.getPayDetail().getCheque() != null)
                            str = "Bank Name : " + (pc.getPayDetail().getCheque().getBankName())
                                    + "and Ref. No : " + (pc.getPayDetail().getCheque().getChequeNo());
            } else if (pc1.getPayDetail() != null)
                if (pc1.getPayDetail().getPaymentMethod().getDetailType() == 2
                        || pc1.getPayDetail().getPaymentMethod().getDetailType() == 1)
                    if (pc1.getPayDetail().getCard() != null)
                        str = "Card No : " + (pc1.getPayDetail().getCard().getCardNo()) + " and Card Holder : "
                                + pc1.getPayDetail().getCard().getCardHolder();
                    else if (pc1.getPayDetail().getCheque() != null)
                        str = "Bank Name : " + (pc1.getPayDetail().getCheque().getBankName()) + "and Ref. No : "
                                + (pc1.getPayDetail().getCheque().getChequeNo());
            cell3 = createCell(str, fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            cell3.setPaddingLeft(50);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_CENTER, Rectangle.RIGHT, 0);
            tab2.addCell(cell3);
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.41", null, RequestContextUtils.getLocale(request)),
                    fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_RIGHT, Rectangle.RIGHT, 5);
            tab2.addCell(cell3);
            cell3 = createCell(mode == StaticValues.AUTONUM_PAYMENT ? pc.getMemo() : pc1.getMemo(),
                    fontSmallRegular, Element.ALIGN_LEFT, Rectangle.LEFT + Rectangle.RIGHT, 5);
            cell3.setPaddingLeft(50);
            tab2.addCell(cell3);
            cell3 = createCell("", fontSmallRegular, Element.ALIGN_CENTER, Rectangle.RIGHT, 5);
            tab2.addCell(cell3);
            String netinword = EnglishNumberToWordsOjb.convert(Double.parseDouble(String.valueOf(amount)),
                    currency);
            String currencyname = currency.getName();
            cell3 = createCell(
                    messageSource.getMessage("acc.rem.177", null, RequestContextUtils.getLocale(request)) + " "
                            + currencyname + " " + netinword + " Only.",
                    fontSmallRegular, Element.ALIGN_LEFT,
                    Rectangle.LEFT + Rectangle.RIGHT + Rectangle.BOTTOM + Rectangle.TOP, 5);
            tab2.addCell(cell3);
            cell3 = createCell(authHandlerDAOObj.getFormattedCurrency(amount, currencyid), fontSmallRegular,
                    Element.ALIGN_RIGHT, Rectangle.LEFT + Rectangle.RIGHT + Rectangle.BOTTOM + Rectangle.TOP,
                    5);
            tab2.addCell(cell3);
            PdfPCell mainCell5 = new PdfPCell(tab2);
            mainCell5.setBorder(1);
            mainTable.addCell(mainCell5);

            blankTable = addBlankLine(25);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);

            tab1 = new PdfPTable(2);
            tab1.setWidthPercentage(100);
            tab1.setWidths(new float[] { 50, 50 });
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.35", null, RequestContextUtils.getLocale(request)),
                    fontTblMediumBold, Element.ALIGN_CENTER, 0, 0);
            tab1.addCell(cell3);
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.36", null, RequestContextUtils.getLocale(request)),
                    fontTblMediumBold, Element.ALIGN_CENTER, 0, 0);
            tab1.addCell(cell3);
            PdfPCell mainCell6 = new PdfPCell(tab1);
            mainCell6.setPadding(5);
            mainCell6.setBorder(0);
            mainTable.addCell(mainCell6);

            blankTable = addBlankLine(15);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);

            tab2 = new PdfPTable(2);
            tab2.setWidthPercentage(100);
            tab2.setWidths(new float[] { 50, 50 });
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.39", null, RequestContextUtils.getLocale(request)),
                    fontTblMediumBold, Element.ALIGN_CENTER, 0, 0);
            tab2.addCell(cell3);
            cell3 = createCell(
                    messageSource.getMessage("acc.numb.40", null, RequestContextUtils.getLocale(request)),
                    fontTblMediumBold, Element.ALIGN_CENTER, 0, 0);
            tab2.addCell(cell3);
            PdfPCell mainCell7 = new PdfPCell(tab2);
            mainCell7.setPadding(5);
            mainCell7.setBorder(0);
            mainTable.addCell(mainCell7);
            blankTable = addBlankLine(5);
            blankCell = new PdfPCell(blankTable);
            blankCell.setBorder(0);
            mainTable.addCell(blankCell);

        }

        document.add(mainTable);
        return baos;
    } catch (Exception ex) {
        throw ServiceException.FAILURE("Export:" + ex.getMessage(), ex);
    } finally {
        if (document != null) {
            document.close();
        }
        if (writer != null) {
            writer.close();
        }
        if (baos != null) {
            baos.close();
        }
    }

}