1.导入jar包(使用maven管理)
<!--itext start-->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext-rtf</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.4.1</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>core-renderer</artifactId>
<version>R8</version>
</dependency>
<!--itext end-->
2.编写处理类HtmlToPDF.java
<pre name="code" class="java">
import java.awt.Color;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.MalformedURLException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JOptionPane;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.itextpdf.text.pdf.BaseFont;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
public class HtmlToPDF {
private static HtmlToPDF instance=new HtmlToPDF();
private HtmlToPDF()
{
}
public static HtmlToPDF getInstance()
{
return instance;
}
private String basePath=this.getClass().getResource("").getPath()+"template";
private String tmppdfPath = "D:/常用/深圳项目/新建文件夹/template/pdf";//pdf路径
//<span style="font-family: Arial, Helvetica, sans-serif;">archiveInfoMap放置要传递给模版的参数</span>
private String preExportPdf(Map<String,Object> archiveInfoMap) throws Exception
{ UUID uuid = UUID.randomUUID();
String outputFile = tmppdfPath + "/" + uuid + ".pdf"; //生成的PDF名
//STEP1:使用freemarker 将模版页面生成要转的html页面
//a.创建一个合适的Configration对象
Configuration configuration = new Configuration();
// configuration.setDirectoryForTemplateLoading(new File(basePath));//方式一:使用绝对路径设置模版路径
configuration.setClassForTemplateLoading(this.getClass(), "template");//方式二:使用所在类的相对路径设置模版路径
configuration.setObjectWrapper(new DefaultObjectWrapper());
configuration.setDefaultEncoding("UTF-8"); //这个一定要设置,不然在生成的页面中 会乱码
//b.获取或创建一个模版
Template template = configuration.getTemplate("test3.html");
String outPutFileName = basePath+"/"+unitId+".html"; //生成的html名
Writer writer = new OutputStreamWriter(new FileOutputStream(outPutFileName),"UTF-8");
//c.使用template将数据注入模版页面生成要转pdf的html页面
template.process(archiveInfoMap, writer);
writer.flush();
//STEP2:使用itext将html页面转成PDF文件
OutputStream os = new FileOutputStream(outputFile);
// String url=new File(outPutFileName).toURI().toURL().toString();
String url=new File(outPutFileName).toURI().toURL().toString();
//生成ITextRenderer实例
ITextRenderer renderer = new ITextRenderer();
//关联html页面
renderer.setDocument(url);
//设置获取图片的基本路径
renderer.getSharedContext().setBaseURL(new File(basePath).toURI().toURL().toString());
//解决中文问题(模版页面test3.html配套加上<style mce_bogus="1" type="text/css">
// body {font-family: SimSun; background:none;margin-left: auto;margin-right: auto;}
// </style>)
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/WINDOWS/Fonts/SimSun.ttc",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.layout();
renderer.createPDF(os);
writer.close();
os.close();
File file =new File(outPutFileName);
return outputFile;
}
public String exportPdf(Map baseInfoMap,String imgURL) throws Exception
{
String pdfFilename = preExportPdf(baseInfoMap);
System.out.println("个人档案pdf导出成功:["+pdfFilename+"]");
return pdfFilename;
}
}