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;
}
分享到:
相关推荐
基于iText和flying saucer结合freemark生成pdf 范例 1. 使用maven构建,不含jar包,可以自行使用maven下载依赖包, 2. 使用前需要将C:/Windows/Fonts/ARIALUNI.TTF 复制到doc-render/src/test/resources/config/fonts...
二、FlyingSaucer PDF生成 FlyingSaucer是一个基于IText的PDF生成工具,可以将HTML文档转换为PDF文档。在本方案中,FlyingSaucer用于将生成的HTML模板转换为PDF文档。FlyingSaucer支持中文字符的正确显示,且可以...
基于iText 和 flying saucer结合freemark java 生成 pdf
Flying-Saucer通过html生成pdf。。。项目中已经附带了jar包,放到项目中就可以运行了。亲测了,解决了中文不显示或者样式的问题,感觉蛮实用的。网上找了很久和下载其他资源用了好多积分,如果有需要的就下载吧!!...
Flying Saucer 支持中文宋体win,Linux; Css 页面字体修改为 font-family:STSong; 就可以了,具体
基于iText 和 flying saucer 结合 freemark java 生成 pdf
在IT行业中,生成PDF文件是一项常见的任务,尤其在报表、文档和发票的自动化处理中。本主题将深入探讨如何利用Freemarker模板和wkhtmltox工具来实现这一功能。 **Freemarker模板** 是一个强大的Java模板引擎,用于...
生成PDF文件通常需要额外的库,比如Flying Saucer。这个库可以将HTML转换为PDF。添加Flying Saucer的依赖: ```xml <groupId>org.xhtmlrenderer <artifactId>flying-saucer-pdf <version>9.1.22 ``` 然后,...
3. **FreeMarker与PDF生成库的结合** - **iText**:这是一个流行的Java库,用于创建和修改PDF文档。我们可以先用FreeMarker处理模板,生成HTML,然后使用iText将HTML转换为PDF。 - **Apache PDFBox**:这是Apache...
在Java Web开发中,它被广泛应用于生成PDF文档。本篇文章将深入探讨如何利用Freemarker来解析并生成PDF文件。 首先,理解Freemarker的基本概念至关重要。Freemarker是一个基于模板的、与语言无关的模板引擎,它的...
Freemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+java
在Java世界中,有许多库可以帮助我们生成PDF,例如iText、Apache PDFBox和 Flying Saucer。然而,当我们需要将动态数据与预定义的模板结合时,Freemarker提供了一个灵活且高效的解决方案。 **一、Freemarker基础** ...
1. itextpdf(CreatePdf) 不太推荐需要在代码内部编写PDF格式,如果要使用,建议写个基类,将同一版本 或者同一类型的公共方法写入,差异化的抽象,一个模板一个子类,子类使用@Component命名,使用反射的方式获取...
在Java应用中,FreeMarker通常与Servlet容器一起使用,用于生成动态网页内容,但也可以用来生成任何类型的文本输出,包括PDF。 接下来是Itext。Itext提供了一系列API,可以方便地创建PDF文档,包括添加文本、图像、...
在这个项目中,可能用它来根据数据生成HTML模板,然后将其传递给flying-saucer生成PDF。使用模板引擎可以使代码更清晰,更容易维护,因为HTML的生成逻辑和业务逻辑分离了。 综上所述,这个项目展示了如何结合Java、...
【Java使用FreeMarker生成PDF文档】\n\n在Java开发中,我们经常需要生成各种类型的文档,例如PDF、Word等。FreeMarker是一个强大的模板引擎,它允许开发者通过模板语言来生成文本输出,常用于生成HTML、XML等动态...
它基于模板语言,通过定义变量和控制结构(如if/else、foreach等),在运行时将这些变量与Java对象的数据结合,生成最终的HTML输出。这使得我们可以灵活地构建动态网页,同时保持页面源码的清晰和可读性。 在给定的...
在“实现FreeMark读取模板生成HTML”的过程中,我们需要完成以下几个关键步骤: 1. **安装与引入**: 首先,确保你的项目已经添加了FreeMarker的依赖库,通常对于Java项目,可以通过Maven或Gradle将其添加到构建文件...
总结起来,“freemark+itext”方案提供了一种灵活且强大的方式来生成PDF文档。FreeMarker允许我们使用模板语言来描述文档的结构,而iText则负责将这些结构转换为PDF格式。这种组合使得开发人员能够快速地根据业务...
2、由上述生成的html模板通过java代码生成pdf...适合人群:需要通过法务提供的word类型的合同模板,填充数据生成pdf的人。 阅读建议:按照上述操作步骤,先看README.md文档,再看other/生成html操作步骤目录下的图片。