[整理]PDF转JPG

1、apache PDFBox

public final class PDFBoxUtil {
    /** JPG文件后缀 */
    private static final String PICTRUE_STUFFIX_JPG = ".jpg";
    /** PDF文件后缀 */
    private static final String FILE_STUFFIX_PDF = ".pdf";
    /** TXT文件后缀 */
    private static final String FILE_STUFFIX_TXT = ".txt";
    /** PNG文件格式 */
    private static final String PICTRUE_FORMAT_PNG = "png";

    /**
     * 将PDF文件按页转换成JPG文件
     * 
     * @Title: splitPdf2Jpg
     * @Description: 将PDF文件按页转换成JPG文件
     * @param pdfFilePath PDF文件全路径
     * @param jpgFilePath JPG文件保存目录
     * @param dpi PDF转JPG时放大倍数,与图片清晰度成正比,默认值:296
     * @return JPG文件全路径集合
     * @throws IOException
     */
    public static List<String> splitPdf2Jpg(String pdfFilePath, String jpgFilePath, float dpi) throws IOException {
        List<String> list = new ArrayList<>();

        // 创建目录JPG文件保存目录
        File jpgDir = new File(jpgFilePath);
        if (!jpgDir.exists()) {
            jpgDir.mkdir();
        }
        // 读取PDF文件
        File file = new File(pdfFilePath);
        PDDocument document = PDDocument.load(file);

        // 逐页转换
        int pages = document.getNumberOfPages();
        PDFRenderer renderer = new PDFRenderer(document);
        int index = file.getName().lastIndexOf(".");
        String fileName = file.getName().substring(0, index);
        if (0 >= dpi) {
            dpi = 296;
        }
        for (int i = 0; i < pages; i++) {
            BufferedImage image = renderer.renderImageWithDPI(i, dpi);

            String imgFileName = jpgFilePath + File.separator + fileName + PICTRUE_STUFFIX_JPG;
            if (pages > 1) {
                imgFileName = jpgFilePath + File.separator + fileName + "_" + i + PICTRUE_STUFFIX_JPG;
            }
            ImageIO.write(image, PICTRUE_FORMAT_PNG, new File(imgFileName));
            list.add(imgFileName);
        }
        return list;
    }
}

2、SUN PDFRenderer

public final class PDFRendererUtil {
    /** JPG文件后缀 */
    private static final String PICTRUE_STUFFIX_JPG = ".jpg";
    /** PNG文件格式 */
    private static final String PICTRUE_FORMAT_PNG = "png";

    /**
     * 将PDF文件按页转换成JPG文件
     * 
     * @Title: splitPdf2Jpg
     * @Description: 将PDF文件按页转换成JPG文件
     * @param pdfFilePath PDF文件全路径
     * @param jpgFilePath JPG文件保存目录
     * @param enlargeMultiple EnlargeMultipleEnum:PDF转JPG时放大倍数,与图片清晰度成正比,默认4倍放大
     * @return JPG文件全路径集合
     * @throws IOException
     */
    public static List<String> splitPdf2Jpg(String pdfFilePath, String jpgFilePath, EnlargeMultipleEnum enlargeMultiple)
        throws IOException {
        List<String> list = new ArrayList<>();

        // 创建目录JPG文件保存目录
        File jpgDir = new File(jpgFilePath);
        if (!jpgDir.exists()) {
            jpgDir.mkdir();
        }

        // 读取PDF文件
        File file = new File(pdfFilePath);
        RandomAccessFile raf = new RandomAccessFile(file, "r");
        FileChannel channel = raf.getChannel();
        ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
        PDFFile pdffile = new PDFFile(buf);

        // 逐页转换
        int pages = pdffile.getNumPages();
        int index = file.getName().lastIndexOf(".");
        String fileName = file.getName().substring(0, index);
        if (null == enlargeMultiple) {
            enlargeMultiple = EnlargeMultipleEnum.MULTIPLE_4;
        }
        for (int i = 1; i <= pages; i++) {
            PDFPage page = pdffile.getPage(i);
            Rectangle rect = new Rectangle(0, 0, (int) page.getBBox().getWidth(), (int) page.getBBox().getHeight());
            Image img = page.getImage(rect.width * enlargeMultiple.getMultiple(),
                rect.height * enlargeMultiple.getMultiple(), rect, null, true, true);
            BufferedImage tag = new BufferedImage(rect.width * enlargeMultiple.getMultiple(),
                rect.height * enlargeMultiple.getMultiple(), BufferedImage.TYPE_INT_RGB);
            tag.getGraphics().drawImage(img, 0, 0, rect.width * enlargeMultiple.getMultiple(),
                rect.height * enlargeMultiple.getMultiple(), null);

            String imgFileName = jpgFilePath + File.separator + fileName + PICTRUE_STUFFIX_JPG;
            if (pages > 1) {
                imgFileName = jpgFilePath + File.separator + fileName + "_" + i + PICTRUE_STUFFIX_JPG;
            }
            FileOutputStream out = new FileOutputStream(imgFileName);
            ImageIO.write(tag, PICTRUE_FORMAT_PNG, new File(imgFileName));
            out.close();
            list.add(imgFileName);
        }
        channel.close();
        raf.close();
        return list;
    }
}

3、ICEPdf (收费)

public final class IcePDFUtil {
    /** JPG文件后缀 */
    private static final String PICTRUE_STUFFIX_JPG = ".jpg";
    /** PNG文件格式 */
    private static final String PICTRUE_FORMAT_PNG = "png";

    /**
     * 将PDF文件按页转换成JPG文件
     * 
     * @Title: splitPdf2Jpg
     * @Description: 将PDF文件按页转换成JPG文件
     * @param pdfFilePath PDF文件全路径
     * @param jpgFilePath JPG文件保存目录
     * @param scale PDF转JPG时缩放比例,与图片清晰度成正比,默认值:4
     * @return JPG文件全路径集合
     * @throws IOException
     */
    public static List<String> splitPdf2Jpg(String pdfFilePath, String jpgFilePath, float scale) throws IOException {
        List<String> list = new ArrayList<>();

        // 创建目录JPG文件保存目录
        File jpgDir = new File(jpgFilePath);
        if (!jpgDir.exists()) {
            jpgDir.mkdir();
        }

        // 读取PDF文件
        Document document = new Document();
        document.setFile(pdfFilePath);

        // 逐页转换
        int pages = document.getNumberOfPages();
        int indexBegin = pdfFilePath.lastIndexOf(File.separator);
        int indexEnd = pdfFilePath.lastIndexOf(".");
        String fileName = pdfFilePath.substring(indexBegin, indexEnd);
        if (0 >= scale) {
            scale = 4;
        }
        for (int i = 0; i < pages; i++) {
            BufferedImage img = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN,
                Page.BOUNDARY_CROPBOX, 0, scale);
            String imgFileName = jpgFilePath + File.separator + fileName + PICTRUE_STUFFIX_JPG;
            if (pages > 1) {
                imgFileName = jpgFilePath + File.separator + fileName + "_" + i + PICTRUE_STUFFIX_JPG;
            }
            ImageIO.write(img, PICTRUE_FORMAT_PNG, new File(imgFileName));
            list.add(imgFileName);
            img.flush();
        }
        document.dispose();
        return list;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值