工具类
package org.jeecg.modules.common.autoGenerateImages;
import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
/**
* @author DLXL9664
*/
@Slf4j
public class BimPDFFileImage{
public static void main(String[] args) throws Exception {
generateThumbnail(new File("D:\\fileText\\BIMIndustry.pdf"),new File("D:\\fileText\\ceshi.png"));
}
/**
* 增加时间戳的文件名(不带后缀)
*
* @param filePath 文件路径
* @return java.lang.String
* @create 2023-01-09
*/
private static String getFileName(String filePath) {
String fileName = new File(filePath).getName();
String res = System.currentTimeMillis() + "-" + fileName.substring(0, fileName.lastIndexOf("."));
return res;
}
/**
* 引用分类
*
* @param inputFile 需要读取的文件
* @param outputFile 缩略图文件
* @create 2023-05-9
* */
public static void generateThumbnail(File inputFile, File outputFile) {
try {
int thumbWidth = 1600;
int thumbHeight = 900;
String fileType = getFileType(inputFile);
if ("pdf".equals(fileType)) {
generatePdfThumbnail(inputFile, outputFile, thumbWidth, thumbHeight);
} else if ("pptx".equals(fileType)) {
// PPT 宽高重绘不了 暂时写死
generatePPTThumbnail(inputFile, outputFile, 900, 500);
} else {
throw new IllegalArgumentException("Unsupported file type");
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* PPT文件生成缩略图
* */
private static void generatePPTThumbnail(File pptFile, File thumbnailFile, int width, int height) throws Exception {
// 读取 PowerPoint 文件内容
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(pptFile));
// 渲染 PowerPoint 内容为图片
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取第一张幻灯片
XSLFSlide slide = ppt.getSlides().get(0);
Graphics2D graphics2D = image.createGraphics();
graphics2D.setPaint(Color.WHITE);
graphics2D.fill(new Rectangle2D.Float(0,0,width,height));
slide.draw(graphics2D);
// 将图片写入文件
ImageIO.write(image, "png", thumbnailFile);
// 释放资源
graphics2D.dispose();
ppt.close();
}
/**
* pdf文件生成缩略图
* */
private static void generatePdfThumbnail(File inputFile, File outputFile, int thumbWidth, int thumbHeight) {
try {
PDDocument document = PDDocument.load(inputFile);
PDFRenderer pdfRenderer = new PDFRenderer(document);
BufferedImage image = pdfRenderer.renderImageWithDPI(0, 100);
BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
ImageIO.write(thumbImage, "png", outputFile);
document.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getFileType(File file) {
String fileName = file.getName();
int index = fileName.lastIndexOf(".");
if (index > 0 && index < fileName.length() - 1) {
return fileName.substring(index + 1);
}
return "";
}
public static String getFileTypeByName(String fileName) {
int index = fileName.lastIndexOf(".");
if (index > 0 && index < fileName.length() - 1) {
return fileName.substring(index + 1);
}
return "";
}
}