项目要求 生成pdf下载。 在网上找了几天终于找到了符合自己要求的的工具。
思路:1. 生成模板。 2.转成pdf、进行下载。
1.生成模板
使用了 .ftl 制作模板文件。摘自:FreeMarker 之快速入门Demo - 七里香的博客 - CSDN博客
同时可以使用html 或者xhtml ,然后使用jsoup。有一个大佬写的:java实现修改html模板内容 - heiliang27的博客 - CSDN博客。以此标记
<dependency>
<groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version>
</dependency>
2.转成pdf
摘自:java实现HTML转PDF - 橙子hhh的个人空间 - 开源中国
经过项目的编写进行了一些修改。大体都是使用上述博客。在使用的时候出现了几个问题:
1.模板文件生成出现了乱码。 办法 给模板设置字符编码。
Configuration configuration = new Configuration(Configuration.getVersion());
configuration.setDirectoryForTemplateLoading(new File(Test01.class.getResource("/test").getPath()));
configuration.setDefaultEncoding("utf-8");
Template template=configuration.getTemplate("test.ftl");
template.setEncoding("utf-8");
2.在实际项目部署的时候,出现与本机结果不符的问题。查找发现是jar包冲突。
public static void html2pdf(String htmlFile, String pdfFile) throws Exception {
// step 1 pdf转换
String url = new File(htmlFile).toURI().toURL().toString();
System.out.println(url); System.out.println(pdfFile);
// step 2
OutputStream os = new FileOutputStream(pdfFile);
// OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream(pdfFile),"UTF-8");
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);// step 3 解决中文支持
ITextFontResolver fontResolver = renderer.getFontResolver(); fontResolver.addFont(FileTypeConvertUtil.class.getResource("/Fonts/simsun.ttc").getPath(), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.layout();
renderer.createPDF(os);
os.close();
System.out.println("create pdf done!!");
}
3.前端使用angularjs 框架的时候,使用http方法,无法实现下载,直接访问地址可以下载,则后端已经实现功能,可以使用window.location.href 直接打开页面进行下载(暂时没有找到好方法)。
网友评论