public class PDFPayslipListener extends PdfPageEventHelper {
private static final Logger LOG =
Logger.getLogger(PDFPayslipListener.class);
private PdfImportedPage template;
private PdfContentByte canvas;
private String pdfFileName;
private String logoPath;
private AcroFields pdfForm;
private Image img;
public void setPdfFileName(final String filePath) {
pdfFileName = filePath;
}
public void setLogoPath(final String logoPath) {
this.logoPath = logoPath;
}
public AcroFields getPdfForm() {
return pdfForm;
}
@Override
public void onOpenDocument(final PdfWriter writer, final Document
doc) {
try {
PdfReader reader = new PdfReader(pdfFileName);
pdfForm = reader.getAcroFields();
canvas = writer.getDirectContentUnder();
img = Image.getInstance(logoPath);
template = writer.getImportedPage(reader, 1);
} catch(IOException e) {
LOG.error("Exception caught in PDF Listener.", e);
}
}
@Override
public void onEndPage(final PdfWriter writer, final Document doc) {
canvas.addTemplate(template, 0, 0);
insertLogo();
}
private void insertLogo() {
float[] logoPos = pdfForm.getFieldPositions("LOGO");
if(logoPos != null) {
try {
//float fieldPage = logoPos[0];
float fieldLx = logoPos[1];
float fieldLy = logoPos[2];
float fieldUx = logoPos[3];
float fieldUy = logoPos[4];
Rectangle rect = new Rectangle(fieldLx, fieldLy,
fieldUx, fieldUy);
float absPosWidth = fieldLx;
float absPosHeight = fieldLy;
img.scaleToFit(rect.getWidth(), rect.getHeight());
img.setAbsolutePosition(absPosWidth, absPosHeight);
canvas.addImage(img, rect.getWidth(), 0, 0,
rect.getHeight(), absPosWidth, absPosHeight);
} catch(DocumentException ex) {
LOG.error("Document Error adding image to template.",
ex);
} catch(IOException ex) {
LOG.error("IOException adding image to template.", ex);
}
}
}
}
The image will only be added once.
Paulo
> -----Original Message-----
> From: Matthew Hawkins [mailto:hawk...@4email.net]
> Sent: Monday, May 11, 2009 11:19 AM
> To: itext-questions@lists.sourceforge.net
> Subject: [iText-questions] Adding Image to template
>
> Hi,
>
> first thanks to those that answered my previous question - I
> am using a
> different method as I have a heap space error, so must go down the
> BatchFormFill route when using forms rather than PDFSmartCopy etc.
>
> My problem is that I have a base PDF, and I must add an Image
> at runtime
> to it. Now that I have this PDF with the Image, I must run about 700
> times populating data.
>
> I am using the following code, but the image does not appear
> - but if I
> add it to the direct content it does, on the first page (as you would
> expect). So my Image works and is not null - but it does not appear on
> the template document.
>
> I can add the Image to each individual page, but as you would imagine
> the resulting document size is much too big. I must add the
> Image to the
> document once to keep the document size small.
>
> Please can you tell me what I'm doing wrong - am I adding the image to
> the wrong object??
>
> public class PDFPayslipListener extends PdfPageEventHelper {
> private static final Logger LOG =
> Logger.getLogger(PDFPayslipListener.class);
> private PdfImportedPage template;
> private PdfContentByte canvas;
> private String pdfFileName;
> private String logoPath;
> private AcroFields pdfForm;
>
> public void setPdfFileName(final String filePath) {
> pdfFileName = filePath;
> }
>
> public void setLogoPath(final String logoPath) {
> this.logoPath = logoPath;
> }
>
> public AcroFields getPdfForm() {
> return pdfForm;
> }
>
> @Override
> public void onOpenDocument(final PdfWriter writer, final Document
> doc) {
> try {
> PdfReader reader = new PdfReader(pdfFileName);
> pdfForm = reader.getAcroFields();
> canvas = writer.getDirectContentUnder();
> insertLogo();
> template = writer.getImportedPage(reader, 1);
> } catch(IOException e) {
> LOG.error("Exception caught in PDF Listener.", e);
> }
> }
>
> @Override
> public void onEndPage(final PdfWriter writer, final
> Document doc) {
> canvas.addTemplate(template, 0, 0);
> }
>
> private void insertLogo() {
> float[] logoPos = pdfForm.getFieldPositions("LOGO");
> if(logoPos != null) {
> try {
> //float fieldPage = logoPos[0];
> float fieldLx = logoPos[1];
> float fieldLy = logoPos[2];
> float fieldUx = logoPos[3];
> float fieldUy = logoPos[4];
> Rectangle rect = new Rectangle(fieldLx, fieldLy,
> fieldUx, fieldUy);
> Image img = Image.getInstance(logoPath);
> float absPosWidth = fieldLx;
> float absPosHeight = fieldLy;
> img.scaleToFit(rect.getWidth(), rect.getHeight());
> img.setAbsolutePosition(absPosWidth, absPosHeight);
> canvas.addImage(img, rect.getWidth(), 0, 0,
> rect.getHeight(), absPosWidth, absPosHeight);
> } catch(DocumentException ex) {
> LOG.error("Document Error adding image to template.",
> ex);
> } catch(IOException ex) {
> LOG.error("IOException adding image to
> template.", ex);
> }
> }
> }
> }
> --
> Matthew Hawkins
> hawk...@4email.net
>
>
> --------------------------------------------------------------
> ----------------
> The NEW KODAK i700 Series Scanners deliver under ANY
> circumstances! Your
> production scanning environment may not be a perfect world -
> but thanks to
> Kodak, there's a perfect scanner to get the job done! With
> the NEW KODAK i700
> Series Scanner you'll get full speed at 300 dpi even with all image
> processing features enabled. http://p.sf.net/sfu/kodak-com
> _______________________________________________
> iText-questions mailing list
> iText-questions@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/itext-questions
>
> Buy the iText book: http://www.1t3xt.com/docs/book.php
> Check the site with examples before you ask questions:
> http://www.1t3xt.info/examples/
> You can also search the keywords list:
> http://1t3xt.info/tutorials/keywords/
>
Aviso Legal:
Esta mensagem é destinada exclusivamente ao destinatário. Pode conter
informação confidencial ou legalmente protegida. A incorrecta transmissão desta
mensagem não significa a perca de confidencialidade. Se esta mensagem for
recebida por engano, por favor envie-a de volta para o remetente e apague-a do
seu sistema de imediato. É proibido a qualquer pessoa que não o destinatário de
usar, revelar ou distribuir qualquer parte desta mensagem.
Disclaimer:
This message is destined exclusively to the intended receiver. It may contain
confidential or legally protected information. The incorrect transmission of
this message does not mean the loss of its confidentiality. If this message is
received by mistake, please send it back to the sender and delete it from your
system immediately. It is forbidden to any person who is not the intended
receiver to use, distribute or copy any part of this message.
------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image
processing features enabled. http://p.sf.net/sfu/kodak-com
_______________________________________________
iText-questions mailing list
iText-questions@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/itext-questions
Buy the iText book: http://www.1t3xt.com/docs/book.php
Check the site with examples before you ask questions:
http://www.1t3xt.info/examples/
You can also search the keywords list: http://1t3xt.info/tutorials/keywords/