我遇到了这样一个棘手问题,请求各位帮助。
需求:生成有固定格式的word文档(文字报告类型),然后再将该word文档实现在线预览。
我想到的解决办法是先利用freemarker模板生成word(网上盛行),然后再用jodconverter将word转为pdf,然后再用swftools转换pdf为swf,用flexpaper实现在线预览。然后问题出现了,用freemarker生成的word本质是wordml类型的,无法转化为pdf,大家有没有什么好的建议,请不吝赐教。
用Apache POI library不行吗?
将word文档转成html,直接显示
富文本?
用iText或者PD4ML直接转换为pdf
[code="java"]
String outputFile = "D:/Test/demo_3.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/fonts/simsun.ttc", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
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("").
append("
[code="java"]
PD4ML pd4ml = new PD4ML();
pd4ml.setHtmlWidth(1024);
pd4ml.setPageSize(PD4Constants.A4);
pd4ml.setPageInsetsMM(new Insets(20, 10, 10, 10));
pd4ml.addStyle("BODY {margin: 0; font-family:MSJH}", true);
pd4ml.useTTF("java:fonts", true);
pd4ml.setDefaultTTFs("KaiTi_GB2312", "KaiTi_GB2312", "KaiTi_GB2312");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
pd4ml.render(new StringReader(inputHTML), baos);
baos.close();
File output = new File(outputPDFFile);
FileOutputStream fos = new FileOutputStream(output);
fos.write(baos.toByteArray());
fos.close();
[/code]
楼主用插件试试吧,PageOffice插件可以很简单方便的实现生成word文档,很容易实现在线预览office文件的,也可以实现将word转换成pdf和html,并且可以在线预览
word文档生成html模板(freemarker)再转为pdf:https://download.csdn.net/download/gongjin28_csdn/85118467