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


相关推荐

  • linux 查询环境变量_ubuntu查看环境变量

    linux 查询环境变量_ubuntu查看环境变量有时候在编写makefile的时候,自己都不清楚有些变量是什么,也不清楚如何查看,于是感觉有必要在这里写一篇环境变量查看的博文。如果你想查看某一个名称的环境变量,命令是:echo$环境变量名,比如:echo$ORACLE_HOME这是最基础的,下面来讲下稍微深入一点的,并举例说明1.显示环境变量HOME$echo$HOME/home/ljj2.设置一个新的变量$exportHELLO=”…

    2022年9月1日
    5
  • navicate15 激活码_在线激活

    (navicate15 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html0VOERWDQ5R-eyJsaWN…

    2022年3月31日
    134
  • JAVA实现贪吃蛇游戏

    JAVA实现贪吃蛇游戏最近在学GUI,然后又有读者希望我写一下相关的实战。刚好我又在B站上找到了一个关于GUI的学习视频,然后里面又刚好有这个实战,我便写了下来。注:代码来源为B站的一个up主:狂神。游戏主启动类:importjavax.swing.*;//游戏主启动类publicclassstartGame{publicstaticvoidmain(String[]args){JFrameframe=newJFrame();frame..

    2022年6月22日
    26
  • mysql 通配符 替换,使用通配符替换的MySQL[通俗易懂]

    mysql 通配符 替换,使用通配符替换的MySQL[通俗易懂]I’mtryingtowriteaSQLupdatetoreplaceaspecificxmlnodewithanewstring:UPDATEtableSETConfiguration=REPLACE(Configuration,”%%ANY_VALUE%%””NEW_DATA”);SothatSDADASbecomesNEW_DATAIsthere…

    2022年7月16日
    15
  • PMP第五章:项目范围管理

    PMP第五章:项目范围管理项目范围管理的目的:做且只做所需的全部工作,以成功完成项目。✓产品范围——某项产品、服务或成果所具有的特性和功能✓项目范围——为交付具有规定特性与功能的产品、服务或成果而必须完成的工作产品范围决定项目范围,项目范围有时也包括产品范围,需要根据上下文来理解。项目范围管理的过程规划范围管理→收集需求→定义范围→创建工作分解结构(创建WBS)→控制范围→确认范围1、规划范围管理:制定项目范围管理计划2、收集需求:收集、记录干系人需求,收集干系人想要什么?…

    2022年9月22日
    3
  • onedrive无限容量_onedrive家庭版扩容5t

    onedrive无限容量_onedrive家庭版扩容5t由于百度网盘的限速,不得已开始捣鼓微软的OneDrive网盘。相对于百度网盘,Onedrive最大的优势是不限速,速度也是难得的友好。相对于百度网盘,Onedrive最大的劣势是空间大小,个人用户注册仅有5G。曾经无数次因为这么小的空间而望而却步,只能硬着头皮给百度交钱。最近无意间发现了Onedrive的空间可以很大,最大的竟然达到了5T。原来Onedrive的5T版本已经流行…

    2025年10月14日
    5

发表回复

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

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