2009-03-30 6 views
4

J'ai assemblé du code pour insérer une image dynamique dans un PDF en utilisant à la fois ColdFusion et iText, tout en remplissant certains champs de formulaire. Après l'avoir fait fonctionner et blogué à ce sujet, je ne pouvais pas m'empêcher de penser qu'il pourrait y avoir une meilleure façon d'accomplir cela. J'utilise l'idée de base de ceci dans une application de production en ce moment, donc tout commentaire ou suggestion serait le bienvenu.Ajout d'une image dynamique à un PDF à l'aide de ColdFusion et iText

<cfscript> 
// full path to PDF you want to add image to 
readPDF = expandpath(”your.pdf”); 
// full path to the PDF we will output. Using creatUUID() to create 
// a unique file name so we can delete it afterwards 
writePDF = expandpath(”#createUUID()#.pdf”); 
// full path to the image you want to add 
yourimage = expandpath(”dynamic_image.jpg”); 

// JAVA STUFF!!! 
// output buffer to write PDF 
fileIO = createObject(”java”,”java.io.FileOutputStream”).init(writePDF); 
// reader to read our PDF 
reader = createObject(”java”,”com.lowagie.text.pdf.PdfReader”).init(readPDF); 
// stamper so we can modify our existing PDF 
stamper = createObject(”java”,”com.lowagie.text.pdf.PdfStamper”).init(reader, fileIO); 
// get the content of our existing PDF 
content = stamper.getOverContent(reader.getNumberOfPages()); 
// create an image object so we can add our dynamic image to our PDF 
image = createobject(”java”, “com.lowagie.text.Image”); 
// get the form fields 
pdfForm = stamper.getAcroFields(); 
// setting a value to our form field 
pdfForm.setField(”our_field”, “whatever you want to put here”); 
// initalize our image 
img = image.getInstance(yourimage); 
// centering our image top center of our existing PDF with a little margin from the top 
x = (reader.getPageSize(1).width() - img.scaledWidth()) - 50; 
y = (reader.getPageSize(1).height() - img.scaledHeight())/2 ; 
// now we assign the position to our image 
img.setAbsolutePosition(javacast(”float”, y),javacast(”float”, x)); 
// add our image to the existing PDF 
content.addImage(img); 
// flattern our form so our values show 
stamper.setFormFlattening(true); 
// close the stamper and output our new PDF 
stamper.close(); 
// close the reader 
reader.close(); 
</cfscript> 
<!— write out new PDF to the browser —> 
<cfcontent type=”application/pdf” file = “#writePDF#” deleteFile = “yes”> 
+0

Avez-vous besoin filigrane? – Sergii

+0

CF8 rend ridiculement facile. (Encore un exemple sympa!) –

+1

Je n'utilise pas un filigrane comme une simple insertion d'une image dans un PDF existant. – rip747

Répondre

0

Je l'ai fait d'une autre manière avec la bibliothèque iText Je veux ne pas écraser mon pdf existant avec l'image à insérer, modifier de façon juste le pdf d'origine insérer l'image, il suffit d'insérer avec itext doesn Je travaille pour moi.

Donc, je dois insérer l'image dans un pdf vierge (http://itextpdf.com/examples/iia.php?id=59) Et puis joindre mon pdf original et la nouvelle pdf-image. Obtention d'un pdf avec plusieurs pages. (http://itextpdf.com/examples/iia.php?id=110)

Après cela, vous pouvez superposer les pages pdf avec ce concept frais http://itextpdf.com/examples/iia.php?id=113

+0

Je suis en train d'améliorer la façon de faire cela, plus directement, sans superposer toutes les pages pdf, juste superposer ce dont j'ai besoin; avec ** addtemplate de PdfContentByte ** from itext –

Questions connexes