一、Java实现多图片合并长图并转pdf文件
一、项目引入依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.6</version>
<scope>test</scope>
</dependency>
二、准备工作
一、在电脑桌面路径下新建一个CreateImagePdf文件夹
二、在新建CreateImagePdf文件夹下新建一个Image文件夹并放入需要合并的图片
三、新建一个NewImage文件夹用于存放程序执行时统一缩放后的图片
四、新建一个result文件夹用于存放程序执行后生成的合并图片和pdf
三、编写测试类
package com.jin.test.test02;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class CreateImagePdf {
public static void main(String[] args) {
try {
String folderImage = "C:\\Users\\Admin\\Desktop\\CreateImagePdf\\Image";
String folderNewImage = "C:\\Users\\Admin\\Desktop\\CreateImagePdf\\NewImage";
String folderresult = "C:\\Users\\Admin\\Desktop\\CreateImagePdf\\result";
scaleImages(folderImage, folderNewImage);
File file = new File(folderNewImage);
File[] files = file.listFiles();
List<String> imageFiles = new ArrayList<>();
for (File file1 : files) {
imageFiles.add(file1.getPath());
}
String mergedImageFile = folderresult + "\\mergedImage.jpg";
mergeImages(imageFiles, mergedImageFile);
String pdfFile = folderresult + "\\mergedImage.pdf";
createPDF(mergedImageFile, pdfFile);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void mergeImages(List<String> imageFiles, String mergedImageFile) throws Exception {
BufferedImage mergedImage = null;
int heightTotal = 0;
int maxWidth = 0;
for (String imageFile : imageFiles) {
BufferedImage image = ImageIO.read(new File(imageFile));
if (image.getWidth() > maxWidth) {
maxWidth = image.getWidth();
}
heightTotal += image.getHeight();
}
mergedImage = new BufferedImage(maxWidth, heightTotal, BufferedImage.TYPE_INT_RGB);
int offsetY = 0;
for (String imageFile : imageFiles) {
BufferedImage image = ImageIO.read(new File(imageFile));
mergedImage.getGraphics().drawImage(image, 0, offsetY, null);
offsetY += image.getHeight();
}
ImageIO.write(mergedImage, "jpg", new File(mergedImageFile));
}
public static void createPDF(String mergedImageFile, String pdfFile) throws Exception {
Image image = Image.getInstance(mergedImageFile);
Rectangle rectangle = new Rectangle(image.getWidth(), image.getHeight());
Document document = new Document(rectangle, 0, 0, 0, 0);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(pdfFile));
document.open();
PdfContentByte cb = writer.getDirectContent();
image.scaleToFit(document.getPageSize().getWidth(), document.getPageSize().getHeight());
image.setAbsolutePosition(0, 0);
cb.addImage(image);
document.close();
}
private static void scaleImages(String folderImage, String folderNewImage) throws Exception {
List<String> imageFiles = new ArrayList<>();
File file = new File(folderImage);
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
imageFiles.add(files[i].getName());
System.err.println(files[i].getName());
}
for (String imageFile : imageFiles) {
File f = new File(folderImage + "\\" + imageFile);
BufferedImage image = ImageIO.read(f);
BufferedImage imag = scaleImage(image, 600, 842);
String[] split = imageFile.split("\\.");
File targetFile = new File(folderNewImage + "\\" + split[0] + ".jpg");
ImageIO.write(imag, "jpg", targetFile);
}
}
private static BufferedImage scaleImage(BufferedImage img, int maxWidth, int maxHeight) {
int width = img.getWidth();
int height = img.getHeight();
double scale = Math.min((double) maxWidth / width, (double) maxHeight / height);
int newWidth = (int) (width * scale);
int newHeight = (int) (height * scale);
BufferedImage scaledImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = scaledImage.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.drawImage(img, 0, 0, newWidth, newHeight, null);
g2d.dispose();
return scaledImage;
}
}
四、测试结果
一、程序执行结果
二、newImage生成统一缩放后的图片
三、合并后的图片和pdf