freemark与flying saucer生成PDF
1.导入flying saucer与freemark的包。
2.利用freemark生成html文件。
3.利用flying saucer进行pdf文件的生成。
具体方案:
参考javaeye中的大牛文章:
http://www.iteye.com/topic/509417
参考方法:
public String generateHtml() throws IOException, Exception {
String meetingId = getRequest().getParameter("meetingId");
// TODO 生成HTML
// 得到配置对象
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
configuration.setOutputEncoding("utf-8");
// 设置生成模板加载方式(由servletcontext生成)
configuration.setServletContextForTemplateLoading(
ServletActionContext.getServletContext(), "WEB-INF/ftl");
// 生成数据模型
Map<Object, Object> root = new HashMap<Object, Object>();
// 把信息带回
getNeedMeetingInfo(root, meetingId);
// 得到模板
Template template = configuration.getTemplate("meeting.ftl");
// 创建文件夹
String uploadFoldPathStr = fileSystemService.getDocumentRoot()
+ "download" + File.separator + "pdf" + File.separator
+ this.HTML_FOLD_SUFIX + meetingId;
File uploadFoldPath = new File(uploadFoldPathStr);
if (!uploadFoldPath.exists()) {
uploadFoldPath.mkdirs();
}
// 文件保存名
Date dt = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String fileSaveName = sdf.format(dt) + ".html";
File afile = new File(uploadFoldPathStr + File.separator + fileSaveName);
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(afile), "utf-8"));
try {
// 输出模板
// template.process(root, this.getResponse().getWriter());
template.process(root, out);
} catch (TemplateException e) {
e.printStackTrace();
}
// TODO生成PDF
String inputFile = uploadFoldPathStr + File.separator + fileSaveName;
String url = new File(inputFile).toURI().toURL().toString();
// 生成PDF路径
String generatorFilePath = fileSystemService.getDocumentRoot()
+ "download" + File.separator + "pdf" + File.separator
+ this.PDF_FOLD_SUFIX + meetingId;
File generatorFoldPath = new File(generatorFilePath);
if (!generatorFoldPath.exists()) {
generatorFoldPath.mkdirs();
}
fileSaveName= sdf.format(dt)+ ".pdf";
String outputFile = generatorFilePath + File.separator +fileSaveName;
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
// 解决中文支持问题
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/Fonts/simsun.ttc",
BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
// 解决图片的相对路径问题
renderer.getSharedContext()
.setBaseURL(
"file:/D:/Work/Demo2do/Yoda/branch/Yoda%20-%20All/conf/template/");
renderer.layout();
renderer.createPDF(os);
os.close();
// 现在开始进行下载操作
MeetingFiles meetingFiles = new MeetingFiles();
meetingFiles.setFilePath("download" + File.separator + "pdf" + File.separator
+ this.PDF_FOLD_SUFIX+ meetingId);
meetingFiles.setFileName(fileSaveName);
meetingFiles.setFileSaveName(fileSaveName);
this.getRequest().setAttribute("meetingFiles", meetingFiles);
String from = "WEB";
String documentRoot = fileSystemService.getDocumentRoot();
getRequest().setAttribute("documentRoot", documentRoot);
getRequest().setAttribute("from", from);
return SUCCESS;
}