依赖jar包
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.24</version><!-- 使用适当的版本号 -->
</dependency>
拼接成一张图片
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
public static void main(String[] args) {
try {
// 加载PDF文件
PDDocument document = PDDocument.load(new File("D:\\test.pdf"));
// 创建PDFRenderer对象
PDFRenderer pdfRenderer = new PDFRenderer(document);
// 设置缩放比例
float scale = 1.0f;
BufferedImage bufferedImage = null;
for (int pageNum = 0; pageNum < document.getNumberOfPages(); pageNum++) {
// 渲染PDF页面为BufferedImage
if(pageNum == 0){
bufferedImage = pdfRenderer.renderImage(pageNum);
continue;
}
BufferedImage bufferedImage1 = pdfRenderer.renderImage(pageNum);
// 输出为JPG文件
// 创建新的图片
BufferedImage combinedImage = new BufferedImage(
Math.max(bufferedImage.getWidth(),bufferedImage1.getWidth()),
bufferedImage.getHeight()+ bufferedImage1.getHeight(),
BufferedImage.TYPE_INT_RGB);
// 获取Graphics对象并绘制图片
Graphics graphics = combinedImage.getGraphics();
graphics.drawImage(bufferedImage, 0, 0, null);
graphics.drawImage(bufferedImage1, 0, bufferedImage.getHeight(), null);
bufferedImage = combinedImage;
}
ImageIO.write(bufferedImage, "jpg", new File("D:\\test.jpg"));
// 关闭PDF文档
document.close();
System.out.println("PDF转换为JPG完成!");
} catch (Exception e) {
e.printStackTrace();
}
}
想要生成多张 ImageIO.write放在for循环中(注:名字重复会被覆盖,添加循环中下标)
ImageIO.write(bufferedImage, "jpg", new File("D:\\test"+pageNum+".jpg"));
图片转回PDF
public static void ImageToPdf(){
try{
PDDocument document = new PDDocument();
File folder = new File("D://红黑树的插入场景.png");
BufferedImage bufferedImage = ImageIO.read(folder);
PDPage page = new PDPage(new PDRectangle(bufferedImage.getWidth(), bufferedImage.getHeight()));
document.addPage(page);
PDImageXObject pdImage = LosslessFactory.createFromImage(document, bufferedImage);
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
contentStream.drawImage(pdImage, 0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());
}
document.save("E://test.pdf");
document.close();
}catch (Exception e){
e.printStackTrace();
}
}
多张图片转为PDF
主要代码在于 documen.addPage(page);
File folder = new File("路径");
File[] imageFiles = folder.listFiles((dir, name) -> name.toLowerCase().endsWith(".png") || name.toLowerCase().endsWith(".jpg"));
for (File imageFile : imageFiles) {
BufferedImage bufferedImage = ImageIO.read(imageFile);
PDPage page = new PDPage(new PDRectangle(bufferedImage.getWidth(), bufferedImage.getHeight()));
document.addPage(page);
PDImageXObject pdImage = LosslessFactory.createFromImage(document, bufferedImage);
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
contentStream.drawImage(pdImage, 0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());
}
}