mszhe的技术分享 人心惟危,道心惟微。惟精惟一,允执厥中。

pdf转图片

2016-08-24

阅读:


pdf转图片主要有以下几种方式:

  • pdfbox
  • icepdf
  • jpedal
  • ghost4j

其中,ghost4j转换如下

/**
 * Converts PDF to PNG format.
 *
 * @param inputPdfFile input file
 * @return an array of PNG images
 */
public static File[] convertPdf2Png(File inputPdfFile) {
    File imageDir = inputPdfFile.getParentFile();

    if (imageDir == null) {
        String userDir = System.getProperty("user.dir");
        imageDir = new File(userDir);
    }

    //get Ghostscript instance
    Ghostscript gs = Ghostscript.getInstance();

    //prepare Ghostscript interpreter parameters
    //refer to Ghostscript documentation for parameter usage
    List<String> gsArgs = new ArrayList<String>();
    gsArgs.add("-gs");
    gsArgs.add("-dNOPAUSE");
    gsArgs.add("-dQUIET");
    gsArgs.add("-dBATCH");
    gsArgs.add("-dSAFER");
    gsArgs.add("-sDEVICE=pnggray");
    gsArgs.add("-r300");//DPI
    gsArgs.add("-dGraphicsAlphaBits=4");
    gsArgs.add("-dTextAlphaBits=4");
    gsArgs.add("-sOutputFile=" + imageDir.getPath() + "/workingimage%03d.png");
    gsArgs.add(inputPdfFile.getPath());

    //execute and exit interpreter
    try {
        synchronized (gs) {
            gs.initialize(gsArgs.toArray(new String[0]));
            gs.exit();
        }
    } catch (GhostscriptException e) {
        logger.error(e.getCause().toString(), e);
    } finally {
        //delete interpreter instance (safer)
        try {
            Ghostscript.deleteInstance();
        } catch (GhostscriptException e) {
            //nothing
        }
    }

    // find working files
    File[] workingFiles = imageDir.listFiles(new FilenameFilter() {

        @Override
        public boolean accept(File dir, String name) {
            return name.toLowerCase().matches("workingimage\\d{3}\\.png$");
        }
    });

    Arrays.sort(workingFiles, new Comparator<File>() {
        @Override
        public int compare(File f1, File f2) {
            return f1.getName().compareTo(f2.getName());
        }
    });

    return workingFiles;
}