您的位置:首页 > 编程语言 > Java开发

java导出pdf

2016-04-19 11:25 489 查看
原理

先把导出的页面,做成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/),修改下代码中字体的存放路径即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: