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<String> 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();
|
}
|
|
}
|