This forum is closed to new posts and responses. Individual names altered for privacy purposes. The information contained in this website is provided for informational purposes only and should not be construed as a forum for customer support requests. Any customer support requests should be directed to the official HCL customer support channels below:

HCL Software Customer Support Portal for U.S. Federal Government clients
HCL Software Customer Support Portal



Nov 13, 2013, 5:48 AM
41 Posts

iText insert logo

  • Category: Custom JSF code (Eclipse IDE)
  • Platform: All
  • Release: 9.0
  • Role: Developer
  • Tags: iText insert logo
  • Replies: 3

Dear Team,

 

I am generating pdf file in xpages.

Working fine .But i want to add logo on header and footer how to add please guide me ..

importPackage(com.itextpdf);
//Initialization
var con = facesContext.getExternalContext();
var response:com.ibm.xsp.webapp.XspHttpServletResponse = con.getResponse();
var fileName=dt.getDateOnly()+".pdf";
//setting response headers for browser to recognize data
response.setContentType("application/pdf");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", -1);
response.setHeader("Content-Disposition","attachment; filename=\""+fileName+"\"");
var imageString="logo.jpeg";
// Setup the PDF Output Stream
var newPDF:com.itextpdf.text.Document = new com.itextpdf.text.Document();
//var image:com.itextpdf.text.Image = new com.itextpdf.text.Image.getInstance(imagestring);
var writer = com.itextpdf.text.pdf.PdfWriter.getInstance(newPDF,response.getOutputStream());
newPDF.open();
//Add Imgae
newPDF.add(new com.itextpdf.text.Paragraph("To,"));
newPDF.add(new com.itextpdf.text.Paragraph(getComponent("inputText1").getValue()));
newPDF.add(new com.itextpdf.text.Paragraph("Sub: "+getComponent("inputText2").getValue()));
newPDF.add(new com.itextpdf.text.Paragraph("Sir,"));
newPDF.add(new com.itextpdf.text.Paragraph("       With refrence to the above said work, we are pleased to offer our best price as follows:-"));
newPDF.add(new com.itextpdf.text.Paragraph(''));
newPDF.add(new com.itextpdf.text.Paragraph(''));
newPDF.add(new com.itextpdf.text.Chunk.NEWLINE);
//Create a new table with 3 cells, width = 100%
var table = new com.itextpdf.text.pdf.PdfPTable(6);
//Value Description
var desc1=getComponent("inputText180").getValue();
var desc2=getComponent("inputText181").getValue();
var desc3=getComponent("inputText182").getValue();
var nos1=getComponent("inputText183").getValue();
var rate1=getComponent("inputText184").getValue();
var Qnty1=getComponent("inputText185").getValue();
var price1=getComponent("inputText186").getValue();
//description:inputText180
var cell1 = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph("S.No."));
var cell2 = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph("Description"));
var cell3 = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph("Nos"));
var cell4 = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph("Rate"));
var cell5 = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph("Quantity"));
var cell6 = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph("Price"));
table.setWidthPercentage(100);
 
table.addCell(cell1);
table.addCell(cell2);
table.addCell(cell3);
table.addCell(cell4);
table.addCell(cell5);
table.addCell(cell6);
newPDF.add(table);
newPDF.add(
 
//End Here
newPDF.close();
writer.close();

 

Thanks in advance

Ajeet Kumar Gupt

Nov 14, 2013, 8:13 AM
5 Posts
Adding image

I'm not sure, if this is correct way to add header/footer images, but I've used code below to add image to specific location in PDF:

var imagedoc:NotesDocument;

//suppose we have a notes view containing document which holds a logo

imagedoc=  database.getView("(images)").getDocumentByKey("LOGO"); 

var numattachments = session.evaluate("@Attachments", kuvadoc).elementAt(0); //get number of attachments

var logofound:boolean = false;
var data2;

var image:com.lowagie.text.Image;

if (numattachments ==1) {
logofound = true;
var v = session.evaluate("@AttachmentNames", imagedoc).elementAt(0);
var is2 = imagedoc.getAttachment(v).getInputStream(); // reading image to bos
var bos2 = new ByteArrayOutputStream();
var buf2 = new byte[1024];
var len2 = 0;
while ((len2= is2.read(buf2)) > 0) {
bos2.write(buf2, 0, len2);
}
data2 = bos2.toByteArray();
bos2.flush();
is2.close();
image = new com.lowagie.text.Image.getInstance(data2);
image.setAbsolutePosition(400,120); //here you specify image location
image.scaleToFit(100,210); //you can also scale image
}
 
if (logofound) {
var content:com.lowagie.text.pdf.PdfContentByte;
content = stamper.getOverContent(1); // com.lowagie.text.pdf.PdfStamper needs to be initialized beforehand
content.addImage(image);
}

 

My example adds image only to first page. If you need to add images to every page, plese look at the link below:
Java IText: Modifying Existing PDF Documents

 

Regards,
Olli

Nov 15, 2013, 6:08 AM
5 Posts
Working example

This should do the trick. At least it works with iText-2.1.3.jar

I'm sure you can modify this code to fit your need. 

function printPdf() {
// Load the java packages
importPackage(com.lowagie);
importPackage(java.io);
 
 
//READING IMAGE -->
var imagedoc:NotesDocument;
imagedoc =  database.getView("(images)").getDocumentByKey("logo");
 
if (imagedoc==null) {
return "";
}
 
var numattachments = session.evaluate("@Attachments", imagedoc).elementAt(0);
var logo:boolean = false;
var data2;
if (numattachments==1) {
logo = true;
var v = session.evaluate("@AttachmentNames", imagedoc).elementAt(0);
var is2 = imagedoc.getAttachment(v).getInputStream();
var bos2 = new ByteArrayOutputStream();
var buf2 = new byte[1024];
var len2 = 0;
while ((len2= is2.read(buf2)) > 0) {
bos2.write(buf2, 0, len2);
}
data2 = bos2.toByteArray();
bos2.flush();
is2.close();
}
var image:com.lowagie.text.Image;
if (logo)  {
image = new com.lowagie.text.Image.getInstance(data2);
image.setAbsolutePosition(350,120);
image.scaleToFit(100,210);
}
//<--READING IMAGE
 
var templatedoc = database.getView("(pdftemplates)").getDocumentByKey("offer");
 
 
//Initialization
var con = facesContext.getExternalContext();
var response:com.ibm.xsp.webapp.XspHttpServletResponse = con.getResponse();
 
//setting response headers for browser to recognize data
response.setContentType("application/pdf");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", -1);
response.setHeader( "Content-Disposition", "attachment; filename=\"offer.pdf\"" );
var pdfdoc:com.lowagie.text.Document = new com.lowagie.text.Document();
 
var os = new ByteArrayOutputStream();
var copy:com.lowagie.text.pdf.PdfSmartCopy = new com.lowagie.text.pdf.PdfSmartCopy(pdfdoc, os);
pdfdoc.open();
 
//TESTING ->
pdfdoc.addCreationDate();
pdfdoc.addCreator("my test");
pdfdoc.addTitle("Offer"); 
// <-TESTING
 
var is = templatedoc.getAttachment("template.pdf").getInputStream();
var bos = new ByteArrayOutputStream();
var buf = new byte[1024];
var len = 0;
while ((len= is.read(buf)) > 0) {
bos.write(buf, 0, len);
}
var data = bos.toByteArray();
bos.flush();
is.close();
 
var reader:com.lowagie.text.pdf.PdfReader = new com.lowagie.text.pdf.PdfReader(data); //reading template to memory
var baos = new ByteArrayOutputStream();
var stamper:com.lowagie.text.pdf.PdfStamper = new com.lowagie.text.pdf.PdfStamper(reader, baos); 
var form:com.lowagie.text.pdf.AcroFields = stamper.getAcroFields();
 
form.setField("testfield", "testing only");
 
 
//ADDING IMAGE -->
 
if (logo) {
var content:com.lowagie.text.pdf.PdfContentByte;
//content = stamper.getOverContent(reader.getNumberOfPages());
content = stamper.getOverContent(1);
content.addImage(image);
}
//<--ADDING IMAGE
 
 
stamper.setFormFlattening(true); //setting fields to readonly
stamper.close();
var tmppage:com.lowagie.text.pdf.PdfReader = new com.lowagie.text.pdf.PdfReader(baos.toByteArray());
var numpages = tmppage.getNumberOfPages();
for (i=1;i<=numpages;i++)
{
copy.addPage(copy.getImportedPage( tmppage, i));
}
 
tmppage.close();
baos.flush();
baos.close();
reader.close();
 
pdfdoc.close();
copy.close();
 
var rder =response.getOutputStream();
os.writeTo(rder);
os.reset();
templatedoc.recycle();
facesContext.responseComplete();
 
}

 

p.s.

Next time please post errors that prevented example to work, because it'll help others and also proofs that you really tried :)


This forum is closed to new posts and responses. Individual names altered for privacy purposes. The information contained in this website is provided for informational purposes only and should not be construed as a forum for customer support requests. Any customer support requests should be directed to the official HCL customer support channels below:

HCL Software Customer Support Portal for U.S. Federal Government clients
HCL Software Customer Support Portal