java代码抓取pdf部分文件生成缩略图(50%)
0. 参考博文:
java代码获取pdf文件第一页作为封面缩略图
通过BufferedImage实现将几张图片合成一张图片,图片效果类型为依次排列图片
1. 导入依赖
<!-- 生成pdf预览图的相关依赖包 -->
<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>
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
2. 具体实现如下
/**
* pdf预览的方法
*
* @param inputFile pdf位置
* @param outputFile 图片存放位置
*/
public static void generatePdfImage(URL inputFile, String outputFile) {
org.icepdf.core.pobjects.Document document = null;
try {
float rotation = 0f;
//缩略图显示倍数,1表示不缩放,0.5表示缩小到50%
float zoom = 1f;
document = new org.icepdf.core.pobjects.Document();
document.setUrl(inputFile);
FileOutputStream out = new FileOutputStream(new File(outputFile));
Image image1 = document.getPageImage(0, GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, rotation, zoom);
int halfPages = (document.getPageTree().getNumberOfPages()) / 2;
// 每张图片宽度一样, 高度一样
int width = image1.getWidth(null);
int height = image1.getHeight(null) * halfPages;// 每张图片高度 * 图片数量
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics graphics = bufferedImage.createGraphics();
int heightSum = 0;
for (int i = 0; i < halfPages; i++) {
Image image = document.getPageImage(i, GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, rotation, zoom);
int imageHeight = image.getHeight(null);
graphics.drawImage(image, 0,heightSum,width,imageHeight,null);// 绘制合成图片
heightSum += imageHeight;
}
graphics.dispose();
// 将绘制的图片生成至输出流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(bufferedImage);
// 关流
out.close();
} catch (Exception e) {
log.debug("生成pdf缩略图失败");
}
}