PDF Templates kombinieren

Marco Betschart, Webapplikations-Programmierer, bis 2010

Ab ColdFusion 9 lassen sich unterschiedliche PDF-Dateien auf einfache Art und Weise über den cfpdf-Befehl zu einem Dokument zusammenfassen. Das Resultat ist im Prinzip ein fortlaufendes Dokument aus den einzelnen Dateien.

Eine aktuelle Anforderung ging aber noch einen Schritt weiter: Die unterschiedlichen PDF-Dateien dienen als Templates. Diese Templates sollen auf der gleichen Seite zusammengefasst und übereinander gelegt werden.

Leider überschreitet dies die doch bescheidenen Möglichkeiten von cfpdf. Also: Ärmel hochkrempeln und direkt mit iText arbeiten. Wer jetzt denkt, es folgt ein Code-Monster, der irrt. Es waren nur einige wenige Zeilen Code nötig, um die Anforderung zu erfüllen:

1<cfset pdfpath="expandPath(&quot;./pdf&quot;)"> <cfset pdffiles="directoryList(pdfPath,false,&quot;query&quot;,&quot;*.pdf&quot;)"> <cfset pdfout="expandPath(&quot;./out.pdf&quot;)"> <cfset fileoutputstream="createObject(&quot;java&quot;,&quot;java.io.FileOutputStream&quot;).init(pdfOut)"> <cfset document="createObject(&quot;java&quot;,&quot;com.lowagie.text.Document&quot;).init()"> <cfset pdfwriter="createObject(&quot;java&quot;,&quot;com.lowagie.text.pdf.PdfWriter&quot;).getInstance(Document,FileOutputStream)"> <cfset> <cfset content="PdfWriter.getDirectContent()"> <cfloop query="pdfFiles"> <cfset pdfreader="createObject(&quot;java&quot;,&quot;com.lowagie.text.pdf.PdfReader&quot;).init(&quot;#pdfFiles.directory#\#pdfFiles.name#&quot;)"> <cfset pdftemplate="PdfWriter.getImportedPage(PdfReader,1)"> <cfset> </cfset> <cfset> </cfset></cfset></cfset></cfloop></cfset></cfset></cfset></cfset></cfset></cfset></cfset></cfset>