Subversion Repositories SmartDukaan

Rev

Rev 36045 | Rev 36111 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 36045 Rev 36109
Line 212... Line 212...
212
 
212
 
213
                orders.setHeaderRows(1);
213
                orders.setHeaderRows(1);
214
 
214
 
215
                float igstTotalAmount = 0, cgstTotalAmount = 0, sgstTotalAmount = 0;
215
                float igstTotalAmount = 0, cgstTotalAmount = 0, sgstTotalAmount = 0;
216
                int index = 1;
216
                int index = 1;
217
                boolean marginSeparatorAdded = false;
-
 
218
                for (CustomOrderItem orderItem : orderItems) {
217
                for (CustomOrderItem orderItem : orderItems) {
219
                    // Add margin scheme separator before first margin scheme item
-
 
220
                    if (orderItem.isMarginScheme() && !marginSeparatorAdded) {
-
 
221
                        int numColumns = stateGst
-
 
222
                                ? (showDiscount ? stateWidthsWithDiscount.length : stateWidthsNoDiscount.length)
-
 
223
                                : (showDiscount ? igstWidthsWithDiscount.length : igstWidthsNoDiscount.length);
-
 
224
                        addMarginSchemeSeparator(orders, numColumns);
-
 
225
                        marginSeparatorAdded = true;
-
 
226
                    }
-
 
227
 
-
 
228
                    orders.addCell(new Paragraph(String.valueOf(index++), FONT_NORMAL));
218
                    orders.addCell(new Paragraph(String.valueOf(index++), FONT_NORMAL));
229
                    orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
219
                    orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
230
                    orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
220
                    orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
231
                    orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
221
                    orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
232
 
222
 
233
                    if (orderItem.isMarginScheme()) {
-
 
234
                        // For margin scheme: Rate = Selling Price, Discount shows Purchase Price, Taxable = Margin
-
 
235
                        orders.addCell(new Paragraph(String.format("%.2f", orderItem.getSellingPrice()), FONT_NORMAL));
-
 
236
                        if (showDiscount) {
-
 
237
                            orders.addCell(new Paragraph(String.format("%.2f\n(Purchase)", orderItem.getPurchasePrice()), FONT_NORMAL));
-
 
238
                        }
-
 
239
                    } else {
-
 
240
                        orders.addCell(new Paragraph(String.format("%.2f", orderItem.getRate()), FONT_NORMAL));
223
                    orders.addCell(new Paragraph(String.format("%.2f", orderItem.getRate()), FONT_NORMAL));
241
                        if (showDiscount) {
224
                    if (showDiscount) {
242
                            // For FOFO: show "-" if discount is 0, otherwise show the discount value
-
 
243
                            String discountText = orderItem.getDiscount() == 0 ? "-" : String.format("%.2f", orderItem.getDiscount());
225
                        String discountText = orderItem.getDiscount() == 0 ? "-" : String.format("%.2f", orderItem.getDiscount());
244
                            orders.addCell(new Paragraph(discountText, FONT_NORMAL));
226
                        orders.addCell(new Paragraph(discountText, FONT_NORMAL));
245
                        }
-
 
246
                    }
227
                    }
247
                    orders.addCell(new Paragraph(String.format("%.2f", orderItem.getAmount()), FONT_NORMAL));
228
                    orders.addCell(new Paragraph(String.format("%.2f", orderItem.getAmount()), FONT_NORMAL));
248
                    if (!stateGst) {
229
                    if (!stateGst) {
249
                        orders.addCell(new Paragraph(String.format("%.2f%n(@%.0f%%)", orderItem.getIgstAmount(), orderItem.getIgstRate()), FONT_NORMAL));
230
                        orders.addCell(new Paragraph(String.format("%.2f%n(@%.0f%%)", orderItem.getIgstAmount(), orderItem.getIgstRate()), FONT_NORMAL));
250
                        igstTotalAmount = igstTotalAmount + orderItem.getIgstAmount();
231
                        igstTotalAmount = igstTotalAmount + orderItem.getIgstAmount();
Line 386... Line 367...
386
                    body.setIndentationRight(25);
367
                    body.setIndentationRight(25);
387
                    document.add(body);
368
                    document.add(body);
388
 
369
 
389
                }
370
                }
390
 
371
 
391
                // Margin scheme declaration
-
 
392
                addMarginSchemeDeclaration(document, pdfModel);
-
 
393
 
-
 
394
                if (pdfModel.getTncs() != null) {
372
                if (pdfModel.getTncs() != null) {
395
                    StringBuffer sb = new StringBuffer();
373
                    StringBuffer sb = new StringBuffer();
396
                    for (String tnc : pdfModel.getTncs()) {
374
                    for (String tnc : pdfModel.getTncs()) {
397
                        sb.append(tnc).append("\n");
375
                        sb.append(tnc).append("\n");
398
                    }
376
                    }
Line 466... Line 444...
466
                document.add(declarationParagraph);
444
                document.add(declarationParagraph);
467
            }
445
            }
468
        }
446
        }
469
    }
447
    }
470
 
448
 
-
 
449
    public static void generateMarginSchemeInvoice(List<InvoicePdfModel> pdfModels, ByteArrayOutputStream outputStream) {
-
 
450
        try {
-
 
451
            boolean cancelledPages = false;
-
 
452
            List<Integer> cancelledPageList = new ArrayList<>();
-
 
453
            Document document = new Document();
-
 
454
            document.setMargins(0, 0, 25, 0);
-
 
455
            PdfWriter pdfWriter = PdfWriter.getInstance(document, outputStream);
-
 
456
            document.open();
-
 
457
 
-
 
458
            float[] marginSchemeWidths = new float[]{0.3f, 2.2f, 0.6f, 0.3f, 0.9f, 0.9f, 0.8f, 0.8f, 0.9f};
-
 
459
 
-
 
460
            for (InvoicePdfModel pdfModel : pdfModels) {
-
 
461
                CustomCustomer customer = pdfModel.getCustomer();
-
 
462
                CustomRetailer retailer = pdfModel.getRetailer();
-
 
463
                boolean stateGst = customer.getAddress().getState().equals(retailer.getAddress().getState());
-
 
464
 
-
 
465
                List<CustomOrderItem> orderItems = pdfModel.getOrderItems();
-
 
466
                if (pdfModel.isCancelled()) {
-
 
467
                    cancelledPageList.add(1);
-
 
468
                    cancelledPages = true;
-
 
469
                } else {
-
 
470
                    cancelledPageList.add(0);
-
 
471
                }
-
 
472
 
-
 
473
                document.addTitle("INVOICE OF SUPPLY (MARGIN SCHEME)");
-
 
474
                document.addAuthor(pdfModel.getAuther());
-
 
475
 
-
 
476
                Paragraph paragraphTitle = new Paragraph("INVOICE OF SUPPLY (MARGIN SCHEME)", FONT_TITLE);
-
 
477
                paragraphTitle.setAlignment(Element.ALIGN_CENTER);
-
 
478
                document.add(paragraphTitle);
-
 
479
 
-
 
480
                Rectangle rectangle = document.getPageSize();
-
 
481
 
-
 
482
                if (pdfModel.getIrnModel() != null) {
-
 
483
                    addIrnDetails(pdfModel.getIrnModel(), rectangle, document);
-
 
484
                }
-
 
485
 
-
 
486
                // Customer and Retailer details
-
 
487
                PdfPTable tableCustomerRetailer = new PdfPTable(2);
-
 
488
                tableCustomerRetailer.setWidthPercentage(90);
-
 
489
                tableCustomerRetailer.getDefaultCell().setBorder(Rectangle.NO_BORDER);
-
 
490
 
-
 
491
                PdfPCell columnCustomerInfo = new PdfPCell();
-
 
492
                columnCustomerInfo.addElement(new Paragraph("Customer Details", FONT_BOLD));
-
 
493
                columnCustomerInfo.addElement(new Paragraph(
-
 
494
                        StringUtils.capitalize(customer.getAddress().getName() + (customer.getAddress().getLastName() == null ? "" : " " + customer.getAddress().getLastName())), FONT_NORMAL));
-
 
495
                if (customer.getAddress() != null) {
-
 
496
                    if ((customer.getAddress().getLine1() != null && !customer.getAddress().getLine1().trim().isEmpty()) || (customer.getAddress().getLine2() != null && !customer.getAddress().getLine2().trim().isEmpty())) {
-
 
497
                        columnCustomerInfo.addElement(new Paragraph(StringUtils.capitalize(customer.getAddress().getLine1()) + ", " + StringUtils.capitalize(customer.getAddress().getLine2()), FONT_NORMAL));
-
 
498
                    }
-
 
499
                    if ((customer.getAddress().getCity() != null && !customer.getAddress().getCity().trim().isEmpty()) || (customer.getAddress().getState() != null && !customer.getAddress().getState().trim().isEmpty())) {
-
 
500
                        columnCustomerInfo.addElement(new Paragraph(StringUtils.capitalize(customer.getAddress().getCity()) + ", " + StringUtils.capitalize(customer.getAddress().getState()) + "(" + pdfModel.getCustomerAddressStateCode() + ")" + "\n" + customer.getAddress().getPinCode(), FONT_NORMAL));
-
 
501
                    }
-
 
502
                }
-
 
503
                columnCustomerInfo.addElement(new Paragraph("Mobile - " + customer.getAddress().getPhoneNumber(), FONT_NORMAL));
-
 
504
                if (customer.getGstNumber() != null && !customer.getGstNumber().isEmpty()) {
-
 
505
                    columnCustomerInfo.addElement(new Paragraph("GST Number - " + customer.getGstNumber(), FONT_NORMAL));
-
 
506
                }
-
 
507
                columnCustomerInfo.setBorder(Rectangle.NO_BORDER);
-
 
508
 
-
 
509
                PdfPCell columnRetailerInfo = new PdfPCell();
-
 
510
                columnRetailerInfo.addElement(new Paragraph(StringUtils.capitalize(retailer.getAddress().getName()), FONT_BOLD));
-
 
511
                columnRetailerInfo.addElement(new Paragraph(StringUtils.capitalize(retailer.getAddress().getLine1()) + ", " + StringUtils.capitalize(retailer.getAddress().getLine2()) + ", " + StringUtils.capitalize(retailer.getAddress().getCity()) + "-" + retailer.getAddress().getPinCode() + ", " + retailer.getAddress().getState() + "(" + (stateGst ? pdfModel.getCustomerAddressStateCode() : pdfModel.getPartnerAddressStateCode()) + ")", FONT_BOLD));
-
 
512
                columnRetailerInfo.addElement(new Paragraph("Contact No.- " + retailer.getAddress().getPhoneNumber(), FONT_BOLD));
-
 
513
                columnRetailerInfo.addElement(new Paragraph("GST NO. " + retailer.getGstNumber(), FONT_BOLD));
-
 
514
                columnRetailerInfo.setBorder(Rectangle.NO_BORDER);
-
 
515
 
-
 
516
                PdfPTable tableInvoiceDateRetailer = new PdfPTable(1);
-
 
517
                tableInvoiceDateRetailer.getDefaultCell().setBorder(Rectangle.NO_BORDER);
-
 
518
 
-
 
519
                PdfPTable tableInvoiceDate = new PdfPTable(2);
-
 
520
                tableInvoiceDate.getDefaultCell().setBorder(Rectangle.NO_BORDER);
-
 
521
 
-
 
522
                PdfPCell invoiceNumberKey = new PdfPCell(new Paragraph("Invoice No:", FONT_NORMAL));
-
 
523
                invoiceNumberKey.setBorder(Rectangle.NO_BORDER);
-
 
524
                PdfPCell invoiceNumberValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceNumber(), FONT_NORMAL));
-
 
525
                invoiceNumberValue.setBorder(Rectangle.NO_BORDER);
-
 
526
                PdfPCell dateKey = new PdfPCell(new Paragraph("Date:", FONT_NORMAL));
-
 
527
                dateKey.setBorder(Rectangle.NO_BORDER);
-
 
528
                PdfPCell dateValue = new PdfPCell(new Paragraph(pdfModel.getInvoiceDate(), FONT_NORMAL));
-
 
529
                dateValue.setBorder(Rectangle.NO_BORDER);
-
 
530
 
-
 
531
                tableInvoiceDate.addCell(invoiceNumberKey);
-
 
532
                tableInvoiceDate.addCell(invoiceNumberValue);
-
 
533
                tableInvoiceDate.addCell(dateKey);
-
 
534
                tableInvoiceDate.addCell(dateValue);
-
 
535
                tableInvoiceDateRetailer.addCell(tableInvoiceDate);
-
 
536
                tableInvoiceDateRetailer.addCell(columnRetailerInfo);
-
 
537
 
-
 
538
                tableCustomerRetailer.addCell(columnCustomerInfo);
-
 
539
                tableCustomerRetailer.addCell(tableInvoiceDateRetailer);
-
 
540
 
-
 
541
                // Item table with margin scheme columns
-
 
542
                PdfPTable orders = new PdfPTable(marginSchemeWidths.length);
-
 
543
                orders.setWidths(marginSchemeWidths);
-
 
544
                orders.setWidthPercentage(90);
-
 
545
 
-
 
546
                orders.addCell(new Paragraph("S.No", FONT_BOLD));
-
 
547
                orders.addCell(new Paragraph("Description", FONT_BOLD));
-
 
548
                orders.addCell(new Paragraph("HSN", FONT_BOLD));
-
 
549
                orders.addCell(new Paragraph("Qty", FONT_BOLD));
-
 
550
                orders.addCell(new Paragraph("Purchase\nPrice Rs.", FONT_BOLD));
-
 
551
                orders.addCell(new Paragraph("Selling\nPrice Rs.", FONT_BOLD));
-
 
552
                orders.addCell(new Paragraph("Margin\nRs.", FONT_BOLD));
-
 
553
                orders.addCell(new Paragraph("GST on\nMargin Rs.", FONT_BOLD));
-
 
554
                orders.addCell(new Paragraph("Invoice\nTotal Rs.", FONT_BOLD));
-
 
555
                orders.setHeaderRows(1);
-
 
556
 
-
 
557
                float totalSellingPrice = 0, totalMargin = 0, totalGstOnMargin = 0, totalInvoiceTotal = 0;
-
 
558
                int index = 1;
-
 
559
                for (CustomOrderItem orderItem : orderItems) {
-
 
560
                    float gstOnMargin = orderItem.getCgstAmount() + orderItem.getSgstAmount() + orderItem.getIgstAmount();
-
 
561
 
-
 
562
                    orders.addCell(new Paragraph(String.valueOf(index++), FONT_NORMAL));
-
 
563
                    orders.addCell(new Paragraph(orderItem.getDescription(), FONT_NORMAL));
-
 
564
                    orders.addCell(new Paragraph(orderItem.getHsnCode(), FONT_NORMAL));
-
 
565
                    orders.addCell(new Paragraph(String.valueOf(orderItem.getQuantity()), FONT_NORMAL));
-
 
566
                    orders.addCell(new Paragraph(String.format("%.2f", orderItem.getPurchasePrice()), FONT_NORMAL));
-
 
567
                    orders.addCell(new Paragraph(String.format("%.2f", orderItem.getSellingPrice()), FONT_NORMAL));
-
 
568
                    orders.addCell(new Paragraph(String.format("%.2f", orderItem.getMargin()), FONT_NORMAL));
-
 
569
                    orders.addCell(new Paragraph(String.format("%.2f", gstOnMargin), FONT_NORMAL));
-
 
570
                    orders.addCell(new Paragraph(String.format("%.2f", orderItem.getNetAmount()), FONT_NORMAL));
-
 
571
 
-
 
572
                    totalSellingPrice += orderItem.getSellingPrice();
-
 
573
                    totalMargin += orderItem.getMargin();
-
 
574
                    totalGstOnMargin += gstOnMargin;
-
 
575
                    totalInvoiceTotal += orderItem.getNetAmount();
-
 
576
                }
-
 
577
 
-
 
578
                // Total row
-
 
579
                PdfPCell totalLabelCell = new PdfPCell(new Paragraph("TOTAL", FONT_BOLD));
-
 
580
                totalLabelCell.setColspan(5);
-
 
581
                orders.addCell(totalLabelCell);
-
 
582
                orders.addCell(new Paragraph(String.format("%.2f", totalSellingPrice), FONT_BOLD));
-
 
583
                orders.addCell(new Paragraph(String.format("%.2f", totalMargin), FONT_BOLD));
-
 
584
                orders.addCell(new Paragraph(String.format("%.2f", totalGstOnMargin), FONT_BOLD));
-
 
585
                orders.addCell(new Paragraph(String.format("%.2f", totalInvoiceTotal), FONT_BOLD));
-
 
586
 
-
 
587
                // Logo and layout
-
 
588
                iconImg.setAbsolutePosition(25, rectangle.getHeight() - 100);
-
 
589
                iconImg.scalePercent(30);
-
 
590
                document.add(iconImg);
-
 
591
                document.add(Chunk.NEWLINE);
-
 
592
                document.add(Chunk.NEWLINE);
-
 
593
                document.add(tableCustomerRetailer);
-
 
594
                document.add(Chunk.NEWLINE);
-
 
595
                document.add(orders);
-
 
596
 
-
 
597
                // Grand total
-
 
598
                PdfPTable grandTotalTable = new PdfPTable(3);
-
 
599
                grandTotalTable.setWidths(new float[]{6.5f, .6f, .9f});
-
 
600
                grandTotalTable.setWidthPercentage(90);
-
 
601
 
-
 
602
                Paragraph grandTotalParagraph = new Paragraph("Grand total", FONT_BOLD);
-
 
603
                grandTotalParagraph.setIndentationRight(20);
-
 
604
                grandTotalTable.addCell(grandTotalParagraph);
-
 
605
                grandTotalTable.addCell(new Paragraph("Rs.", FONT_BOLD));
-
 
606
                grandTotalTable.addCell(new Paragraph(String.format("%.2f", pdfModel.getTotalAmount()), FONT_BOLD));
-
 
607
                document.add(grandTotalTable);
-
 
608
 
-
 
609
                // Amount in words
-
 
610
                PdfPTable amountInWordsTable = new PdfPTable(3);
-
 
611
                amountInWordsTable.setWidthPercentage(90);
-
 
612
                amountInWordsTable.setWidths(new float[]{2, 5.1f, 0.9f});
-
 
613
                amountInWordsTable.addCell(new Paragraph("Amount in Words:", FONT_BOLD));
-
 
614
                String amountInWords = toAmountInWords(pdfModel.getTotalAmount());
-
 
615
                amountInWordsTable.addCell(new Paragraph(amountInWords, FONT_BOLD));
-
 
616
                amountInWordsTable.addCell(new Paragraph("E & O.E", FONT_NORMAL));
-
 
617
                document.add(amountInWordsTable);
-
 
618
 
-
 
619
                // Payment options
-
 
620
                if (pdfModel.getPaymentOptions() != null) {
-
 
621
                    PdfPTable paidAmountTable = new PdfPTable(2);
-
 
622
                    paidAmountTable.setWidthPercentage(90);
-
 
623
                    paidAmountTable.setWidths(new float[]{7.1f, 0.9f});
-
 
624
                    float totalPaidValue = 0;
-
 
625
                    for (CustomPaymentOption paymentOption : pdfModel.getPaymentOptions()) {
-
 
626
                        if (!"CASH DISCOUNT".equals(paymentOption.getPaymentOption())) {
-
 
627
                            PdfPCell cell = new PdfPCell(new Paragraph(10, "Paid Through " + paymentOption.getPaymentOption(), FONT_BOLD));
-
 
628
                            cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
-
 
629
                            cell.setPadding(5);
-
 
630
                            paidAmountTable.addCell(cell);
-
 
631
 
-
 
632
                            PdfPCell cell1 = new PdfPCell(new Paragraph(10, FormattingUtils.formatDecimal(paymentOption.getAmount()), FONT_BOLD));
-
 
633
                            cell1.setPadding(5);
-
 
634
                            paidAmountTable.addCell(cell1);
-
 
635
                            totalPaidValue += paymentOption.getAmount();
-
 
636
                        }
-
 
637
                    }
-
 
638
                    PdfPCell totalPaidCell = new PdfPCell(new Paragraph(10, "Total Paid", FONT_BOLD));
-
 
639
                    totalPaidCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
-
 
640
                    totalPaidCell.setPadding(5);
-
 
641
                    paidAmountTable.addCell(totalPaidCell);
-
 
642
 
-
 
643
                    PdfPCell totalPaidValueCell = new PdfPCell(new Paragraph(10, FormattingUtils.formatDecimal(totalPaidValue), FONT_BOLD));
-
 
644
                    totalPaidValueCell.setPadding(5);
-
 
645
                    paidAmountTable.addCell(totalPaidValueCell);
-
 
646
                    document.add(paidAmountTable);
-
 
647
                }
-
 
648
 
-
 
649
                // Computer generated note
-
 
650
                Paragraph autoGenerateParagraph = new Paragraph("Note - This is computer generated Invoice, no signature is required", FONT_NORMAL);
-
 
651
                autoGenerateParagraph.setAlignment(Element.ALIGN_CENTER);
-
 
652
                document.add(autoGenerateParagraph);
-
 
653
 
-
 
654
                // Credit terms
-
 
655
                if (pdfModel.getCreditTerms() != null) {
-
 
656
                    Paragraph title = new Paragraph("Credit terms :-\n", FONT_BOLD);
-
 
657
                    title.setIndentationLeft(25);
-
 
658
                    title.setIndentationRight(25);
-
 
659
                    document.add(title);
-
 
660
 
-
 
661
                    StringBuffer termsBuffer = new StringBuffer();
-
 
662
                    int count = 0;
-
 
663
                    for (String creditTerm : pdfModel.getCreditTerms()) {
-
 
664
                        count++;
-
 
665
                        termsBuffer.append(count).append(". ").append(creditTerm).append(".\n");
-
 
666
                    }
-
 
667
                    Paragraph body = new Paragraph(termsBuffer.toString(), FONT_NORMAL);
-
 
668
                    body.setIndentationLeft(25);
-
 
669
                    body.setIndentationRight(25);
-
 
670
                    document.add(body);
-
 
671
                }
-
 
672
 
-
 
673
                // Margin scheme declaration
-
 
674
                addMarginSchemeDeclaration(document, pdfModel);
-
 
675
 
-
 
676
                if (pdfModel.getTncs() != null) {
-
 
677
                    StringBuffer sb = new StringBuffer();
-
 
678
                    for (String tnc : pdfModel.getTncs()) {
-
 
679
                        sb.append(tnc).append("\n");
-
 
680
                    }
-
 
681
                    Paragraph warningParagraph = new Paragraph(sb.toString(), FONT_NORMAL);
-
 
682
                    warningParagraph.setIndentationLeft(40);
-
 
683
                    document.add(Chunk.NEWLINE);
-
 
684
                    document.add(warningParagraph);
-
 
685
                }
-
 
686
 
-
 
687
                document.newPage();
-
 
688
 
-
 
689
                // E-Way Bill support
-
 
690
                if (pdfModel.geteWayBillPdfModel() != null) {
-
 
691
                    EWayBillPDF.generateDocument(document, pdfWriter, pdfModel.geteWayBillPdfModel());
-
 
692
                }
-
 
693
            }
-
 
694
 
-
 
695
            document.close();
-
 
696
            if (cancelledPages) {
-
 
697
                stampCancelled(outputStream, cancelledPageList);
-
 
698
            }
-
 
699
        } catch (DocumentException e) {
-
 
700
            LOGGER.error("Unable to write data to margin scheme pdf file : ", e);
-
 
701
        } catch (Exception e) {
-
 
702
            e.printStackTrace();
-
 
703
        }
-
 
704
    }
-
 
705
 
471
    private static void stampCancelled(ByteArrayOutputStream byteStream, List<Integer> cancelledPage) throws IOException, DocumentException {
706
    private static void stampCancelled(ByteArrayOutputStream byteStream, List<Integer> cancelledPage) throws IOException, DocumentException {
472
        ByteArrayInputStream bais = new ByteArrayInputStream(byteStream.toByteArray());
707
        ByteArrayInputStream bais = new ByteArrayInputStream(byteStream.toByteArray());
473
        PdfReader pdfReader = new PdfReader(bais);
708
        PdfReader pdfReader = new PdfReader(bais);
474
        int n = pdfReader.getNumberOfPages();
709
        int n = pdfReader.getNumberOfPages();
475
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
710
        ByteArrayOutputStream baos = new ByteArrayOutputStream();