java实现html转word_javaweb与html区别

java实现html转word_javaweb与html区别前段时间在做html生成word功能,找了好几种方案,有的用jacob,但是这个比较麻烦,又是dll又是jar的,依赖太多了,而且代码量比较多,所有以采用了freemarker来生成word,制作一个模板就可以生成word文档了,生成的图片也不会依赖本地路径。制作模板,打开word,制作报告的样式,然后另存为xml格式,最好是2003格式的xml,不然会出现不兼容的现象。完成之后修改为ftl格

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用
前段时间在做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.net/183267.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月11日 上午9:16
下一篇 2022年10月11日 上午9:16


相关推荐

  • awk 数组排序多种实现方法「建议收藏」

    awk 数组排序多种实现方法「建议收藏」由于awk数组,是关联数组。for…in循环输出时候,默认打印出来是无序数组。 [chengmo@localhost~]$awk’BEGIN{info=”thisisatest”;split(info,tA,””);for(kintA){printk,tA[k];}}’4test1this2is3a 如果需要按照顺序输出,通过

    2022年7月19日
    17
  • 多重比较法-LSD[通俗易懂]

    多重比较法-LSD[通俗易懂]总第174篇/张俊红前面我们讲了方差分析,方差分析主要是用于多组均值比较的,方差分析的结果是多组均值之间是否有显著性差异,但是这个显著性差异是整体的显著性差异,可是我们并…

    2022年4月28日
    70
  • 如何配置pytorch_pytorch如何下载

    如何配置pytorch_pytorch如何下载1.好像不支持python3.8。直接从setting里面安装时不行的,按其它教程(https://blog.csdn.net/lyz21/article/details/104295042)从官网https://pytorch.org/get-started/locally/,拷贝链接用pip下载,一直报找不到版本。后来发现,python3.8的原因,改成python3.7可以了,但会一直连接超时。2.发现要下载的其实是这两个文件:点开下面的两个链接,用下载软件下载了,我下到了e盘,直接pip

    2025年6月18日
    5
  • sql语句中union的用法

    sql语句中union的用法union 联合的结果集不会有重复值 如果要有重复值 则使用 unionallunio 会自动压缩多个结果集合中重复的结果 使结果不会有重复行 unionall 会将所有的结果共全部显示出来 不管是不是重复 union 会对两个结果集进行并集操作 不包括重复行 同时进行默认规则的排序 unionall 对两个结果集进行并集操作 包括重复行 不会对结果进行排序 1 sqlUnion 用法 select 字段 1from 表名 1Unionselect 字段 2from 表名 2

    2026年3月19日
    1
  • 最小均方误差MMSE算法_怎样让均方误差最小

    最小均方误差MMSE算法_怎样让均方误差最小 

    2026年4月17日
    2
  • HDU1285 确定比赛名次

    HDU1285 确定比赛名次

    2021年9月8日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号