依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
中文字体,我是在windows 10 上找的宋体C:\Windows\Fonts\STSONG.TTF
放在springboot的resources目录font下面
简单的工具类
package com.cgw.utils;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.core.io.ClassPathResource;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class PdfUtil {
/**
* 将图片写入pdf
*
* @param imageFiles
* @return
* @throws IOException
*/
public static File generatePdf(File... imageFiles) throws IOException, DocumentException {
if (ArrayUtils.isEmpty(imageFiles)) {
return null;
}
File pdfFile = FileUtil.createTempFile("tmp.pdf");
ClassPathResource resource = new ClassPathResource("font/STSONG.TTF");
BaseFont baseFont = BaseFont.createFont(resource.getURL().toString(), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont);
// 创建文件
Document document = new Document();
// 建立一个书写器
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(pdfFile));
writer.setStrictImageSequence(true);
// 打开文件
document.open();
// 添加内容
Paragraph paragraph = new Paragraph("你好世界,hello world", font);
paragraph.setAlignment(Element.ALIGN_CENTER);
document.add(paragraph);
float scalePercentage = (72 / 300f) * 100.0f;
for (File imageFile : imageFiles) {
// 图片
Image image = Image.getInstance(imageFile.getAbsolutePath());
image.scalePercent(scalePercentage, scalePercentage);
image.setAlignment(Element.ALIGN_CENTER);
// 将图片1添加到pdf文件中
document.add(image);
}
// 关闭文档
document.close();
// 关闭书写器
writer.close();
return pdfFile;
}
}
FileUtil.java
package com.casic.dataapplication.utils;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;
public class FileUtil {
private static Logger logger = LoggerFactory.getLogger(FileUtil.class);
private static final String TMP_FILE_NAME = "file.tmp"
public static Path getTempPath() {
String realPath = System.getProperty("java.io.tmpdir");
String id = UUID.randomUUID().toString().replace("-", "");
Path path = Paths.get(realPath, id);
try {
FileUtils.forceMkdir(path.toFile());
} catch (IOException e) {
logger.error("创建临时目录异常:{}", e);
throw new RuntimeException(e);
}
return path;
}
/**
* 创建一个临时文件
*
* @param filename
* @return
*/
public static File createTempFile(String filename) {
return getTempPath().resolve(filename).toFile();
}
/**
* 创建一个临时文件
*
* @return
*/
public static File createTempFile() {
return getTempPath().resolve(TMP_FILE_NAME).toFile();
}
/**
* 删除一个文件
*/
public static boolean deleteFile(File file) {
logger.debug("删除文件:{}", file.getAbsolutePath());
return FileUtils.deleteQuietly(file);
}
/**
* 删除一个文件同时删除父目录
*
* @return true删除成功,false删除失败
*/
public static boolean deleteFileAndParentPath(File file) {
logger.debug("删除文件和父目录:{}", file.getAbsolutePath());
return FileUtils.deleteQuietly(file) && FileUtils.deleteQuietly(file.getParentFile());
}
}
调用时传的图片资源
效果图