1、导入依赖
<!-- pdf转图片 -->
<dependency>
<groupId>org.icepdf.os</groupId>
<artifactId>icepdf-core</artifactId>
<version>6.1.2</version>
</dependency>
<!-- pdf转图片 -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.12</version>
</dependency>
2、代码编写
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.util.GraphicsRenderingHints;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.*;
/**
* @author lu'
* @title: PDF
* @projectName commerce
* @description: TODO
* @date 2022/3/1714:13
*/
public class PDF {
// 这个方法是比较好的, 多页的pdf也可以,每一页都转成一个单独的图片,让前端处理
public static void pdf2Pic(String pdfPath, String path, String fileName) throws Exception {
Document document = new Document();
document.setFile(pdfPath);
//缩放比例
float scale = 10f;
//旋转角度
float rotation = 0f;
for (int i = 0; i < document.getNumberOfPages(); i++) {
BufferedImage image = (BufferedImage)
document.getPageImage(i, GraphicsRenderingHints.SCREEN, org.icepdf.core.pobjects.Page.BOUNDARY_CROPBOX, rotation, scale);
RenderedImage rendImage = image;
try {
File fileDir = new File(path);
if (!fileDir.exists()) {
fileDir.mkdirs();
}
String imgName = fileName + i + ".png";
File file = new File(path + imgName);
ImageIO.write(rendImage, "png", file);
} catch (IOException e) {
e.printStackTrace();
}
image.flush();
}
document.dispose();
}
public static void main(String[] args) throws Exception {
String filePath = "C:\\Users\\lu'\\Downloads\\two.pdf";
// pdf2Pic(filePath, "D:\\ceshi\\ceshi\\software\\seata\\bin", "22857547386337291_");
// orderPdfToImg(filePath);
picAdd();
}
/**
* <p>Description:订单pdf文件转img文件 </p>
* @param pdfPath
*/
public static String orderPdfToImg(String pdfPath) {
File file = new File(pdfPath);
PDDocument pdDocument;
try {
//order目录
String orderPath = file.getParent();
//转换后的img目录
String imgPath = "D:\\ceshi\\ceshi\\software\\seata\\a.png";
pdDocument = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(pdDocument);
/* 第二位参数越大转换后越清晰,相对转换速度越慢 */
BufferedImage image = renderer.renderImageWithDPI(0, 1000);
ImageIO.write(image, "png", new File(imgPath));
pdDocument.close();
return imgPath;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
// 图片拼接 这个是java 原生的包,效果不行
public static void picAdd(){
try {
InputStream imagein1 = new FileInputStream("D:\\ceshi\\ceshi\\software\\seata\\bin22857547386337291_0.png");
InputStream imagein2 = new FileInputStream("D:\\ceshi\\ceshi\\software\\seata\\bin22857547386337291_1.png");
BufferedImage bg_image = new BufferedImage(192, 144, BufferedImage.TYPE_INT_BGR);
BufferedImage image1 = ImageIO.read(imagein1);
BufferedImage image2 = ImageIO.read(imagein2);
Graphics g = bg_image.getGraphics();
g.drawImage(image1, 0, 48, 48, 48,null);
g.drawImage(image2, 48, 48, 48, 48,null);
OutputStream outImage = new FileOutputStream("D:\\ceshi\\ceshi\\software\\seata\\c.png");
JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(outImage);
enc.encode(bg_image);
imagein1.close();
imagein2.close();
outImage.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}