效果图
直接上代码
1.引入jar
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version></dependency>
2.测试类
package pers.wwz.study.img2pdf20240507;import org.apache.pdfbox.io.IOUtils;
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.PDImageXObject;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class Test {public static void main(String[] args) {downloadPdf("6.jpg","1.pdf");}/*** 下载** @param imgFilePath img文件路径* @param filePath 文件路径* @throws IOException ioexception*/private static void downloadPdf( String imgFilePath,String filePath) {PDDocument document = new PDDocument();try {// 1.将本地的图片转成流形式File imgFile = new File("6.jpg");byte[] imageBytes = readBytesFromFile(imgFile);File imgFile2 = new File("7.jpg");byte[] imageBytes2 = readBytesFromFile(imgFile2);File imgFile3 = new File("10.jpg");byte[] imageBytes3 = readBytesFromFile(imgFile3);// 2. 生成PDFgenPdf(document, imageBytes);genPdf(document, imageBytes2);genPdf(document, imageBytes3);// 4. 保存PDFFile outputFile = new File(filePath);File parentFolder = outputFile.getParentFile();if (parentFolder != null && !parentFolder.exists()) {parentFolder.mkdirs();}document.save(outputFile);document.close();}catch (Exception e){}}private static void genPdf(PDDocument document, byte[] imageBytes) throws IOException {//2. 生成一页 PDF documentPDImageXObject image = PDImageXObject.createFromByteArray(document, imageBytes, "image");// 这里是你生成PDF自适应图片大小,不设置会默认为A4PDRectangle pageSize = new PDRectangle(image.getWidth(), image.getHeight());PDPage page = new PDPage(pageSize);document.addPage(page);// 3.将 图片 添加进PDF documentPDPageContentStream contentStream = new PDPageContentStream(document, page);float pageWidth = pageSize.getWidth();float pageHeight = pageSize.getHeight();float imageWidth = image.getWidth();float imageHeight = image.getHeight();float scale = Math.min(pageWidth / imageWidth, pageHeight / imageHeight);float scaledWidth = imageWidth * scale;float scaledHeight = imageHeight * scale;float x = (pageWidth - scaledWidth) / 2;float y = (pageHeight - scaledHeight) / 2;// 这里是将你的图片填充入pdf页contentStream.drawImage(image, x, y, scaledWidth, scaledHeight);contentStream.close();}/*** 从文件读取字节** @param file 文件* @return {@link byte[]}* @throws IOException ioexception*/private static byte[] readBytesFromFile(File file) throws IOException {FileInputStream inputStream = new FileInputStream(file);byte[] bytes = IOUtils.toByteArray(inputStream);inputStream.close();return bytes;}}
参考链接:java实现图片转PDF_java 图片转pdf-CSDN博客