import java.awt.image.BufferedImage; import java.awt.image.renderable.ParameterBlock; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream; import javax.media.jai.JAI; import javax.media.jai.PlanarImage; import org.apache.commons.logging.LogFactory; import org.icepdf.core.exceptions.PDFException; import org.icepdf.core.exceptions.PDFSecurityException; import org.icepdf.core.pobjects.Document; import org.icepdf.core.pobjects.Page; import org.icepdf.core.util.GraphicsRenderingHints; import com.rj.sql.SQLRunner; import com.rj.sql.resulthandler.AllHandler; import com.sun.media.jai.codec.FileSeekableStream; import com.sun.media.jai.codec.ImageCodec; import com.sun.media.jai.codec.ImageEncoder; import com.sun.media.jai.codec.TIFFEncodeParam; public class PdfToTif { public static final String FILETYPE_JPG = "jpg"; /** * * 将指定的pdf文件转换为指定路径的图片 * * @param filepath 原文件路径,例如d:/test/test.pdf * * @param imagepath 图片生成路径,例如 d:/test/ * * @param zoom 缩略图显示倍数,1表示不缩放,0.3则缩小到30% * * @param name 生成的tiff文件名称 * @throws IOException * @throws PDFSecurityException * @throws PDFException * @throws InterruptedException * */ public static void tranfer(String filepath, String imagepath, float zoom, String name) throws PDFException, PDFSecurityException, IOException, InterruptedException{ Document document = null; float rotation = 0f; document = new Document(); document.setFile(filepath); int maxPages = document.getPageTree().getNumberOfPages(); FileOutputStream out=null; ImageOutputStream outImage=null; List<String> bookFilePaths=new ArrayList(); for (int i = 0; i < maxPages; i++) { BufferedImage img = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, rotation, zoom); Iterator iter = ImageIO.getImageWritersBySuffix(FILETYPE_JPG); ImageWriter writer = (ImageWriter) iter.next(); File outFile = new File(imagepath + new File(filepath).getName() + "_" + new DecimalFormat("000").format(i) + "." + FILETYPE_JPG); bookFilePaths.add(outFile.getPath()); out = new FileOutputStream(outFile); outImage = ImageIO.createImageOutputStream(out); writer.setOutput(outImage); writer.write(new IIOImage(img, null, null)); //关闭流防止资源占用 if(out!=null){ out.close(); } if(outImage!=null){ outImage.close(); } } many2one(bookFilePaths,imagepath,name+".tiff"); } /** * 多张图片转tiff * @param bookFilePaths 图片路径存数组 * * @param toPath 输出文件夹路径 * * @param distFileName 生成图片名称 */ public static void many2one(List<String> bookFilePaths, String toPath,String distFileName) { if (bookFilePaths != null && bookFilePaths.size() > 0) { File[] files = new File[bookFilePaths.size()]; for(int i = 0; i < bookFilePaths.size(); i++){ files[i] = new File(bookFilePaths.get(i)); } if (files != null && files.length > 0) { try { ArrayList pages = new ArrayList(files.length - 1); FileSeekableStream[] stream = new FileSeekableStream[files.length]; for (int i = 0; i < files.length; i++) { stream[i] = new FileSeekableStream(files[i].getCanonicalPath()); } ParameterBlock pb = (new ParameterBlock()); PlanarImage firstPage = JAI.create("stream", stream[0]); for (int i = 1; i < files.length; i++) { PlanarImage page = JAI.create("stream", stream[i]); pages.add(page); } TIFFEncodeParam param = new TIFFEncodeParam(); File f = new File(toPath); if(!f.exists()){ f.mkdirs(); } OutputStream os = new FileOutputStream(toPath + File.separator+ distFileName); ImageEncoder enc = ImageCodec.createImageEncoder("tiff",os, param); param.setExtraImages(pages.iterator()); enc.encode(firstPage); for (int i = 0; i < files.length; i++) { stream[i].close(); if(files[i].isFile()&&files[i].exists()){ files[i].delete(); } } os.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) throws PDFException, PDFSecurityException, IOException, InterruptedException{ tranfer("C:/ls_ftp/433150/1/2021/20210805/决赛22222.pdf", "C:/ls_ftp/433150/1/2021/20210805/", 1 , "2222");//test } }