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


相关推荐

  • 两位数乘法的速算方法(二)

    两位数乘法的速算方法(二)两位数乘法的速算方法(二)一、被乘数首尾相同1. 乘数首尾互补公式推导:(10a+a)(10b+10-b)=100ab+10(ax(10-b)+ab)+a(10-b)=100ab+100a+ab=100a(b+1)+ab 速算方法:1.乘数首位加1,得出的和与被乘数首位相乘,得数作为前积;2.尾数相乘,得数作为后积,没有十位用0补; 应用举例:66×3

    2022年5月2日
    73
  • javaweb项目集成editor.md编辑器—markdown编辑器

    javaweb项目集成editor.md编辑器—markdown编辑器最近写一个博客系统,需要集成编辑器,所以我就打算集成一个markdown编辑器用来编辑文章。在网上搜,好像editor.md这个国产开源的markdown编辑器比较好。不过想吐槽是网上的教程真的。。。哈哈哈,开始我们的教程:1.首先在editor.md官网(http://pandao.github.io/editor.md/)下载这一个编辑器。这是下载好后的文件目录2.将目录下的css目

    2022年9月17日
    0
  • js字符串操作方法(js对象转字符串)

    一、关于字符串分割1、slice(start,end);关于这个方法,一定要搞懂四个关键点:(1)截取字符串时不包括下标为end的元素。(2)end是可选参数,没有时,默认从start到结束的所有字符串。(3)String.slice与Array.slice区别。(4)参数为负数时,是如何处理的。其中第3点其实就是在JavaScript中字符串和数组都具有这个方法,它们…

    2022年4月18日
    49
  • Web Service进阶(一)运行原理[通俗易懂]

    Web Service进阶(一)运行原理[通俗易懂]利用清明小假期,温习了一遍WebService的相关内容,对其工作原理进行了简要总结。以供有需求的朋友和自己日后参考。文章若有不当之处,敬请朋友们提出宝贵建议,以求共勉。Web服务中,我们应该首先了解相关的术语含义:WSDL、UDDI….相关术语方面的介绍在此不再赘述,重点放在原理上。在Web服务中,存在三个角色:服务提供者、服务请求者和服务中介,三者之间的关系如图1…

    2022年7月24日
    11
  • 干货!java文件上传判重姿势浅谈

    干货!java文件上传判重姿势浅谈一、场景:文件上传,用户极有可能上传重复文件,内容完全一致。如果对上传的文件未做任何处理,对于文件存储系统来说将是灾难,大量重复的数据,如果允许上传大文件,那么对于存储资源将是巨大的浪费。对于重复的文件,只需要复制相应的访问地址即可,源文件可无需上传,既减轻了网络带宽压力,也减少了存储容量的压力。二、应对:1、通过文件名判重。非特殊情况下,不会采用这种方案,理由跟人同名一样,文件名很容易重复,随着用户上升,概率会变大。采用此方案极易导致不能达到判重的目的。2、读取文件头加部分内容。这种方案可以解

    2022年5月15日
    28
  • Redis为什么这么快?Redis是单线程还是多线程?

    Redis为什么这么快?Redis是单线程还是多线程?

    2021年4月10日
    154

发表回复

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

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