Subversion Repositories SmartDukaan

Rev

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

Rev 24845 Rev 24854
Line 3... Line 3...
3
import java.io.ByteArrayInputStream;
3
import java.io.ByteArrayInputStream;
4
import java.io.ByteArrayOutputStream;
4
import java.io.ByteArrayOutputStream;
5
import java.io.IOException;
5
import java.io.IOException;
6
import java.io.OutputStream;
6
import java.io.OutputStream;
7
import java.net.URL;
7
import java.net.URL;
-
 
8
import java.util.ArrayList;
8
import java.util.List;
9
import java.util.List;
9
import java.util.Locale;
10
import java.util.Locale;
10
import java.util.Set;
11
import java.util.Set;
11
 
12
 
12
import org.apache.logging.log4j.LogManager;
13
import org.apache.logging.log4j.LogManager;
Line 64... Line 65...
64
 
65
 
65
	private static final Locale indianLocale = Locale.getDefault();
66
	private static final Locale indianLocale = Locale.getDefault();
66
 
67
 
67
	private static final Logger LOGGER = LogManager.getLogger(PdfUtils.class);
68
	private static final Logger LOGGER = LogManager.getLogger(PdfUtils.class);
68
 
69
 
69
	public static void generateAndWrite(List<PdfModel> pdfModels, OutputStream outputStream) {
70
	public static void generateAndWrite(List<PdfModel> pdfModels, ByteArrayOutputStream outputStream) {
70
		try {
71
		try {
-
 
72
			List<Integer> caneclledPageList = new ArrayList<>();
71
			Document document = new Document();
73
			Document document = new Document();
72
			document.setMargins(0, 0, 25, 0);
74
			document.setMargins(0, 0, 25, 0);
-
 
75
			PdfWriter.getInstance(document, outputStream);
-
 
76
			document.open();
73
			for (PdfModel pdfModel : pdfModels) {
77
			for (PdfModel pdfModel : pdfModels) {
74
				CustomCustomer customer = pdfModel.getCustomer();
78
				CustomCustomer customer = pdfModel.getCustomer();
75
				CustomRetailer retailer = pdfModel.getRetailer();
79
				CustomRetailer retailer = pdfModel.getRetailer();
76
				boolean stateGst = false;
80
				boolean stateGst = false;
77
				String customerAddressStateCode = "", retailerAddressStateCode = "";
-
 
78
				if (customer.getAddress().getState().equals(retailer.getAddress().getState())) {
81
				if (customer.getAddress().getState().equals(retailer.getAddress().getState())) {
79
					stateGst = true;
82
					stateGst = true;
80
					customerAddressStateCode = Utils.getStateCode(customer.getAddress().getState());
-
 
81
				} else {
-
 
82
					customerAddressStateCode = Utils.getStateCode(customer.getAddress().getState());
-
 
83
					retailerAddressStateCode = Utils.getStateCode(retailer.getAddress().getState());
-
 
84
				}
83
				}
85
				Set<CustomOrderItem> orderItems = pdfModel.getOrderItems();
84
				Set<CustomOrderItem> orderItems = pdfModel.getOrderItems();
86
				ByteArrayOutputStream oos = null;
-
 
87
				if (pdfModel.isCancelled()) {
85
				if (pdfModel.isCancelled()) {
88
					oos = new ByteArrayOutputStream();
86
					caneclledPageList.add(1);
89
					PdfWriter.getInstance(document, oos);
-
 
90
				} else {
87
				} else {
91
					PdfWriter.getInstance(document, outputStream);
88
					caneclledPageList.add(0);
92
				}
89
				}
93
 
-
 
94
				document.open();
-
 
95
				document.addTitle(pdfModel.getTitle());
90
				document.addTitle(pdfModel.getTitle());
96
				document.addAuthor(pdfModel.getAuther());
91
				document.addAuthor(pdfModel.getAuther());
97
 
92
 
98
				Paragraph paragraphTitle = new Paragraph(INVOICE_TITLE, FONT_TITLE);
93
				Paragraph paragraphTitle = new Paragraph(INVOICE_TITLE, FONT_TITLE);
99
				paragraphTitle.setAlignment(Element.ALIGN_CENTER);
94
				paragraphTitle.setAlignment(Element.ALIGN_CENTER);
Line 110... Line 105...
110
				columnCustomerInfo.addElement(new Paragraph(StringUtils.capitalize(customer.getAddress().getLine1())
105
				columnCustomerInfo.addElement(new Paragraph(StringUtils.capitalize(customer.getAddress().getLine1())
111
						+ ", " + StringUtils.capitalize(customer.getAddress().getLine2()), FONT_NORMAL));
106
						+ ", " + StringUtils.capitalize(customer.getAddress().getLine2()), FONT_NORMAL));
112
				columnCustomerInfo.addElement(new Paragraph(
107
				columnCustomerInfo.addElement(new Paragraph(
113
						StringUtils.capitalize(customer.getAddress().getCity()) + ", "
108
						StringUtils.capitalize(customer.getAddress().getCity()) + ", "
114
								+ StringUtils.capitalize(customer.getAddress().getState()) + "("
109
								+ StringUtils.capitalize(customer.getAddress().getState()) + "("
115
								+ customerAddressStateCode + ")" + "\n" + customer.getAddress().getPinCode(),
110
								+ pdfModel.getCustomerAddressStateCode() + ")" + "\n" + customer.getAddress().getPinCode(),
116
						FONT_NORMAL));
111
						FONT_NORMAL));
117
				columnCustomerInfo.addElement(new Paragraph("Mobile - " + customer.getMobileNumber(), FONT_NORMAL));
112
				columnCustomerInfo.addElement(new Paragraph("Mobile - " + customer.getMobileNumber(), FONT_NORMAL));
118
				if (customer.getGstNumber() != null && !customer.getGstNumber().isEmpty()) {
113
				if (customer.getGstNumber() != null && !customer.getGstNumber().isEmpty()) {
119
					columnCustomerInfo
114
					columnCustomerInfo
120
							.addElement(new Paragraph("GST Number - " + customer.getGstNumber(), FONT_NORMAL));
115
							.addElement(new Paragraph("GST Number - " + customer.getGstNumber(), FONT_NORMAL));
Line 125... Line 120...
125
						.addElement(new Paragraph(StringUtils.capitalize(retailer.getAddress().getName()), FONT_BOLD));
120
						.addElement(new Paragraph(StringUtils.capitalize(retailer.getAddress().getName()), FONT_BOLD));
126
				columnRetailerInfo.addElement(new Paragraph(StringUtils.capitalize(retailer.getAddress().getLine1())
121
				columnRetailerInfo.addElement(new Paragraph(StringUtils.capitalize(retailer.getAddress().getLine1())
127
						+ ", " + StringUtils.capitalize(retailer.getAddress().getLine2()) + ", "
122
						+ ", " + StringUtils.capitalize(retailer.getAddress().getLine2()) + ", "
128
						+ StringUtils.capitalize(retailer.getAddress().getCity()) + "-"
123
						+ StringUtils.capitalize(retailer.getAddress().getCity()) + "-"
129
						+ retailer.getAddress().getPinCode() + ", " + retailer.getAddress().getState() + "("
124
						+ retailer.getAddress().getPinCode() + ", " + retailer.getAddress().getState() + "("
130
						+ (stateGst ? customerAddressStateCode : retailerAddressStateCode) + ")", FONT_BOLD));
125
						+ (stateGst ? pdfModel.getCustomerAddressStateCode() : pdfModel.getPartnerAddressStateCode()) + ")", FONT_BOLD));
131
				columnRetailerInfo
126
				columnRetailerInfo
132
						.addElement(new Paragraph("Contact No.- " + retailer.getAddress().getPhoneNumber(), FONT_BOLD));
127
						.addElement(new Paragraph("Contact No.- " + retailer.getAddress().getPhoneNumber(), FONT_BOLD));
133
				columnRetailerInfo.addElement(new Paragraph("GST NO. " + retailer.getGstNumber(), FONT_BOLD));
128
				columnRetailerInfo.addElement(new Paragraph("GST NO. " + retailer.getGstNumber(), FONT_BOLD));
134
				columnRetailerInfo.setBorder(Rectangle.NO_BORDER);
129
				columnRetailerInfo.setBorder(Rectangle.NO_BORDER);
135
 
130
 
Line 343... Line 338...
343
 
338
 
344
				Paragraph warningParagraph = new Paragraph(sb.toString(), FONT_NORMAL);
339
				Paragraph warningParagraph = new Paragraph(sb.toString(), FONT_NORMAL);
345
				warningParagraph.setIndentationLeft(40);
340
				warningParagraph.setIndentationLeft(40);
346
				document.add(Chunk.NEWLINE);
341
				document.add(Chunk.NEWLINE);
347
				document.add(warningParagraph);
342
				document.add(warningParagraph);
348
				document.close(); // no need to close PDFwriter?
-
 
349
				if (pdfModel.isCancelled()) {
-
 
350
					stampCancelled(oos, outputStream);
-
 
351
				}
-
 
352
				document.newPage();
343
				document.newPage();
353
			}
344
			}
-
 
345
			document.close(); // no need to close PDFwriter?
-
 
346
			stampCancelled(outputStream, caneclledPageList);
354
 
347
 
355
		} catch (DocumentException e) {
348
		} catch (DocumentException e) {
356
			LOGGER.error("Unable to write data to pdf file : ", e);
349
			LOGGER.error("Unable to write data to pdf file : ", e);
357
		} catch (Exception e) {
350
		} catch (Exception e) {
358
			// TODO Auto-generated catch block
351
			// TODO Auto-generated catch block
359
			e.printStackTrace();
352
			e.printStackTrace();
360
		}
353
		}
361
 
354
 
362
	}
355
	}
363
 
356
 
364
	private static void stampCancelled(ByteArrayOutputStream byteStream, OutputStream os)
357
	private static void stampCancelled(ByteArrayOutputStream byteStream, List<Integer> cancelledPage) throws IOException, DocumentException {
365
			throws IOException, DocumentException {
-
 
366
		ByteArrayInputStream bais = new ByteArrayInputStream(byteStream.toByteArray());
358
		ByteArrayInputStream bais = new ByteArrayInputStream(byteStream.toByteArray());
367
		PdfReader pdfReader = new PdfReader(bais);
359
		PdfReader pdfReader = new PdfReader(bais);
368
		int n = pdfReader.getNumberOfPages();
360
		int n = pdfReader.getNumberOfPages();
-
 
361
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
369
		PdfStamper pdfStamper = new PdfStamper(pdfReader, os);
362
		PdfStamper pdfStamper = new PdfStamper(pdfReader, baos);
370
		pdfStamper.setRotateContents(false);
363
		pdfStamper.setRotateContents(false);
371
		// text watermark
364
		// text watermark
372
		Font f = new Font(FontFamily.HELVETICA, 30);
365
		Font f = new Font(FontFamily.HELVETICA, 30);
373
		Phrase p = new Phrase("My watermark (text)", f);
366
		Phrase p = new Phrase("My watermark (text)", f);
374
		URL cancelledImgUrl = PdfUtils.class.getClassLoader().getResource("cancelled.png");
367
		URL cancelledImgUrl = PdfUtils.class.getClassLoader().getResource("cancelled.png");
Line 383... Line 376...
383
		Rectangle pagesize;
376
		Rectangle pagesize;
384
		float x, y;
377
		float x, y;
385
 
378
 
386
		// loop over every page
379
		// loop over every page
387
		for (int i = 1; i <= n; i++) {
380
		for (int i = 1; i <= n; i++) {
-
 
381
			if (cancelledPage.get(i - 1) == 1) {
388
			pagesize = pdfReader.getPageSize(i);
382
				pagesize = pdfReader.getPageSize(i);
389
			x = (pagesize.getLeft() + pagesize.getRight()) / 2;
383
				x = (pagesize.getLeft() + pagesize.getRight()) / 2;
390
			y = (pagesize.getTop() + pagesize.getBottom()) / 2;
384
				y = (pagesize.getTop() + pagesize.getBottom()) / 2;
391
			over = pdfStamper.getOverContent(i);
385
				over = pdfStamper.getOverContent(i);
392
			over.saveState();
386
				over.saveState();
393
			over.setGState(gs1);
387
				over.setGState(gs1);
394
			over.addImage(img, w, 0, 0, h, x - (w / 2), y - (h / 2));
388
				over.addImage(img, w, 0, 0, h, x - (w / 2), y - (h / 2));
395
			over.restoreState();
389
				over.restoreState();
-
 
390
			}
396
		}
391
		}
397
		pdfStamper.close();
392
		pdfStamper.close();
398
		pdfReader.close();
393
		pdfReader.close();
-
 
394
		baos.writeTo(byteStream);
399
 
395
 
400
	}
396
	}
401
 
397
 
402
	public static void generateAndWriteDebitNote(List<DebitNotePdfModel> debitNotePdfModels,
398
	public static void generateAndWriteDebitNote(List<DebitNotePdfModel> debitNotePdfModels,
403
			OutputStream outputStream) {
399
			OutputStream outputStream) {