package com.ruoyi.common.utils; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.pdf.*; import com.ruoyi.common.utils.file.FileUtils; import com.spire.doc.Document; import com.spire.doc.FileFormat; import com.spire.pdf.PdfDocument; import com.spire.pdf.PdfDocumentBase; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; @Configuration @Slf4j public class MergeFilesToPDFUtils { @Value("${ruoyi.archived}") private String archived; /** * 将图片合成pdf */ public Boolean addImageToPdf(String imagePath, String pdfPath) throws IOException { com.itextpdf.text.Document document = new com.itextpdf.text.Document(); try { PdfWriter.getInstance(document, new FileOutputStream(pdfPath)); document.open(); // 获取图像的宽度和高度 BufferedImage image = ImageIO.read(new File(imagePath)); float imageWidth = image.getWidth(); float imageHeight = image.getHeight(); // 获取页面的宽度和高度 float pageWidth = document.getPageSize().getWidth(); float pageHeight = document.getPageSize().getHeight(); // 计算调整比例,确保图像适应页面 float widthRatio = pageWidth / imageWidth; float heightRatio = pageHeight / imageHeight; float ratio = Math.min(widthRatio, heightRatio); // 计算调整后的图像大小 float adjustedWidth = imageWidth * ratio - 50; float adjustedHeight = imageHeight * ratio - 50; // 创建图像对象 Image pdfImage = Image.getInstance(imagePath); pdfImage.scaleAbsolute(adjustedWidth, adjustedHeight); // 添加图像到文档 document.add(pdfImage); } catch (Exception e) { e.printStackTrace(); } finally { document.close(); } return true; } /** * WORD转PDF * * @param inputPath * @param outputPath */ public Boolean wordtoPdf(String inputPath, String outputPath) { Document doc = new Document(); //加载Word doc.loadFromFile(inputPath); //保存为PDF格式 doc.saveToFile(outputPath, FileFormat.PDF); return true; } /** * pdf合并 */ public void mergePdfFiles(List pdfFiles, String fileName) throws IOException, DocumentException { com.itextpdf.text.Document document = new com.itextpdf.text.Document(); log.info("fileName的全路径:{}", archived + "/" + fileName); PdfCopy copy = new PdfCopy(document, new FileOutputStream(archived + "/" + fileName)); document.open(); for (String pdfFile : pdfFiles) { PdfReader reader = new PdfReader(pdfFile); int totalPages = reader.getNumberOfPages(); for (int page = 1; page <= totalPages; page++) { PdfImportedPage importedPage = copy.getImportedPage(reader, page); copy.addPage(importedPage); } reader.close(); } document.close(); } }