为什么使用icepdf转换图片使用Action和mian方法测的时候没有出现内存溢出而放在项目里面调用的时候就出现内存溢出
代码:
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
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.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
/**
- pdf生成图片
- @author tkbs
-
*/
public class PDFchangToImageUtil {public static final String FILETYPE_JPG = "jpg";
public static final String SUFF_IMAGE = "." + FILETYPE_JPG;public static void main(String[] args) {
String filePath = "E:\test\pdf\";
File desFile = new File(filePath);
if (desFile.exists()) {
File[] pdfFs = desFile.listFiles();
for (File file : pdfFs) {
String fileName = file.getName();
System.out.println("要切割的文件"+fileName);
String prefix = fileName.substring(fileName.lastIndexOf(".") + 1);
if("PDF".equals(prefix)){
// 加密文件带路径 输出路径 文件名输出 key
try {
tranfer(filePath + "\" + fileName, filePath, 2);
file=null;
System.gc();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(fileName+"切割完成!!!");
}
System.gc();
System.out.println("结束!!!");
}
}/**
- 将指定pdf文件的首页转换为指定路径的缩略图
- @param filepath
- 原文件路径,例如d:/test.pdf
- @param imagepath
- 图片生成路径,例如 d:/test-1.jpg
- @param zoom
-
缩略图显示倍数,1表示不缩放,0.3则缩小到30%
*/
public static void tranfer(String filepath, String imagepath, float zoom)
throws PDFException, PDFSecurityException, IOException {
// ICEpdf document class
Document document = null;
try {
float rotation = 0f;document = new Document(); document.setFile(filepath); Integer maxPages = document.getPageTree().getNumberOfPages(); for (int i = 0; i < maxPages; i++) { BufferedImage img = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, rotation, zoom); Iterator iter = null; ImageWriter writer = null; // 文件输出位置: FileOutputStream out = null; ImageOutputStream outImage = null; try { File outFile = new File(imagepath + "\\" + (i + 1) + ".jpg"); iter = ImageIO.getImageWritersBySuffix(FILETYPE_JPG); writer = (ImageWriter) iter.next(); out = new FileOutputStream(outFile); outImage = ImageIO.createImageOutputStream(out); writer.setOutput(outImage); writer.write(new IIOImage(img, null, null)); System.gc(); } catch (Exception e) { e.printStackTrace(); } finally { outImage.flush(); outImage.close(); out.close(); System.gc(); } }
} catch (Exception e) {
e.printStackTrace();
}
document.dispose();
System.gc();
}
}