Using iText to compile multiple Tiff images into a PDF

We have invoices and ancillary documents that need to be bundled together, so I used iText to take a comma-seperated list of Tiff paths and return a PDF file. Enjoy!

<br />   <cffunction name=<span class='cc_value'>"writePdfFromTiffs"</span> output=<span class='cc_value'>"false"</span> returntype=<span class='cc_value'>"string"</span> hint=<span class='cc_value'>"This will output a .pdf file containing multiple tiff images"</span>><br />    <cfargument name=<span class='cc_value'>"pdfOutput"</span> required=<span class='cc_value'>"true"</span> type=<span class='cc_value'>"string"</span> hint=<span class='cc_value'>"Provide a full path to output your PDF too"</span>><br />    <cfargument name=<span class='cc_value'>"tiffList"</span> required=<span class='cc_value'>"true"</span> type=<span class='cc_value'>"string"</span> hint=<span class='cc_value'>"Provide a comma deliniated list of tiff images to include"</span>><br /><br />    <!--<span class='cc_comment'>-// This code was modified from code provided by bryan@electricedgesystems.com, thanks a ton! //---><br /><br /></span> <!--<span class='cc_comment'>-// Declare local variables to keep everything clean //---><br /></span> <cfset var cb = /><br /> <cfset var curFile = /><br />    <cfset var ra = /><br />    <cfset var comps = /><br />    <cfset var i = /><br />    <cfset var img = /><br />    <cfset var writer = /><br />    <cfset var TiffImage = /><br />    <cfset var PdfFile = /><br />    <cfset var Document = /><br />    <cfset var Image = /><br />    <cfset var Paragraph = /><br />    <cfset var PdfContentByte = /><br />    <cfset var PdfWriter = /><br />    <cfset var RandomAccessFileOrArray = /><br /><br />    <!--<span class='cc_comment'>-// Opan file system I/O to write pdf too //---><br /></span><cfset PdfFile = createObject(<span class='cc_value'>"java"</span>,<span class='cc_value'>"java.io.FileOutputStream"</span>).init(arguments.pdfOutput)><br /> <!--<span class='cc_comment'>-// Init the text.document object //---><br /></span><cfset Document = createObject(<span class='cc_value'>"java"</span>, <span class='cc_value'>"com.lowagie.text.Document"</span>).init()><br /> <!--<span class='cc_comment'>-// Create pagesize argument so I can set new page sizes //---><br /></span> <cfset PageSize = createObject(<span class='cc_value'>"java"</span>, <span class='cc_value'>"com.lowagie.text.PageSize"</span>) /><br /> <!--<span class='cc_comment'>-// Init the text.image object //---><br /></span><cfset Image = createObject(<span class='cc_value'>"java"</span>, <span class='cc_value'>"com.lowagie.text.Image"</span>)><br /> <!--<span class='cc_comment'>-// Create our default paragraph object to contain our images //---><br /></span><cfset Paragraph = createObject(<span class='cc_value'>"java"</span>, <span class='cc_value'>"com.lowagie.text.Paragraph"</span>)><br /> <!--<span class='cc_comment'>-// not sure what this does, but it needs to be here //---><br /></span><cfset PdfContentByte = createObject(<span class='cc_value'>"java"</span>, <span class='cc_value'>"com.lowagie.text.pdf.PdfContentByte"</span>)><br /> <!--<span class='cc_comment'>-// Create PDFWriter class //---><br /></span><cfset PdfWriter = createObject(<span class='cc_value'>"java"</span>, <span class='cc_value'>"com.lowagie.text.pdf.PdfWriter"</span>)><br /> <!--<span class='cc_comment'>-// Create array to contain image //---><br /></span><cfset RandomAccessFileOrArray = createObject(<span class='cc_value'>"java"</span>, <span class='cc_value'>"com.lowagie.text.pdf.RandomAccessFileOrArray"</span>)><br /> <!--<span class='cc_comment'>-// Load TIFF image handling //---><br /></span><cfset TiffImage = createObject(<span class='cc_value'>"java"</span>, <span class='cc_value'>"com.lowagie.text.pdf.codec.TiffImage"</span>)><br /> <!--<span class='cc_comment'>-// Assign the page size //---><br /></span> <cfset document.setPageSize(PageSize.Letter) /><br /> <!--<span class='cc_comment'>-// Set page margins to all 10 //---><br /></span><cfset document.setMargins(10,10,10,10) /><br /> <!--<span class='cc_comment'>-// Create instance of writer //---><br /></span><cfset Writer = PdfWriter.getInstance(document, PdfFile)><br /><br /> <cftry><br />      <!--<span class='cc_comment'>-// Open document for writing //---><br /></span><cfset document.open()><br />      <cfset cb = writer.getDirectContent()><br /><br />      <!--<span class='cc_comment'>-// Loop through list of files provided as an argument and add each to our pdf //---><br /></span><cfloop list=<span class='cc_value'>"#arguments.tiffList#"</span> delimiters=<span class='cc_value'>","</span> index=<span class='cc_value'>"curFile"</span>><br />         <!--<span class='cc_comment'>-// Check this file to make sure it is a Tiff //---><br /></span>   <cfif right(curFile, 3) eq tif or right(curFile, 4) eq tiff><br /><br />            <!--<span class='cc_comment'>-// Catch - try to account for un-accessable files or 32 bpp tiffs<br /></span>            32 bit tiffs not supported by iText<span class='cc_comment'> //---><br /></span>      <cftry><br /><br />               <!--<span class='cc_comment'>-// stuff file into memory //---><br /></span>         <cfset ra = RandomAccessFileOrArray.init(curFile)><br /><br />               <!--<span class='cc_comment'>-// read file and determine number of pages in TIFF //---><br /></span>         <cfset comps = TiffImage.getNumberOfPages(ra)><br /><br />               <!--<span class='cc_comment'>-// loop over number of pages and add each one to the PDF //---><br /></span>         <cfloop index=<span class='cc_value'>"i"</span> from=<span class='cc_value'>"1"</span> to=<span class='cc_value'>"#comps#"</span>><br />                <cfset img = TiffImage.getTiffImage(ra,javacast(<span class='cc_value'>"int"</span>,i))><br />                <cfset img.scaleToFit(592, 772)><br />                <cfset img.setAbsolutePosition(10,10)><br />                <cfset cb.addImage(img)><br /><br />                <!--<span class='cc_comment'>-// force new page after each image is added //---><br /></span>          <cfset document.newPage()><br />               </cfloop><br /><br />               <cfcatch type=<span class='cc_value'>"any"</span>><br />                  <!--- Ignore, un-supported file type<span class='cc_comment'> //---><br /></span>         </cfcatch><br />            </cftry><br />     </cfif><br />    <!--<span class='cc_comment'>-// Close each file after a loop //---><br /></span> <cfset ra.close()><br />   </cfloop><br /><br />    <!--<span class='cc_comment'>-// close document, this will write the pdf to the filesystem //---><br /></span><cfset document.close()><br /><br />    <!--<span class='cc_comment'>-// Return success //---><br /></span> <cfreturn Success /><br /><br /> <!--<span class='cc_comment'>-// Catch any errors and return failed //---><br /></span> <cfcatch type=<span class='cc_value'>"any"</span>><br /> <cfreturn Failed /><br />    </cfcatch><br />    </cftry><br />   </cffunction><br />
Digg StumbleUpon Facebook Technorati Fav newsvine reddit FARK Google Bookmarks