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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ERROR running qmake

    ERROR running qmake1>ReadingQtconfiguration(D:/SoftWare/QT5.9.3/5.9.3/msvc2017_64/bin/qmake)1>GHViewerDetect.vcxproj:error:ERRORrunningqmake1>GHViewerDetect.vcxproj:error:qmake:(D:/SoftWare/QT5.9.3/5.9.3/msvc2017_64/bin/qmake)1>GHViewerDetect.vcx

    2022年5月19日
    99
  • 视觉SLAM技术_解读团体技术

    视觉SLAM技术_解读团体技术近年来,SLAM技术取得了惊人的发展,领先一步的激光SLAM已成熟的应用于各大场景中,视觉SLAM虽在落地应用上不及激光SLAM,但也是目前研究的一大热点,今天我们就来详细聊聊视觉SLAM的那些事儿。视觉SLAM是什么?视觉SLAM主要是基于相机来完成环境的感知工作,相对而言,相机成本较低,容易放到商品硬件上,且图像信息丰富,因此视觉SLAM也备受关注。目前,视觉SLAM可…

    2022年9月27日
    0
  • angular面试问题_react基础面试题

    angular面试问题_react基础面试题Angularv8+面试系列Angular面试题汇总1-基本知识Angular面试题汇总2-Component/Service目录Angular中的测试有哪些种,基于哪些测试框架什么是Karma?在Angular中有什么作用?什么是Jasmine?在Angular中有什么用?什么是protractor?单元测试UnitTest什么是Angular中的单元测试?AngularUT的最佳实践测试Service时,有其他依赖如何处理?端到端测试(e2e)Angular中的测试有哪些.

    2022年8月31日
    0
  • 张小龙-年薪近3亿的微信之父,他是如何做到的?

    张小龙-年薪近3亿的微信之父,他是如何做到的?张小龙生于湖南邵东魏家桥镇,家庭主要特点:穷。不仅自己穷,亲戚也都很穷,可以说穷以类聚。爷爷做过铜匠,总的来说,标准的劳动阶级出身。家有兄弟两人,一个小龙,一个小虎。小虎好动,与邻里打成一片,小龙好静,喜好读书。“文静的像个妹子。”张小龙的表哥如是说。穷文富武,做个读书郎是个不错的选择。87年至94年,华中科技大学本硕连读。本科就读电信系,不喜欢上课…

    2022年6月7日
    43
  • 从源码的角度分析mybatis的核心流程(中)

    从源码的角度分析mybatis的核心流程(中)

    2021年8月3日
    63
  • 闭关看书

    闭关看书

    2021年8月6日
    54

发表回复

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

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