前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java实现html转word_javaweb与html区别

java实现html转word_javaweb与html区别

作者头像
全栈程序员站长
发布2022-11-07 15:12:27
9850
发布2022-11-07 15:12:27
举报
文章被收录于专栏:全栈程序员必看

前段时间在做html生成word功能,找了好几种方案,有的用jacob,但是这个比较麻烦,又是dll又是jar的,依赖太多了,而且代码量比较多,所有以采用了freemarker来生成word,制作一个模板就可以生成word文档了,生成的图片也不会依赖本地路径。此功能需要freemarker的jar包,这个大家可以自行下载 制作模板,打开word,制作报告的样式,然后另存为xml格式,最好是2003格式的xml,不然会出现不兼容的现象。完成之后修改为ftl格式的文件。下面就开始我们的编码。 //转化word的一个工具类: package com.HtmlToword.util;

import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; import java.util.Map;

import sun.misc.BASE64Encoder;

import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException;

public class GenerateWord {

private Configuration configuration = null;

public GenerateWord() { configuration = new Configuration(); configuration.setDefaultEncoding(“utf-8”); configuration.setClassicCompatible(true); }

public void createDoc(String fileName, String outFileName, Map dataMap) { configuration.setClassForTemplateLoading(this.getClass(),”/com/ffds/util/template”); Template t = null; try { t = configuration.getTemplate(“template.ftl”); } catch (IOException e) { e.printStackTrace(); } File outFile = new File(outFileName); Writer out = null; FileOutputStream fos = null; try { fos = new FileOutputStream(outFile); OutputStreamWriter oWriter = new OutputStreamWriter(fos, “utf-8”); out = new BufferedWriter(oWriter); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } try { t.process(dataMap, out); out.flush(); out.close(); } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

public byte[] getBytesFromFile(File f) { if (f == null) { return null; } try { FileInputStream stream = new FileInputStream(f); ByteArrayOutputStream out = new ByteArrayOutputStream(1000); byte[] b = new byte[1000]; int n; while ((n = stream.read(b)) != -1) out.write(b, 0, n); stream.close(); out.close(); return out.toByteArray(); } catch (IOException e) { e.printStackTrace(); } return null; } //红色部分是处理图片的代码,不然图片不会正常显示 public String getImageStr(String imgFile) { InputStream in = null; byte[] data = null; try { in = new FileInputStream(imgFile); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(data); } } 接着就是向模板添加数据了,freemarker获取的是一个HashMap的数据,通过键-值来获取数据的。 代码如下: HashMap<String,Object> dataMap = new HashMap<String,Object>(); dataMap.put(“name”,”owen”); dataMap.put(“age”,”35″); var fileName = “分析报告”; String docFile=this.getHttpRequest().getRealPath(“/”)+”yourFolder\\”+fileName+”.doc”; //调用生成word函数 new GenerateWord().createDoc(“”,docFile,dataMap);

这样就可以生成很复杂的word报表了。

我的xml文件在附件

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183267.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档