| 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) {
|