001 package railo.runtime.text.pdf; 002 003 import java.io.IOException; 004 import java.util.Set; 005 006 import org.jpedal.PdfDecoder; 007 import org.jpedal.exception.PdfException; 008 009 import railo.commons.io.IOUtil; 010 import railo.commons.io.res.Resource; 011 import railo.runtime.exp.ExpressionException; 012 import railo.runtime.exp.PageException; 013 import railo.runtime.img.Image; 014 import railo.runtime.op.Caster; 015 016 public class PDF2ImageJPedal extends PDF2Image { 017 018 019 public void writeImages(byte[] input,Set pages,Resource outputDirectory, String prefix,String format, int scale, 020 boolean overwrite, boolean goodQuality,boolean transparent) throws PageException, IOException { 021 PdfDecoder dec = createPdfDecoder(input); 022 Resource res; 023 int count = dec.getPageCount(); 024 025 for(int page=1;page<=count;page++) { 026 if(pages!=null && !pages.contains(Integer.valueOf(page)))continue; 027 //res=outputDirectory.getRealResource(prefix+"_page_"+page+"."+format); 028 res=createDestinationResource(outputDirectory,prefix,page,format,overwrite); 029 writeImage(dec,page,res,format,scale,overwrite,goodQuality, transparent); 030 } 031 032 } 033 034 035 036 private static void writeImage(PdfDecoder dec, int page, Resource destination,String format, int scale, 037 boolean overwrite, boolean goodQuality, boolean transparent) throws PageException, IOException { 038 if(scale<1 || scale>100) 039 throw new ExpressionException("invalid scale definition ["+Caster.toString(scale)+"], value should be in range from 1 to 100"); 040 041 042 Image img=null; 043 try { 044 img = new Image(transparent?dec.getPageAsTransparentImage(page):dec.getPageAsImage(page)); 045 } catch (PdfException e) { 046 throw Caster.toPageException(e); 047 } 048 if(scale!=100) 049 img.resize(scale, goodQuality?"highestquality":"highperformance", 1); 050 img.writeOut(destination,format, overwrite, 1f); 051 } 052 053 054 public Image toImage(byte[] input,int page) throws IOException, PageException { 055 try { 056 return new Image(createPdfDecoder(input).getPageAsImage(page)); 057 } catch (PdfException e) { 058 throw Caster.toPageException(e); 059 } 060 } 061 062 private static PdfDecoder createPdfDecoder(Resource res) throws PageException,IOException { 063 return createPdfDecoder(IOUtil.toBytes(res)); 064 } 065 066 private static PdfDecoder createPdfDecoder(byte[] input) throws PageException { 067 PdfDecoder decoder = new PdfDecoder(true); 068 decoder.useHiResScreenDisplay(true); 069 try { 070 decoder.openPdfArray(input); 071 } catch (PdfException e) { 072 throw Caster.toPageException(e); 073 } 074 return decoder; 075 } 076 077 }