2009-03-30 8 views
4

Ich habe einen Code zusammengestellt, um ein dynamisches Bild unter Verwendung von ColdFusion und iText in ein PDF einzufügen, während ich auch einige Formularfelder ausfülle. Nachdem ich es funktionierte und darüber gebloggt hatte, konnte ich nicht anders, als zu denken, dass es einen besseren Weg geben könnte, dies zu erreichen. Ich benutze die Grundidee in einer Produktions-App, daher sind Kommentare oder Vorschläge sehr willkommen.Hinzufügen eines dynamischen Bildes zu einer PDF mit ColdFusion und 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

Sie Wasserzeichen benötigen Sie? – Sergii

+0

CF8 macht das lächerlich einfach. (Immer noch cool Beispiel! :)) –

+1

Ich verwende kein Wasserzeichen als nur ein Bild in eine vorhandene PDF einfügen. – rip747

Antwort

0

Ich habe es auf eine andere Weise mit itext Bibliothek gemacht Ich will dont meine bestehende pdf mit dem Bild überschreiben, einfügen so nur die Original-PDF ändern das Bild einfügen, legen Sie einfach mit itext doesn Arbeite nicht für mich.

Also, ich muss das Bild in ein leeres pdf einfügen (http://itextpdf.com/examples/iia.php?id=59) Und dann beitreten mein Original-PDF und das neue PDF-Bild. Ein PDF mit mehreren Seiten erhalten. (http://itextpdf.com/examples/iia.php?id=110)

Danach können Sie die PDF-Seiten mit diesem kühlen Konzept Overlay http://itextpdf.com/examples/iia.php?id=113

+0

Ich verbessere jetzt den Weg, dies zu tun, direkter, ohne alle PDF-Seiten zu überlagern, nur überlagernd, was ich brauche; mit ** addtemplate von PdfContentByte ** von itext –

Verwandte Themen