pdf转图片可调整大小分辨率

pdf转图片可调整大小分辨率

一、使用pdfbox
1、maven导包

		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>pdfbox-app</artifactId>
			<version>2.0.2</version>
		</dependency>

2、代码实现

mport org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.io.*;

/**
 * @author taboo.li
 * @version 1.0.0
 * @des
 **/
public class PicToTest {


    public static void main(String[] args) {
        File file = new File("D:\\My Documents\\桌面\\c59a438f2a3f44f4b7c6.pdf");
        try {
            PDDocument document = PDDocument.load(file);
            PDFRenderer renderer = new PDFRenderer(document);
            for (int i = 0; i < document.getNumberOfPages(); i++) {
                // dpi 设置越大 图片越大越清晰
                BufferedImage bufferedImage = renderer.renderImageWithDPI(i, 300);
                BufferedImage newImg = null;
                // copy原来的图片
                newImg = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
                newImg.getGraphics().drawImage(bufferedImage.getScaledInstance(bufferedImage.getWidth(), bufferedImage.getHeight(), Image.SCALE_SMOOTH),0,0,null);
                // 自定义长宽
//                BufferedImage img = resize(bufferedImage, 1190, 1684);
                // 图片要写入的地址
                File picFile = new File("D:\\My Documents\\桌面\\pic",i+".jpg");
                OutputStream outputStream = new FileOutputStream(picFile);
                // 注意 png 比 jpg 更清晰
                ImageIO.write(bufferedImage,"png",outputStream);
                //下面可以改变dpi,分辨率
//                JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(outputStream);
//                JPEGEncodeParam param = jpegEncoder.getDefaultJPEGEncodeParam(newImg);
//                // 设置参数
//                param.setQuality(0.75f,false);
//                param.setXDensity(300);
//                param.setYDensity(300);
//                param.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
//                jpegEncoder.setJPEGEncodeParam(param);
//                jpegEncoder.encode(newImg);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }


    }
	
    private static BufferedImage resize(BufferedImage source, int targetW, int targetH) {
        int type = source.getType();
        BufferedImage target = null;
        double sx = (double) targetW / source.getWidth();
        double sy = (double) targetH / source.getHeight();
        if (sx > sy) {
            sx = sy;
            targetW = (int) (sx * source.getWidth());
        } else {
            sy = sx;
            targetH = (int) (sy * source.getHeight());
        }
        if (type == BufferedImage.TYPE_CUSTOM) {
            ColorModel cm = source.getColorModel();
            WritableRaster raster = cm.createCompatibleWritableRaster(targetW, targetH);
            boolean alphaPremultiplied = cm.isAlphaPremultiplied();
            target = new BufferedImage(cm, raster, alphaPremultiplied, null);
        } else {
            target = new BufferedImage(targetW, targetH, type);
        }
        Graphics2D g = target.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
        g.dispose();
        return target;
    }

}

二、使用icepdf
1、引用jar包

		<dependency>
			<groupId>org.icepdf.os</groupId>
			<artifactId>icepdf-core</artifactId>
			<version>6.1.2</version>
			<exclusions>
				<exclusion>
					<groupId>javax.media</groupId>
					<artifactId>jai-core</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

2、代码实现

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
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 java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;

/**
 * @author taboo.li
 * @version 1.0.0
 * @des
 **/
public class PdfIceToImage {
    // 转化时放大倍数
    private static float zoom = 2f;
    // 颜色(灰度)
    private static int color = BufferedImage.TYPE_BYTE_GRAY;

    public static void main(String[] args) throws PDFException, IOException, PDFSecurityException {
        pdf2Pic("D:\\My Documents\\桌面\\c59a438f2a3f44f4b7c6.pdf", "D:\\My Documents\\桌面\\pic");
    }

    public static void pdf2Pic(String pdfPath, String path) throws IOException, PDFException, PDFSecurityException {
        Document document = new Document();
        document.setFile(pdfPath);
        //旋转角度
        float rotation = 0f;
        for (int i = 0; i < document.getNumberOfPages(); i++) {
            BufferedImage  img = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.PRINT, Page.BOUNDARY_CROPBOX,
                    rotation, zoom);
            try {
                BufferedImage newImg = null;
                newImg = new BufferedImage(img.getWidth(), img.getHeight(), color);
                //将原图片写入 新的图片
                newImg.getGraphics().drawImage(img.getScaledInstance(img.getWidth(), img.getHeight(), Image.SCALE_SMOOTH),0,0,null);
                File outFile = new File ( path, (i+1)+"_"+ "ice"+ ".jpg");
                OutputStream outputStream = new FileOutputStream(outFile);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outputStream);
                JPEGEncodeParam param = encoder.	getDefaultJPEGEncodeParam(newImg);
                param.setQuality(0.75f, false);
                param.setDensityUnit(com.sun.image.codec.jpeg.JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
                //分辨率 300dpi
                param.setXDensity(300);
                param.setYDensity(300);
                encoder.setJPEGEncodeParam(param);
                encoder.encode(newImg);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        document.dispose();
    }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值