java代码如下:
/**
* 使用在线编辑器生成PDF
* @param htmlCode 编辑器内容
* @param pdfPath PDF文件保存路径
*/
public static void html2Pdf(String htmlCode, String pdfPath) {
try {
String realPath = ServletActionContext.getRequest().getSession().
getServletContext().getRealPath("");
String fontPath = realPath + "\\resource\\font\\simsun.ttc";
String projectName = realPath.substring(realPath.lastIndexOf("\\") + 1);
/**
* 替换编辑器中上传图片的路径, 用于解决用户上传图片的相对路径问题
* 替换前:src="/xxx/resource/manual/
* 替换后:src="xxx/resource/manual/
*/
String oldChar = "/" + projectName + "/resource/manual/";
String newChar = projectName + "/resource/manual/";
htmlCode = htmlCode.replace(oldChar, newChar);
OutputStream os = new FileOutputStream(pdfPath);
ITextRenderer renderer = new ITextRenderer();
StringBuffer html = new StringBuffer();
// DOCTYPE 必需写否则类似于这样的字符( )解析会出现错误
html.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
html.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">")
.append("<head>")
.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />")
.append("<style type=\"text/css\" >body {font-family: SimSun;}</style>")
.append("</head>").append("<body>");
html.append(htmlCode);
html.append("</body></html>");
renderer.setDocumentFromString(html.toString());
// 解决中文支持问题
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
realPath = realPath.replace(projectName, ""); // 去掉项目名
realPath = realPath.replace("\\", "/");
// 解决图片的相对路径问题 ,图片路径必须以file开头
renderer.getSharedContext().setBaseURL("file:/" + realPath);
renderer.layout();
renderer.createPDF(os);
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}