Java tutorial
package gov.va.cem.eoas.business; import com.itextpdf.text.Document; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.Image; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.Phrase; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; import gov.va.cem.eoas.model.FaxRecord; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import javax.faces.context.FacesContext; public class FaxArchivesPDF { public InputStream generatePDF(FaxRecord data) { SimpleDateFormat newFormat = new SimpleDateFormat("MM/dd/yyyy"); Date curDate = new Date(); String caseIdData = (data.getCaseId() != null) ? data.getCaseId() : ""; String currentDate = new String(newFormat.format(curDate)); String sepDocs = (data.getSepDocs()) ? "X" : ""; String marLicense = (data.getMarLicense()) ? "X" : ""; String adminDecision = (data.getAdminDecision()) ? "X" : ""; String deathCert = (data.getDeathCert()) ? "X" : ""; String divorceDecree = (data.getDivorceDecree()) ? "X" : ""; String otherCheck = (data.getOtherCheck()) ? "X" : ""; String transDate = (data.getTransDate() != null) ? new String(newFormat.format(data.getTransDate())) : ""; String priorLoc = (data.getPriorLoc() != null) ? data.getPriorLoc() : ""; String otherComments = (data.getOtherComments() != null) ? data.getOtherComments() : ""; String remarks = (data.getRemarks() != null) ? data.getRemarks() : ""; String to = data.getTo().getDisplayName(); String fileNo = (data.getFileNo() != null) ? data.getFileNo() : ""; String vetName = (data.getVetName() != null) ? data.getVetName() : ""; String ssnData = (data.getSSN() != null) ? data.getSSN() : ""; String snData = (data.getSN() != null) ? data.getSN() : ""; String farcNo = (data.getFarcNo() != null) ? data.getFarcNo() : ""; String boxNoData = (data.getBoxNo() != null) ? data.getBoxNo() : ""; String faxPages = (data.getFaxPages() != null) ? data.getFaxPages() : ""; ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); Document document = new Document(PageSize.A4, 50, 50, 50, 50); try { PdfWriter.getInstance(document, outputStream); //Font font1 = new Font(Font.FontFamily.TIMES_ROMAN, 9); Font font2 = new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.BOLD); Font font3 = new Font(Font.FontFamily.TIMES_ROMAN, 11); Font fontBold = new Font(Font.FontFamily.TIMES_ROMAN, 11, Font.BOLD); //Font fontUnderline = new Font(Font.FontFamily.TIMES_ROMAN, 11, Font.UNDERLINE); Font fontHeader = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD); document.open(); String dirPath = FacesContext.getCurrentInstance().getExternalContext() .getInitParameter("image_file_path"); // Check servlet context for invalid character if (dirPath.contains("..")) throw new IllegalArgumentException( "Servlet context contains invalid character(s). Security may have been compromised."); File dir = new File(dirPath); Image image = Image.getInstance(dir + "/ArchiveFaxHeader.jpg"); image.scalePercent(69, 66); document.add(image); // Create first table float[] colsWidthTo = { .3f, 2f, .4f, 2f }; PdfPTable addressTable = new PdfPTable(colsWidthTo); addressTable.setWidthPercentage(100); PdfPCell toLabel = new PdfPCell(new Phrase("TO:", fontBold)); toLabel.setRowspan(3); toLabel.setBorderWidthRight(0); addressTable.addCell(toLabel); PdfPCell toName = new PdfPCell(new Phrase(to, fontBold)); toName.setBorderWidthLeft(0); toName.setBorderWidthBottom(0); addressTable.addCell(toName); PdfPCell fromLabel = new PdfPCell(new Phrase("FROM:", fontBold)); fromLabel.setBorderWidthRight(0); fromLabel.setBorderWidthBottom(0); addressTable.addCell(fromLabel); PdfPCell fromName = new PdfPCell(new Phrase("Eligibility Case Manager", fontBold)); fromName.setBorderWidthBottom(0); fromName.setBorderWidthLeft(0); addressTable.addCell(fromName); PdfPCell toAddress = new PdfPCell(new Phrase("", fontBold)); toAddress.setBorderWidthLeft(0); toAddress.setBorderWidthTop(0); addressTable.addCell(toAddress); PdfPCell fromDateLabel = new PdfPCell(new Phrase("DATE:", fontBold)); fromDateLabel.setBorderWidthRight(0); fromDateLabel.setBorderWidthTop(0); //toLabel.setRowspan(2); addressTable.addCell(fromDateLabel); PdfPCell dateFrom = new PdfPCell(new Phrase(currentDate, fontBold)); dateFrom.setBorderWidthTop(0); dateFrom.setBorderWidthLeft(0); addressTable.addCell(dateFrom); addressTable.setSpacingBefore(15); addressTable.setSpacingAfter(15); document.add(addressTable); float[] colsWidthCaseId = { .7f, 3f }; PdfPTable caseTable = new PdfPTable(colsWidthCaseId); caseTable.setWidthPercentage(100); PdfPCell caseIdLabel = new PdfPCell(new Phrase("Eligibility Case Id:", font3)); caseIdLabel.setBorderWidth(0); caseTable.addCell(caseIdLabel); PdfPCell caseIdInput = new PdfPCell(new Phrase(caseIdData, font3)); caseIdInput.setBorderWidth(0); caseTable.addCell(caseIdInput); caseTable.setSpacingAfter(8); document.add(caseTable); float[] colsWidthFolder = { .5f, 3f }; PdfPTable folderTable = new PdfPTable(colsWidthFolder); folderTable.setWidthPercentage(100); PdfPCell folderLabel = new PdfPCell(new Phrase("VA file No:", font3)); folderLabel.setBorderWidth(0); folderTable.addCell(folderLabel); PdfPCell folder = new PdfPCell(new Phrase(fileNo, font3)); folder.setBorderWidth(0); folderTable.addCell(folder); folderTable.setSpacingAfter(8); document.add(folderTable); float[] colsWidthRef = { .7f, 3f }; PdfPTable refTable = new PdfPTable(colsWidthRef); refTable.setWidthPercentage(100); PdfPCell ref = new PdfPCell(new Phrase("Veteran's Name:", font3)); ref.setBorderWidth(0); refTable.addCell(ref); PdfPCell refName = new PdfPCell(new Phrase(vetName, font3)); refName.setBorderWidth(0); refTable.addCell(refName); refTable.setSpacingAfter(8); document.add(refTable); float[] colsWidthSSN = { .3f, 2f, .25f, 2f }; PdfPTable ssnTable = new PdfPTable(colsWidthSSN); ssnTable.setWidthPercentage(100); PdfPCell ssnLabel = new PdfPCell(new Phrase("SSN:", font3)); ssnLabel.setBorderWidth(0); ssnTable.addCell(ssnLabel); PdfPCell ssn = new PdfPCell(new Phrase(ssnData, font3)); ssn.setBorderWidth(0); ssnTable.addCell(ssn); PdfPCell snLabel = new PdfPCell(new Phrase("SN:", font3)); snLabel.setBorderWidth(0); ssnTable.addCell(snLabel); PdfPCell sn = new PdfPCell(new Phrase(snData, font3)); sn.setBorderWidth(0); ssnTable.addCell(sn); ssnTable.setSpacingAfter(8); document.add(ssnTable); float[] colsWidthFARC = { .6f, 2f, .8f, 2f }; PdfPTable farcTable = new PdfPTable(colsWidthFARC); farcTable.setWidthPercentage(100); PdfPCell farcLabel = new PdfPCell(new Phrase("FARC No:", font3)); farcLabel.setBorderWidth(0); farcTable.addCell(farcLabel); PdfPCell farc = new PdfPCell(new Phrase(farcNo, font3)); farc.setBorderWidth(0); farcTable.addCell(farc); PdfPCell farcDateLabel = new PdfPCell(new Phrase("Transfer Date:", font3)); farcDateLabel.setBorderWidth(0); farcTable.addCell(farcDateLabel); PdfPCell farcDate = new PdfPCell(new Phrase(transDate, font3)); farcDate.setBorderWidth(0); farcTable.addCell(farcDate); farcTable.setSpacingAfter(8); document.add(farcTable); float[] colsWidthLoc = { .8f, 2f, .6f, 2f }; PdfPTable locTable = new PdfPTable(colsWidthLoc); locTable.setWidthPercentage(100); PdfPCell locLabel = new PdfPCell(new Phrase("Prior Location:", font3)); locLabel.setBorderWidth(0); locTable.addCell(locLabel); PdfPCell location = new PdfPCell(new Phrase(priorLoc, font3)); location.setBorderWidth(0); locTable.addCell(location); PdfPCell boxNoLabel = new PdfPCell(new Phrase("Box No:", font3)); boxNoLabel.setBorderWidth(0); locTable.addCell(boxNoLabel); PdfPCell boxNo = new PdfPCell(new Phrase(boxNoData, font3)); boxNo.setBorderWidth(0); locTable.addCell(boxNo); locTable.setSpacingAfter(8); document.add(locTable); float[] colsWidthRemarks = { .6f, 5f }; PdfPTable remarks1Table = new PdfPTable(colsWidthRemarks); remarks1Table.setWidthPercentage(100); PdfPCell remark1Label = new PdfPCell(new Phrase("Remarks:", font3)); remark1Label.setBorderWidth(0); remarks1Table.addCell(remark1Label); PdfPCell remarks1Input = new PdfPCell(new Phrase( "Please provide copy(ies) of the following document(s) to establish eligibility for burial in a national cemetery.", font3)); remarks1Input.setBorderWidth(0); remarks1Table.addCell(remarks1Input); remarks1Table.setSpacingAfter(8); document.add(remarks1Table); float[] colsWidthDocs = { .4f, 2f, .4f, 2f }; PdfPTable docsTable = new PdfPTable(colsWidthDocs); docsTable.setWidthPercentage(100); PdfPCell docsLabel = new PdfPCell(new Phrase(sepDocs, font3)); docsLabel.setHorizontalAlignment(Element.ALIGN_CENTER); docsLabel.setBorderWidth(0); docsLabel.setBorderWidthBottom(1); docsTable.addCell(docsLabel); PdfPCell docs1 = new PdfPCell(new Phrase("Separation Document(s)", font3)); docs1.setBorderWidth(0); docsTable.addCell(docs1); PdfPCell docs2 = new PdfPCell(new Phrase(deathCert, font3)); docs2.setHorizontalAlignment(Element.ALIGN_CENTER); docs2.setBorderWidth(0); docs2.setBorderWidthBottom(1); docsTable.addCell(docs2); PdfPCell docs3 = new PdfPCell(new Phrase("Death Certificate", font3)); docs3.setBorderWidth(0); docsTable.addCell(docs3); PdfPCell docs4 = new PdfPCell(new Phrase(marLicense, font3)); docs4.setHorizontalAlignment(Element.ALIGN_CENTER); docs4.setBorderWidth(0); docs4.setBorderWidthBottom(1); docsTable.addCell(docs4); PdfPCell docs5 = new PdfPCell(new Phrase("Marriage License", font3)); docs5.setBorderWidth(0); docsTable.addCell(docs5); PdfPCell docs6 = new PdfPCell(new Phrase(divorceDecree, font3)); docs6.setHorizontalAlignment(Element.ALIGN_CENTER); docs6.setBorderWidth(0); docs6.setBorderWidthBottom(1); docsTable.addCell(docs6); PdfPCell docs7 = new PdfPCell(new Phrase("Divorce Decree", font3)); docs7.setBorderWidth(0); docsTable.addCell(docs7); PdfPCell docs8 = new PdfPCell(new Phrase(adminDecision, font3)); docs8.setHorizontalAlignment(Element.ALIGN_CENTER); docs8.setBorderWidth(0); docs8.setBorderWidthBottom(1); docsTable.addCell(docs8); PdfPCell docs9 = new PdfPCell(new Phrase("VA Admin Decision", font3)); docs9.setBorderWidth(0); docsTable.addCell(docs9); PdfPCell docs10 = new PdfPCell(new Phrase("", font3)); docs10.setBorderWidth(0); docsTable.addCell(docs10); PdfPCell docs11 = new PdfPCell(new Phrase("", font3)); docs11.setBorderWidth(0); docsTable.addCell(docs11); document.add(docsTable); float[] colsWidthOther = { .4f, .4f, 4f }; PdfPTable otherDocTable = new PdfPTable(colsWidthOther); otherDocTable.setWidthPercentage(100); PdfPCell otherDoc1 = new PdfPCell(new Phrase(otherCheck, font3)); otherDoc1.setHorizontalAlignment(Element.ALIGN_CENTER); otherDoc1.setBorderWidth(0); otherDoc1.setBorderWidthBottom(1); otherDocTable.addCell(otherDoc1); PdfPCell otherDoc2 = new PdfPCell(new Phrase("Other", font3)); otherDoc2.setBorderWidth(0); otherDocTable.addCell(otherDoc2); PdfPCell otherDoc3 = new PdfPCell(new Phrase("", font3)); otherDoc3.setBorderWidth(0); otherDocTable.addCell(otherDoc3); otherDocTable.setSpacingAfter(8); document.add(otherDocTable); if (!otherComments.equals("")) { float[] colsWidthOtherComments = { 1.1f, 5f }; PdfPTable otherCommentsTable = new PdfPTable(colsWidthOtherComments); otherCommentsTable.setWidthPercentage(100); PdfPCell otherCommentLabel = new PdfPCell(new Phrase("Other Comments:", font3)); otherCommentLabel.setBorderWidth(0); otherCommentsTable.addCell(otherCommentLabel); PdfPCell otherCommentsInput = new PdfPCell(new Phrase(otherComments, font3)); otherCommentsInput.setBorderWidth(0); otherCommentsTable.addCell(otherCommentsInput); otherCommentsTable.setSpacingAfter(8); document.add(otherCommentsTable); } PdfPTable remarksTable = new PdfPTable(colsWidthRemarks); remarksTable.setWidthPercentage(100); PdfPCell remarkLabel = new PdfPCell(new Phrase("Remarks:", font3)); remarkLabel.setBorderWidth(0); remarksTable.addCell(remarkLabel); PdfPCell remarksInput = new PdfPCell(new Phrase(remarks, font3)); remarksInput.setBorderWidth(0); remarksTable.addCell(remarksInput); remarksTable.setSpacingAfter(8); document.add(remarksTable); Paragraph expediteOne = new Paragraph("-- PLEASE EXPEDITE --", font3); expediteOne.setSpacingBefore(5); expediteOne.setSpacingAfter(10); document.add(expediteOne); Paragraph disclosure = new Paragraph( "This fax is intended only for the use of the person or office to which it is addressed and may contain information that is privileged, confidential, or protected by law. All others are hereby notified that the receipt of this fax does not waive any applicable privilege or exemption for disclosure and that any dissemination, distribution, or copying of this communication is prohibited. If you have received this fax in error, please notify this office immediately at the telephone number listed above.", font2); disclosure.setAlignment(Element.ALIGN_JUSTIFIED); disclosure.setSpacingBefore(5); disclosure.setSpacingAfter(10); document.add(disclosure); float[] colsWidthPages = { 5f, .5f, 2f }; PdfPTable pagesTable = new PdfPTable(colsWidthPages); pagesTable.setWidthPercentage(71); PdfPCell pageOneLabel = new PdfPCell( new Phrase("This fax sheet consists of the cover page and ", fontHeader)); pageOneLabel.setBorderWidth(0); pageOneLabel.setHorizontalAlignment(Element.ALIGN_RIGHT); pagesTable.addCell(pageOneLabel); PdfPCell pages = new PdfPCell(new Phrase(faxPages, fontHeader)); pages.setBorderWidth(0); pages.setHorizontalAlignment(Element.ALIGN_CENTER); pages.setBorderWidthBottom(1); pagesTable.addCell(pages); PdfPCell pageTwoLabel = new PdfPCell(new Phrase(" additional pages", fontHeader)); pageTwoLabel.setBorderWidth(0); pagesTable.addCell(pageTwoLabel); pagesTable.setSpacingAfter(8); document.add(pagesTable); Paragraph expediteTwo = new Paragraph("FAX: 816-268-8163 ***** BURIAL PLEASE EXPEDITE *****", fontBold); expediteTwo.setSpacingBefore(5); expediteTwo.setSpacingAfter(10); document.add(expediteTwo); document.close(); } catch (Exception ex) { System.err.println(ex.getMessage()); } return new ByteArrayInputStream(outputStream.toByteArray()); } }