SpringBoot生成PDF文件
项目生成需要用到两个依赖
<!-- freemarker 读取html模板文件 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
<!-- xml 将html模板文件转换成pdf -->
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf</artifactId>
<version>9.0.9</version>
</dependency>
生成pdf用到的方法
package cn.oick.www.base.util;
import com.lowagie.text.pdf.BaseFont;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Locale;
import java.util.Map;
public class PdfUtil {
//构造器私有,防止别人通过new对象调用
private PdfUtil() {
}
/**
*
* @param data 导入的数据
* @param templateFileName 模板名称
* @return 文件流
*/
public static ByteArrayOutputStream createPDF(Map data, String templateFileName) {
log.info("createPDF start.......................");
// 创建一个FreeMarker实例, 负责管理FreeMarker模板的Configuration实例
Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
// 指定FreeMarker模板文件的位置
configuration.setClassForTemplateLoading(PdfUtil.class, "/template");
ITextRenderer renderer = new ITextRenderer();
ByteArrayOutputStream out = new ByteArrayOutputStream();
StringWriter writer = new StringWriter();
try {
// 设置 css中 的字体样式(暂时仅支持宋体和黑体) 必须,不然中文不显示
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
fontResolver.addFont("C:/Windows/Fonts/simhei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
fontResolver.addFont("C:/Windows/Fonts/simkai.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
// 设置模板的编码格式
configuration.setEncoding(Locale.CHINA, "UTF-8");
// 获取模板文件
Template template = configuration.getTemplate(templateFileName, "UTF-8");
// 将数据输出到html中
template.process(data, writer);
writer.flush();
String html = writer.toString();
// 把html代码传入渲染器中
renderer.setDocumentFromString(html);
// 设置模板中的图片路径 (这里的images在resources目录下) 模板中img标签src路径需要相对路径加图片名 如<img src="images/xh.jpg"/>
String url = "/";
renderer.getSharedContext().setBaseURL(url);
renderer.layout();
renderer.createPDF(out, false);
renderer.finishPDF();
out.flush();
} catch (Exception e) {
log.info(e.toString());
e.printStackTrace();
} finally {
try {
writer.close();
out.close();
} catch (IOException e) {
log.info(e.toString());
e.printStackTrace();
}
}
return out;
}
}
pdf生成所需要的模板,该项目使用的html形式的模板,内容以data中变量来填充${tbsj}
THE END
0
二维码
打赏
海报
SpringBoot生成PDF文件
项目生成需要用到两个依赖
<!-- freemarker 读取html模板文件 -->
<dependency>
<groupId>org.freemarker</groupId>
<……
五哥