可乐加.糖 2015-11-06 01:45 采纳率: 0%
浏览 4468

使用icepdf转换图片问题

为什么使用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();
      }
      }
      图片说明

  • 写回答

2条回答 默认 最新

  • 可乐加.糖 2015-11-09 15:18
    关注

    首先考虑使用到的是线程池多线程,然后就是将大的文件切割为小的文件,然后在将小的文件分割为图片!

    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧