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
}
}