package com.suarte.reports;
import java.io.IOException;
import java.io.OutputStream;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.Paragraph;
import com.lowagie.text.BadElementException;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.Image;
import com.lowagie.text.pdf.PdfPTable;
import com.suarte.core.Payment;
import com.suarte.utils.MathUtils;
import com.suarte.utils.NumberToLetters;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.net.MalformedURLException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* @date Mar 12, 2011
* @author Ggutierrez
*/
public class ReceiptFormatToPdf {
Image logo;
Format formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");
Format simpleFormat = new SimpleDateFormat("dd/MM/yyyy");
private static final NumberToLetters numberToLetters = new NumberToLetters();
private static final MathUtils mathUtils = new MathUtils();
public ReceiptFormatToPdf() {
try {
logo = Image.getInstance(getClass().getResource("/suarte_logo.png"));
} catch (BadElementException ex) {
Logger.getLogger(ReceiptFormatToPdf.class.getName()).log(Level.SEVERE, null, ex);
} catch (MalformedURLException ex) {
Logger.getLogger(ReceiptFormatToPdf.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(ReceiptFormatToPdf.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void write(Payment payment, OutputStream out) {
Document document = new Document();
try {
// step 2:
// we create a writer that listens to the document and directs a PDF-stream to System.out (and a txt file)
PdfWriter.getInstance(document, out);
// step 3: we open the document
document.open();
document.add(blankSpace());
document.add(blankSpace());
document.add(blankSpace());
document.add(blankSpace());
document.add(blankSpace());
document.add(blankSpace());
addHeader(document, payment);
document.close();
} catch (DocumentException ex) {
Logger.getLogger(ReceiptFormatToPdf.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void addHeader(Document document, Payment payment) throws DocumentException {
//Table size 2 columns
float[] widths = {0.8f, 0.3f};
PdfPTable header = new PdfPTable(widths);
String paymentAmount = "";
String currencyDescription = "";
if (payment.getCurrency().getSymbol().equals("C$")) {
paymentAmount = String.valueOf(MathUtils.round(payment.getLocalAmount()));
} else {
paymentAmount = String.valueOf(MathUtils.round(payment.getForeignAmount()));
// One more line
header.getDefaultCell().setBorder(0);
header.addCell(blankSpace());
header.addCell(blankSpace());
}
currencyDescription = payment.getCurrency().getDescription();
header.setWidthPercentage(78);
header.getDefaultCell().setBorder(0);
header.addCell(blankSpace());
// Amount
Paragraph p = new Paragraph(" " + paymentAmount, new Font(Font.HELVETICA, 12, Font.NORMAL));
p.setAlignment(Element.ALIGN_RIGHT);
header.addCell(p);
// Date
header.getDefaultCell().setColspan(2);
String paymentDate = simpleFormat.format(payment.getDate());
p = new Paragraph(paymentDate, new Font(Font.HELVETICA, 12, Font.NORMAL));
p.setAlignment(Element.ALIGN_LEFT);
header.addCell(p);
// Blank Line
header.addCell(blankSpace());
// Recibimos de line: Company
String companyName = payment.getCompany().getDescription();
p = new Paragraph(" " + companyName, new Font(Font.HELVETICA, 12, Font.NORMAL));
p.setAlignment(Element.ALIGN_LEFT);
header.addCell(p);
// Blank Line
header.addCell(blankSpace());
// La cantidad de: Amount
Long entireAmount = Long.valueOf(paymentAmount.substring(0, paymentAmount.indexOf(".")));
String cents = paymentAmount.substring(paymentAmount.indexOf(".") + 1, paymentAmount.length());
Long centsAmount = cents.length() == 1 ? Long.valueOf(cents) * 10 : Long.valueOf(cents);
String amountDescription = numberToLetters.toLetras(entireAmount) + " " + currencyDescription;
String centsDescription = centsAmount != 0 ? numberToLetters.toLetras(centsAmount) : null;
// First line
header.getDefaultCell().setColspan(2);
p = new Paragraph(" " + amountDescription, new Font(Font.HELVETICA, 12, Font.NORMAL));
p.setAlignment(Element.ALIGN_LEFT);
header.getDefaultCell().setColspan(2);
header.addCell(p);
// Blank Line
header.addCell(blankSpace());
// Second line
if (centsDescription != null) {
header.getDefaultCell().setColspan(2);
p = new Paragraph("con " + centsDescription, new Font(Font.HELVETICA, 12, Font.NORMAL));
p.setAlignment(Element.ALIGN_LEFT);
header.getDefaultCell().setColspan(2);
header.addCell(p);
}
// Blank Line
header.addCell(blankSpace());
// Concepto
header.getDefaultCell().setColspan(2);
String description = payment.getDescription();
p = new Paragraph(" " + description, new Font(Font.HELVETICA, 12, Font.NORMAL));
p.setAlignment(Element.ALIGN_LEFT);
header.getDefaultCell().setColspan(2);
header.addCell(p);
// Blank Line (8)
header.addCell(blankSpace());
header.addCell(blankSpace());
header.addCell(blankSpace());
header.addCell(blankSpace());
header.addCell(blankSpace());
header.addCell(blankSpace());
header.addCell(blankSpace());
// Check or efective
header.getDefaultCell().setColspan(2);
String type = payment.getType().toString();
if (type.equals("Efectivo")) {
p = new Paragraph(" ex", new Font(Font.HELVETICA, 12, Font.NORMAL));
p.setAlignment(Element.ALIGN_LEFT);
header.addCell(p);
} else if (type.equals("Cheque")) {
// Additional line
header.addCell(blankSpace());
header.addCell(blankSpace());
p = new Paragraph(" cx", new Font(Font.HELVETICA, 12, Font.NORMAL));
p.setAlignment(Element.ALIGN_LEFT);
header.addCell(p);
}
document.add(header);
}
public Paragraph blankSpace() {
//White Line
String text = " ";
Paragraph s = new Paragraph(text);
s.setAlignment(Element.ALIGN_CENTER);
return s;
}
}