原理
先把导出的页面,做成ftl页面,用freemarker或其它模板技术替换里面动态数据,生成html页面,在利用itext5生成pdf即可
jar
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf-itext5</artifactId>
<version>9.0.8</version>
</dependency>
代码分享
package com.bigluobo.utils;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.BaseFont;
import org.xhtmlrenderer.pdf.ITextRenderer;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* Created by simon on 2016/4/19.
*/
public class PdfUtils {
public static final String getPath() {
return PdfUtils.class.getResource("/").getPath().substring(1);
}
public static final void exportPdf(String url, String pdf) throws IOException, DocumentException {
ITextRenderer renderer = new ITextRenderer();
String path = getPath();
//添加字体,以支持中文
renderer.getFontResolver().addFont(path + "fonts/arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.getFontResolver().addFont(path + "fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.setDocument(url);
OutputStream os = null;
try {
os = new FileOutputStream(pdf);
renderer.layout();
renderer.createPDF(os);
os.close();
os = null;
} finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
// ignore
}
}
}
}
public static void main(String[] args) {
// System.out.println(PdfUtils.getPath());
try {
PdfUtils.exportPdf("http://localhost:8080/template/test.html", "d:/test.pdf");
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
坑点:
需要自己去下载字体,如果没有对应的字体...你懂的,下载地址(http://www.ztxz.org/),修改下代码中字体的存放路径即可。