步骤:
1、通过freemarker替换原来html模板中的${xxx};
2、将包含数据的html转PDF。
package com.caac.test;
import com.caac.utils.WordUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import java.util.HashMap;
import java.util.Map;
public class TestHtml2PDF {
public static final String DEST = "E:\\工作需求\\IText生成PDF\\test.pdf";
public TestHtml2PDF() {
super();
}
/**
* Creates a PDF
* @param destPath 输出的pdf路径
* @throws IOException
* @throws DocumentException
*/
public void createPdf(String destPath, String reHtml) throws IOException, DocumentException {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destPath));
document.open();
XMLWorkerHelper.getInstance().parseXHtml(writer, document, new FileInputStream(reHtml),
Charset.forName("UTF-8"));
document.close();
}
public static void main(String[] args) throws IOException, DocumentException {
System.out.println("开始..");
//1,替换原来的html内容,即赋值到html模板
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("name", "11测试项目名称22");
dataMap.put("name1", "11测试项目名称33");
dataMap.put("name2", "11测试项目名称44");
dataMap.put("nr", "测试nr");
dataMap.put("nr2", "基础研究:指为获得关于现象和可观察事实的基本原理及新知识而进行的实验性和理论性工作,它不以任何专门或特定的应用或使用为目的。");
String oldHtmlPath = "E:\\工作需求\\IText生成PDF"; //导出的模板文件夹目录
String newHtmlPath = "E:\\工作需求\\IText生成PDF\\newkyxm.html"; //替换后的html(含数据内容)
String oldHtmlName = "test.html"; //原来的html名
new WordUtils().createDoc(dataMap, oldHtmlPath, newHtmlPath, oldHtmlName);
System.out.println("完成赋值html内容");
//2,html转PDF
File file = new File(DEST);
file.getParentFile().mkdirs();
new TestHtml2PDF().createPdf(DEST, newHtmlPath);
System.out.println("完成。");
}
}
需要引入itext-5.4.1和 xmlworker-5.4.1 里面的jar包
--摘自 testHtml2PDF