The pdf created contains module, submodule, maximum score, actual score, weighted score, etc.. Also the module details and sub module details are proerly distinguished .
import java.awt.Color;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.struts.actions.DownloadAction.StreamInfo;
import jxl.format.Colour;
import jxl.write.WriteException;
import com.itextpdf.text.Anchor;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chapter;
import com.itextpdf.text.DocListener;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
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.Rectangle;
import com.itextpdf.text.Section;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfTemplate;
import com.itextpdf.text.pdf.PdfWriter;
import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
public class BenchMarkingConvertToPdfService extends PdfPageEventHelper {
private static String FILE = "c:/DownloadPdf.pdf";
private static Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18,
Font.BOLD);
private static Font redFont = new Font(Font.FontFamily.TIMES_ROMAN, 12,
Font.NORMAL, BaseColor.RED);
private static Font subFont = new Font(Font.FontFamily.TIMES_ROMAN, 14,
Font.BOLD);
private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12,
Font.BOLD);
private String inputFile;
private static final String DATE_PATTERN = "dd-MMM-yy HH:mm:ss a";
private static final String PAGE_NUMBER = "Page %d";
private static final String ART = "art";
private static final Font PARENT_MODULE_FONT = new Font(
Font.FontFamily.TIMES_ROMAN, ErfConstants.CHILD_FONT, Font.NORMAL);
private static final Font SUB_MODULE_FONT = new Font(
Font.FontFamily.TIMES_ROMAN, ErfConstants.CHILD_FONT, Font.NORMAL);
private static final Font DESCRIPTION_FONT = new Font(
Font.FontFamily.TIMES_ROMAN, ErfConstants.CHILD_FONT);
/* private static final Font DESCRIPTION_FONT1 = new Font(
Font.FontFamily.TIMES_ROMAN, ErfConstants.CHILD_FONT);*/
private static final Font RELEVANCY_FONT = new Font(
Font.FontFamily.TIMES_ROMAN, ErfConstants.CHILD_FONT, Font.NORMAL);
private static final Font COLUMN_HEADING_FONT = new Font(
Font.FontFamily.TIMES_ROMAN, ErfConstants.CHILD_FONT, Font.NORMAL);
private static final Font USER_DEF_REQ_FONT = new Font(
Font.FontFamily.TIMES_ROMAN, ErfConstants.CHILD_FONT, Font.NORMAL,
new BaseColor(200, 30, 30));
//private static final String PROJECT_NAME = "Project Name : ";
private static final String MODULE = "Module : ";
private static final String SUB_MODULE = "Sub Module : ";
private static final String BREAKLINE = "nn";
private static final Rectangle RECTANGLE = new Rectangle(36, 54, 559, 788);
private static BenchMarkingConvertToPdfService benchMarkingconvertToPdfService = null;
static int pagenumber;
PdfTemplate total;
public static synchronized BenchMarkingConvertToPdfService getInstance() {
pagenumber = 0;
if (benchMarkingconvertToPdfService == null) {
benchMarkingconvertToPdfService = new BenchMarkingConvertToPdfService();
}
return benchMarkingconvertToPdfService;
}
BenchMarkingConvertToPdfService() {
}
public void onStartPage(PdfWriter writer, Document document) {
pagenumber++;
}
public byte[] convertToPdfService(List<BenchMarkingPdfBean> benchMarkingPdfBeanList,Map<Long,Integer> reqPerSubModule)
throws DocumentException, IOException {
Document document = new Document(PageSize.A4,
ErfConstants.DOCUMENT_MARGINLEFT,
ErfConstants.DOCUMENT_MARGINRIGHT,
ErfConstants.DOCUMENT_MARGINTOP,
ErfConstants.DOCUMENT_MARGINBOTTOM);
ByteOutputStream out = new ByteOutputStream();
PdfWriter writer = PdfWriter.getInstance(document, out);
BenchMarkingConvertToPdfService event = BenchMarkingConvertToPdfService.getInstance();
writer.setBoxSize(ART, RECTANGLE);
writer.setPageEvent(event);
document.open();
float[] colsWidth = {ErfConstants.FEATURES_COLUMNWIDTH,
ErfConstants.RELEVANCY_COLUMNWIDTH,
ErfConstants.EVALDIM_COLUMNWIDTH,
ErfConstants.WEIGHTAGE_COLUMNWIDTH,
ErfConstants.MAXSCORE_COLUMNWIDTH,
ErfConstants.ACTUALSCORE_COLUMNWIDTH,
ErfConstants.WEIGHTEDSCORE_COLUMNWIDTH,
ErfConstants.WEIGHTEDSCORE_COLUMNWIDTH,
ErfConstants.SCORE0_COLUMNWIDTH,
ErfConstants.SCORE1_COLUMNWIDTH,
ErfConstants.SCORE2_COLUMNWIDTH,
ErfConstants.SCORE3_COLUMNWIDTH};
PdfPTable table = new PdfPTable(colsWidth);
table.setWidthPercentage(100f);
float[] cols1Width = {ErfConstants.SCORE0_COLUMNWIDTH,
ErfConstants.SCORE1_COLUMNWIDTH,
ErfConstants.SCORE2_COLUMNWIDTH,
ErfConstants.SCORE3_COLUMNWIDTH};
PdfPTable table1= new PdfPTable(cols1Width);
table1.setWidthPercentage(30f);
PdfPCell c1;
PdfPCell c3;
String submodule="";
PdfPCell cweightedscore = new PdfPCell(new Phrase("weightedscore"));
cweightedscore.setBackgroundColor(new BaseColor(255, 204, 0));
Image image = Image
.getInstance("http://localhost:9080/EcommerceRequirementFramework/images/header.jpg");
// image.scaleToFit(400F, 6000F);
image.scalePercent(54, 40);
document.add(image);
document.add(new Paragraph(BREAKLINE, DESCRIPTION_FONT));
// document.add(new Paragraph(BREAKLINE,DESCRIPTION_FONT));
Image checkedImage = Image
.getInstance("http://localhost:9080/EcommerceRequirementFramework/images/Tick36.jpg");
checkedImage.scalePercent(20, 20);
for(int i=0;i<benchMarkingPdfBeanList.size();i++){
System.out.println("benchMarkingPdfBeanList.get(i).getParentModulespan()"+benchMarkingPdfBeanList.get(i).getParentModulespan());
if( benchMarkingPdfBeanList.get(i).getParentModulespan()!=0)
{
document.add(new Paragraph(MODULE + benchMarkingPdfBeanList.get(i).getFunctionalModules(), catFont));
//document.add(new Phrase("Score Evaluation Criteria",catFont));
}
if(benchMarkingPdfBeanList.get(i).getSubModulespan()!=0)
{
submodule=benchMarkingPdfBeanList.get(i).getSubModules();
System.out.println("submodule"+submodule);
c3 = new PdfPCell(new Phrase("Features"));
c3.setBackgroundColor(BaseColor.GRAY);
c3.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c3);
c1 = new PdfPCell(new Phrase("Relevancy"));
c1.setBackgroundColor(BaseColor.GRAY);
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
c1 = new PdfPCell(new Phrase("Importance Dimension"));
c1.setBackgroundColor(BaseColor.GRAY);
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
c1 = new PdfPCell(new Phrase("Weightage"));
c1.setBackgroundColor(BaseColor.GRAY);
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
c1 = new PdfPCell(new Phrase("Maximum Score"));
c1.setBackgroundColor(BaseColor.GRAY);
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
c1 = new PdfPCell(new Phrase("Actual Score"));
c1.setBackgroundColor(BaseColor.GRAY);
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
c1 = new PdfPCell(new Phrase("Weighted Score"));
c1.setBackgroundColor(BaseColor.GRAY);
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
c1 = new PdfPCell(new Phrase(""));
c1.setBackgroundColor(BaseColor.WHITE);
/*c1.setHorizontalAlignment(Element.ALIGN_CENTER);*/
c1.setBorder(0);
table.addCell(c1);
c1 = new PdfPCell(new Phrase("0"));
c1.setBackgroundColor(BaseColor.GRAY);
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
c1 = new PdfPCell(new Phrase("1"));
c1.setBackgroundColor(BaseColor.GRAY);
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
c1 = new PdfPCell(new Phrase("2"));
c1.setBackgroundColor(BaseColor.GRAY);
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
c1 = new PdfPCell(new Phrase("3"));
c1.setBackgroundColor(BaseColor.GRAY);
c1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(c1);
//table.setHeaderRows(1);
}
table.addCell(new Phrase(benchMarkingPdfBeanList.get(i).getFeatures(),DESCRIPTION_FONT));
table.addCell(new Phrase(benchMarkingPdfBeanList.get(i).getRelevancy(),DESCRIPTION_FONT));
table.addCell(new Phrase(benchMarkingPdfBeanList.get(i).getImportanceDimension(),DESCRIPTION_FONT));
if(benchMarkingPdfBeanList.get(i).getWeightage()!=null)
{
table.addCell(new Phrase(benchMarkingPdfBeanList.get(i).getWeightage().toString(),DESCRIPTION_FONT));
}
else
{
table.addCell("");
}
if(benchMarkingPdfBeanList.get(i).getMaximumScore()!=null)
table.addCell(new Phrase(benchMarkingPdfBeanList.get(i).getMaximumScore().toString(),DESCRIPTION_FONT));
else
table.addCell("");
if(benchMarkingPdfBeanList.get(i).getActualScore()!=null)
table.addCell(new Phrase(benchMarkingPdfBeanList.get(i).getActualScore().toString(),DESCRIPTION_FONT));
else
table.addCell("");
table.addCell(new Phrase(benchMarkingPdfBeanList.get(i).getWeightedScore().toString(),DESCRIPTION_FONT));
if(benchMarkingPdfBeanList.get(i).getScoreCriteria0()!=null)
{
c1 = new PdfPCell(new Phrase(""));
c1.setBorder(0);
//c1.setBorderColor(BaseColor.WHITE);
table.addCell(c1);
table.addCell(new Phrase(benchMarkingPdfBeanList.get(i).getScoreCriteria0(),DESCRIPTION_FONT));
table.addCell(new Phrase(benchMarkingPdfBeanList.get(i).getScoreCriteria1(),DESCRIPTION_FONT));
table.addCell(new Phrase(benchMarkingPdfBeanList.get(i).getScoreCriteria2(),DESCRIPTION_FONT));
table.addCell(new Phrase(benchMarkingPdfBeanList.get(i).getScoreCriteria3(),DESCRIPTION_FONT));
}
else
{
c1 = new PdfPCell(new Phrase(""));
c1.setBorder(0);
table.addCell(c1);
c1 = new PdfPCell(new Phrase(""));
table.addCell(c1);
table.addCell(new Phrase("",DESCRIPTION_FONT));
table.addCell(new Phrase("",DESCRIPTION_FONT));
table.addCell(new Phrase("",DESCRIPTION_FONT));
}
if( (i<(benchMarkingPdfBeanList.size()-1)&& benchMarkingPdfBeanList.get(i+1).getSubModulespan()!=0) ||(i==(benchMarkingPdfBeanList.size()-1)))
{
document.add(new Paragraph(SUB_MODULE + submodule +"tttttttttttttttttttttttttttttttttttttttttttt Score Evaluation Criteria", subFont));
document.add(new Paragraph(BREAKLINE, DESCRIPTION_FONT));
document.add(table);
document.add(new Paragraph(BREAKLINE, DESCRIPTION_FONT));
table= new PdfPTable(colsWidth);
table.setWidthPercentage(100f);
}
}
document.close();
PdfReader reader = new PdfReader(new ByteArrayInputStream(out.getBytes()));
int n = reader.getNumberOfPages();
// Create a stamper that will copy the document to a new file
PdfStamper stamp = new PdfStamper(reader, out);
int i = 1;
PdfContentByte under;
Image img = Image
.getInstance("http://localhost:9080/EcommerceRequirementFramework/images/watermark.jpg");
while (i <= n) {
img.setAbsolutePosition(40, 100);
under = stamp.getUnderContent(i);
under.addImage(img);
// Text over the existing page
/*
* over = stamp.getOverContent(i); over.beginText();
* over.setFontAndSize(bf, 18); over.showText("page " + i);
* over.endText();
*/
i++;
}
stamp.close();
return out.getBytes();
}
/**
* Adds the header and the footer.
*
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(com.itextpdf.text.pdf.PdfWriter,
* com.itextpdf.text.Document)
*/
public void onEndPage(PdfWriter writer, Document document) {
Rectangle rect = writer.getBoxSize(ART);
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_CENTER, new Phrase(String.format(PAGE_NUMBER,
pagenumber)), (rect.getLeft() + rect.getRight()) / 2,
rect.getBottom() - 18, 0);
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_LEFT, new Phrase(), rect
.getLeft(), rect.getBottom() - 18, 0);
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_RIGHT, new Phrase(new SimpleDateFormat(
DATE_PATTERN).format(new Date())), rect.getRight(),
rect.getBottom() - 18, 0);
}
protected class ByteArrayStreamInfo implements StreamInfo {
protected String contentType;
protected byte[] bytes;
public ByteArrayStreamInfo(String contentType, byte[] bytes) {
this.contentType = contentType;
this.bytes = bytes;
}
public String getContentType() {
return contentType;
}
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(bytes);
}
}
}