精华内容
下载资源
问答
  • // 创建一个Word文档的输出流 writer = new BufferedWriter( new OutputStreamWriter(new FileOutputStream(new File(fileName)), Constants.UTF_8)); // FreeMarker使用Word模板和数据生成Word文档 template....

    1.pom依赖

    <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.9</version>
            </dependency>
            <dependency>
                <groupId>org.docx4j</groupId>
                <artifactId>docx4j-JAXB-Internal</artifactId>
                <version>8.2.2</version>
            </dependency>
    

    2.图片、附件等文件base64编码

    	/**
         * Gets base 64 string.
         *
         * @param imageFile 图片文件的全路径名称
         * @return Base64编码的图片内容字符串 base 64 string
         * @Description 将图片内容转换成Base64编码的字符串
         */
        public static String getBase64String(String imageFile) {
            String imageBase64 = Constants.NOTHING_STRING;
            if (StringUtils.isEmpty(imageFile)) {
                return imageBase64;
            }
    
            return getBase64StringByFile(new File(imageFile));
        }
    
        /**
         * @Description 获取文件的base64编码
         *
         * @Param file 图片文件
         * @return Base64编码的图片内容字符串
         **/
        private static String getBase64StringByFile(File file) {
            String imageBase64 = Constants.NOTHING_STRING;
            byte[] data;
            try (InputStream inputStream = new FileInputStream(file.getCanonicalFile())) {
                data = new byte[inputStream.available()];
                if(inputStream.read(data) != -1) {
                    imageBase64 = Base64.getEncoder().encodeToString(data);
                }
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
            return imageBase64;
        }
    

    3.不同格式附件处理(标签、展示、base64编码的组合)

    	/**
         * Generate attach xml string.
         *
         * @param dataMap the data map
         * @param relsKey the rels key
         * @param base64Key the base 64 key
         * @param filePath the file path
         * @return 封装以后的附件编码 string
         * @Description 封装附件的xml信息
         */
        public static String generateAttachXml(
                Map<String, String> dataMap, String relsKey, String base64Key, String filePath) {
            File file = new File(filePath);
            if (!file.exists()) {
                return Constants.NOTHING_STR;
            }
            String base64String;
            String attachString;
            String relsString;
            String indexFlag = relsKey;
            String suffix = file.getName().substring(file.getName().lastIndexOf("."));
            // 特殊字符进行转义处理
            String attachFileName = WordUtil.replaceToXmlFlag(file.getName());
    
            if (suffix.equals(“xlsx”)) {
                relsString = String.format(Locale.ROOT, FreeMarkerConstants.PKG_XLSX_RELS_FORMAT, indexFlag, indexFlag);
                base64String =
                        String.format(
                                Locale.ROOT,
                                FreeMarkerConstants.PKG_XLSX_CONTENT_FORMAT,
                                indexFlag,
                                getBase64StringByFile(file));
                attachString =
                        String.format(
                                Locale.ROOT,
                                FreeMarkerConstants.ATTACH_EXCEL_XLSX_FORMAT,
                                indexFlag,
                                indexFlag,
                                indexFlag,
                                attachFileName);
    
            } else if (suffix.equals(“xls”)) {
                relsString = String.format(Locale.ROOT, FreeMarkerConstants.PKG_XLS_RELS_FORMAT, indexFlag, indexFlag);
                base64String =
                        String.format(
                                Locale.ROOT,
                                FreeMarkerConstants.PKG_XLS_CONTENT_FORMAT,
                                indexFlag,
                                getBase64StringByFile(file));
                attachString =
                        String.format(
                                Locale.ROOT,
                                FreeMarkerConstants.ATTACH_EXCEL_XLS_FORMAT,
                                indexFlag,
                                indexFlag,
                                indexFlag,
                                attachFileName);
            } else if (suffix.equals("xlsm)) {
                relsString = String.format(Locale.ROOT, FreeMarkerConstants.PKG_XLSM_RELS_FORMAT, indexFlag, indexFlag);
                base64String =
                        String.format(
                                Locale.ROOT,
                                FreeMarkerConstants.PKG_XLSM_CONTENT_FORMAT,
                                indexFlag,
                                getBase64StringByFile(file));
                attachString =
                        String.format(
                                Locale.ROOT,
                                FreeMarkerConstants.ATTACH_EXCEL_XLSM_FORMAT,
                                indexFlag,
                                indexFlag,
                                indexFlag,
                                attachFileName);
            } else {
                return Constants.NOTHING_STR;
            }
    
            dataMap.put(relsKey, relsString);
            dataMap.put(base64Key, base64String);
            return attachString;
        }
    

    4. word文件生成

    	/**
         * Generate word.
         *
         * @param dataMap 数据集合
         * @param templatePath 模板路径
         * @param templateName 模板名称
         * @param fileName 报告文件
         * @Description 使用FreeMarker自动生成Word文档
         */
        public void generateWord(Map<String, String> dataMap, String templatePath, String templateName, String fileName) {
            // 设置FreeMarker的版本和编码格式
            Configuration configuration = new Configuration();
            configuration.setDefaultEncoding(Constants.UTF_8);
            Writer writer = null;
            try {
                // 设置FreeMarker生成Word文档所需要的模板的路径
                configuration.setDirectoryForTemplateLoading(new File(templatePath));
                // 设置FreeMarker生成Word文档所需要的模板
                Template template = configuration.getTemplate(templateName, Constants.UTF_8);
                // 创建一个Word文档的输出流
                writer =
                        new BufferedWriter(
                                new OutputStreamWriter(new FileOutputStream(new File(fileName)), Constants.UTF_8));
                // FreeMarker使用Word模板和数据生成Word文档
                template.process(dataMap, writer);
            } catch (IOException | TemplateException e) {
                logger.error(e.getMessage(), e);
            } finally {
                CloseStreamUtil.closeWriter(writer);
            }
        }
    

    5. doc转换docx的方法

    	/**
         *
         * @Description doc文件转换为docx文件
         *
         * @param outputPath 输出路径
         * @param xmlFilePath xml文件路径
         * @return boolean
         */
        private static boolean xmlPackage(String outputPath, File xmlFilePath) {
            boolean flag = true;
            File outFile = new File(outputPath);
            try {
                PresentationMLPackage.load(xmlFilePath).save(outFile, Docx4J.FLAG_SAVE_ZIP_FILE);
                if(!xmlFilePath.delete()){
                    logger.error("delete failed {}",outFile.getParentFile().getAbsolutePath());
                }
            } catch (Docx4JException e) {
                logger.error(e.getMessage(), e);
                flag = false;
            }
            return flag;
        }
    
    展开全文
  • 创建带有格式的word文档,将该需要动态展示的数据使用变量符替换。如下: 2.将上述1所创建的文档另存为.xml格式。3.编辑上述2的.xml文件去掉多余的xml标记,如下图(红圈是正确的格式,应该由${变量符}包裹着) 4.将...

    首先在pom文件中加入下面这个依赖(不是Maven项目的话,把jar包导入项目即可)

    org.freemarker

    freemarker

    2.3.23

    1.创建带有格式的word文档,将该需要动态展示的数据使用变量符替换。如下:

    ecf9276973d79288d1de560141fc95b1.png

    2.将上述1所创建的文档另存为.xml格式。

    3.编辑上述2的.xml文件去掉多余的xml标记,如下图(红圈是正确的格式,应该由${变量符}包裹着)

    25d5a1f08c2f3cbda4b0edc0004ff56e.png

    4.将上述3的文档另存为.ftl格式,然后复制到Web项目(下图目录)。

    cdc66d98a81fdbbfbb9b2152ab4a3872.png

    5.JSP页面提供生成word文档的按钮。

    导出Word

    JS代码:

    //生成word文档

    function exportWord(rightId){

    layer.confirm('确认要生成word文档吗?',function(index){

    //关闭窗口

    layer.close(index);

    window.location.href ="/biz/SysRight_exportWord.action?rightId="+rightId+""

    });

    }

    效果如下:

    b1b1fd6160a8d63ef1ca7c1c63494ea5.png

    6.Action中的exportWord()方法。

    /**

    * 生成word文档(测试使用)

    * @Description: TODO

    * @param @return

    * @param @throws Exception

    * @return String

    * @throws

    * @author uug

    * @date 2018年12月9日

    */

    public String exportWord() throws Exception {

    //需要显示的数据

    sysRight = sysRightService.exportWord(sysRight.getRightId());

    HttpServletResponse response = ServletActionContext.getResponse();

    HttpServletRequest request = ServletActionContext.getRequest();

    //创建Map

    Map map = new HashMap();

    //将数据put到Map中,第一个参数为.ftl文件中对应的${}名称,第二个参数为需要显示的内容

    map.put("rightId",sysRight.getRightId());

    map.put("rightName",sysRight.getRightName());

    map.put("resourcePath",sysRight.getResourcePath());

    map.put("rightPid",sysRight.getRightPid());

    //需要调用的模板名称

    String downloadType = "test";

    //导出时的名称

    String fileName = "权限列表";

    WordUtils.exportMillCertificateWord(request,response,map,downloadType , fileName);

    return null;

    }

    6.WordUtils工具类。

    @SuppressWarnings("deprecation")

    public class WordUtils {

    //配置信息

    private static Configuration configuration = null;

    //这里注意的是利用WordUtils的类加载器动态获得模板文件的位置

    private static final String templateFolder = WordUtils.class.getClassLoader().getResource("../../").getPath() + "WEB-INF/asserts/templete/";

    //用于存放所有的.ftl文件

    private static Map allTemplates = null;

    static {

    configuration = new Configuration();

    configuration.setDefaultEncoding("utf-8");

    allTemplates = new HashMap();

    try {

    configuration.setDirectoryForTemplateLoading(new File(templateFolder));

    //将test.ftl文件存入Map

    allTemplates.put("test", configuration.getTemplate("test.ftl"));

    } catch (IOException e) {

    e.printStackTrace();

    throw new RuntimeException(e);

    }

    }

    private WordUtils() {

    throw new AssertionError();

    }

    /**

    *

    * @Description: TODO

    * @param @param request

    * @param @param response

    * @param @param map 写入文件的数据

    * @param @param downloadType 需要调用Map allTemplates对应的那个.ftl文件

    * @param @param fileName0 设置浏览器以下载的方式处理该文件名

    * @param @throws IOException

    * @return void

    * @throws

    * @author uug

    * @date 2018年12月9日

    */

    public static void exportMillCertificateWord(HttpServletRequest request, HttpServletResponse response, Map map, String downloadType, String fileName0) throws IOException {

    //定义Template对象,注意模板类型名字与downloadType要一致

    Template template= allTemplates.get(downloadType);

    File file = null;

    InputStream fin = null;

    ServletOutputStream out = null;

    try {

    // 调用工具类的createDoc方法生成Word文档

    file = createDoc(map,template);

    fin = new FileInputStream(file);

    response.setCharacterEncoding("utf-8");

    response.setContentType("application/msword");

    // 设置浏览器以下载的方式处理该文件名

    String fileName = fileName0 + ".doc";

    response.setHeader("Content-Disposition", "attachment;filename="

    .concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));

    out = response.getOutputStream();

    byte[] buffer = new byte[512]; // 缓冲区

    int bytesToRead = -1;

    // 通过循环将读入的Word文件的内容输出到浏览器中

    while((bytesToRead = fin.read(buffer)) != -1) {

    out.write(buffer, 0, bytesToRead);

    }

    } finally {

    if(fin != null) fin.close();

    if(out != null) out.close();

    if(file != null) file.delete(); // 删除临时文件

    }

    }

    /**

    * 创建doc文档

    * @Description: TODO

    * @param @param dataMap

    * @param @param template

    * @param @return

    * @return File

    * @throws

    * @author uug

    * @date 2018年12月9日

    */

    private static File createDoc(Map, ?> dataMap, Template template) {

    String name = "temp" + (int) (Math.random() * 100000) + ".doc";

    File f = new File(name);

    Template t = template;

    try {

    // 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开

    Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");

    t.process(dataMap, w);

    w.close();

    } catch (Exception ex) {

    ex.printStackTrace();

    throw new RuntimeException(ex);

    }

    return f;

    }

    }

    7.效果如下:

    063ef398f3b414f6d515f37e3a6294f4.png

    展开全文
  • 做项目的过程中,经常需要把数据里里的数据读出来,经过加工,以word格式输出。 在网上找了很多解决方案都不太理想,偶尔发现了PageOffice,一个国产的Office插件,开发调用非常简单!比网上介绍的poi,jacob等解决...

    做项目的过程中,经常需要把数据里里的数据读出来,经过加工,以word格式输出。 在网上找了很多解决方案都不太理想,偶尔发现了PageOffice,一个国产的Office插件,开发调用非常简单!比网上介绍的poi,jacob等解决方按容易上手多了!功能接口虽然没有poi,jacob那么多,但是满足了一般的需求的百分之八九十,而且不像poi那样还需要区分处理07格式和03格式那么麻烦。

    下面是百度百科PageOffice的介绍:

    https://baike.baidu.com/item/PageOffice/2737741?fr=aladdin

    PageOffice的基本功能包括:

    在web网页里打开、编辑、打印预览、打印Word、Excel、PowerPoint等Office文档。

    文档并发控制机制。

    提供Word修订痕迹、手写批注、圈阅划线、键盘批注、电子印章等OA公文模块的必备功能。

    根据数据库动态将数据,包括文本、图片、表格等填充、导出到Word、Excel模板中指定的位置处,并且可以动态指定内容的各种格式。

    提取Word、Excel文档中指定位置处的内容,包括文本、图片(Excel暂不支持)、表格等,保存到数据库。

    其他功能就不细说了......

    更多的接口说明参考PageOffice官网API:http://www.zhuozhengsoft.com/help/java3/index.html

    下载地址:http://www.zhuozhengsoft.com/dowm/

    下载PageOffice开发包之后,拷贝 Samples4 文件夹到 Tomcat 的 Webapps 目录下,访问:http://localhost:8080/Samples4/index.html 就会看到所有官方示例效果的列表,重点参考以下几个示例:

    一、11、给Word文档中的数据区域(DataRegion)赋值的简单示例

    一、17、给Word文档中Table赋值的简单示例

    一、18、使用数据标签(DataTag)给Word文件填充文本数据

    二、6、后台编程插入Word文件到数据区域

    二、7、后台编程插入图片到数据区域

    二、8、后台编程插入Excel文件到数据区域

    二、9、给Word文档添加水印

    二、10、使用数据标签(DataTag)给Word文件填充带格式的数据

    二、11、在Word中动态创建数据区域

    我们可以写一个简单的程序测试一下效果:

    67d0865f17d9be527254bf8a8ff6c5b4.gif

    PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);

    poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz");

    WordDocument worddoc = new WordDocument();

    //先在要插入word文件的位置手动插入书签,书签必须以“PO_”为前缀

    //给DataRegion赋值,值的形式为:"纯文本内容、[word]word文件路径[/word]、[image]图片路径[/image]"

    DataRegion data1 = worddoc.openDataRegion("PO_p1");

    data1.setValue("测试字符串");//纯文本内容

    DataRegion data2 = worddoc.openDataRegion("PO_p2");

    data2.setValue("[word]doc/2.doc[/word]");//插入word文件

    DataRegion data3 = worddoc.openDataRegion("PO_p3");

    data3.setValue("[image]doc/1.jpg[/image]");//插入图片

    //打开文件、填充数据

    poCtrl1.setWriter(worddoc);

    poCtrl1.webOpen("doc/template.doc", OpenModeType.docNormalEdit, "用户名");

    67d0865f17d9be527254bf8a8ff6c5b4.gif

    8e43be2cfbcc3323679150c9228c4d3b.png

    代码很简单。短短几句就完成插入文字,图片,子Word文件的功能!不过做项目的话,可以先定义好一个word模板,这样有利于排版,减少编写代码的工作量,也可以调用PageOffice提供的接口控制模板中数据区域的样式,但是编码工作量就增加了。其功能还远不止这些,根据具体需求具体处理吧。

    &lbrack;原创&rsqb;java读写word文档,完美解决方案

    做项目的过程中,经常需要把数据里里的数据读出来,经过加工,以word格式输出. 在网上找了很多解决方案都不太理想,偶尔发现了PageOffice,一个国产的Office插件,开发调用非常简单!比网上介 ...

    &lbrack;转载&rsqb;java获取word文档的条目化内容

    在开发Web办公系统或文档系统时,PageOffice组件是众所周知的在线处理微软word/ppt/excel文档的强大工具,它对WORD文档的各种处理在API层面进行了封装,屏蔽了Office VB ...

    &lbrack;转载&rsqb;Java生成Word文档

    在开发文档系统或办公系统的过程中,有时候我们需要导出word文档.在网上发现了一个用PageOffice生成word文件的功能,就将这块拿出来和大家分享. 生成word文件与我们编辑word文档本质上 ...

    使用Java生成word文档(附源码)

    当我们使用Java生成word文档时,通常首先会想到iText和POI,这是因为我们习惯了使用这两种方法操作Excel,自然而然的也想使用这种生成word文档.但是当我们需要动态生成word时,通常不 ...

    Java生成 Word文档的并打印解决方案

    户要求用程序生成标准的word文档,要能打印,而且不能变形,以前用过很多解决方案,都在客户严格要求下牺牲的无比惨烈. POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个 ...

    poi读写word模板 &sol; java生成word文档

    有一word文档表格 形如: 姓名 ${name} 电话 ${tel} 从数据库读取记录替换上述变量 import java.io.FileOutputStream; import java.util ...

    Java解析word文档

    背景 在互联网教育行业,做内容相关的项目经常碰到的一个问题就是如何解析word文档. 因为系统如果无法智能的解析word,那么就只能通过其他方式手动录入word内容,效率低下,而且人工成本和录入出错率 ...

    Java 处理word文档后在前端展示

    最新新开发的这个项目需要使用word文档并要求能在前端页面上带格式展示,由于项目不是内部使用,所以不考虑插件类的处理模式,都必须要本地处理完成,前端不需要做什么更新或者说安装就能直接访问,类似于百度文 ...

    整理关于Java进行word文档的数据动态数据填充

    首先我们看下,别人整理的关于Java生成doc 的 资料. java生成word的几种方案 1. Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用 ...

    随机推荐

    ps -C

    [root@Nginx_BackUP keepalived]# ps -C nginx PID TTY TIME CMD 3965 ? 00:00:00 nginx 3966 ? 00:00:00 n ...

    实验一补充内容 Java开发环境的熟悉-刘蔚然

    本次实验 PSP时间统计 步骤 耗时百分比 需求分析 5% 设计 10% 代码实现 67% 测试 15% 分析总结 3%

    Hungary(匈牙利算法)——二分图最大匹配

    在复习匈牙利算法的时候,发现这么一篇介绍匈牙利算法的文章,非常通俗易懂,所以就借鉴过来了. 复杂度:邻接矩阵:O(v^3)邻接表:O(V*E) 附上链接:趣写算法系列之--匈牙利算法 下面就附上代码吧 ...

    &lbrack;博弈&rsqb;ZOJ3591 Nim

    题意: 给了一串数,个数不超过$10^5$,这串数是通过题目给的一段代码来生成的 int g = S; ; i

    border-radius讲解1

    如今CSS3中的border-radius出现后,让我们没有那么多的烦恼了,首先制作圆角图片的时间是省了,而且其还有多个优点:其一减少网站的维护的工作量,少了对图片的更新制作,代码的替换等等;其二.提 ...

    TD缺陷通过excel导入QC11&period;0缺陷库

    在将TD升级到QC之前,参考了各种升级的方式,但是最终发现用excel导入缺陷到QC库是最简单方便的方法,实施步骤如下:1,首先登陆TD,将缺陷的所有信息显示在界面,然后使用缺陷工具将页面所有缺陷保存 ...

    核心动画 CAAnimation 进阶

    转载自:http://www.cofcool.net/development/2015/06/20/ios-study-note-nine-CoreAnimation/ Core Animation, ...

    ServletRegistrationBean的源码摘要

    感觉ServletRegistrationBean在Springboot中是一个可以看懂的类,好像作用就相当于@Controoller注解, package org.springframework.b ...

    【开源程序(C&plus;&plus;)】获取bing图片并自动设置为电脑桌面背景

    众所周知,bing搜索网站首页每日会更新一张图片,张张漂亮(额,也有一些不合我口味的),特别适合用来做电脑壁纸. 我们想要将bing网站背景图片设置为电脑桌面背景的通常做法是: 上网,搜索bing 找 ...

    &lbrack;转帖&rsqb;Linux内核为大规模支持100Gb&sol;s网卡准备好了吗?并没有

    Linux内核为大规模支持100Gb/s网卡准备好了吗?并没有 之前用 千兆的机器 下载速度 一般只能到 50MB 左右 没法更高 万兆的话 可能也就是 200MB左右的速度 很难更高 不知道后续的服 ...

    展开全文
  • 经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。用xml做导出方案。先创建一个word文档,按照需求在word中填好一个...

    大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。

    用xml做导出方案。

    先创建一个word文档,按照需求在word中填好一个模板,然后把对应的数据换成变量${},然后将文档保存为xml文档格式,使用文档编辑器打开这个xml格式的文档,去掉多余的xml符号,使用Freemarker读取这个文档然后替换掉变量,输出word文档即可

    需要freemarker jar包

    /**

    Project Name:exam-services

    File Name:DownloadService.java

    Package Name:com.wt.service.download

    Date:2016年9月28日下午4:44:37

    Copyright (c) 2016, chenzhou1025@126.com All Rights Reserved.

    */

    package com.wt.service.download;

    import java.io.BufferedInputStream;

    import java.io.BufferedOutputStream;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.OutputStream;

    import java.net.URLEncoder;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    import javax.servlet.http.HttpServletResponse;

    import net.paoding.rose.web.Invocation;

    import org.apache.log4j.Logger;

    import org.springframework.stereotype.Service;

    /**

    ClassName:DownloadService

    Function: 文件下载.

    Reason: ADD REASON.

    Date: 2016年9月28日 下午4:44:37

    @author wpengfei

    @version

    @since JDK 1.6

    @see

    */

    @Service

    public class DownloadService {

    private Logger logger = Logger.getLogger(this.getClass());

    /**

    * downLoad:(文件下载).

    *

    * @author wpengfei

    * @param inv

    * @param fileName

    * @param path

    * @throws IOException

    * @since JDK 1.6

    */

    public void downLoad(Invocation inv, String fileName, String path) throws IOException {

    File file = new File(path);// 构造要下载的文件

    if (file.exists()) {

    InputStream ins = null;

    BufferedInputStream bins = null;

    OutputStream outs = null;

    BufferedOutputStream bouts = null;

    try {

    ins = new FileInputStream(path);// 构造一个读取文件的IO流对象

    bins = new BufferedInputStream(ins);// 放到缓冲流里面

    outs = inv.getResponse().getOutputStream();// 获取文件输出IO流

    bouts = new BufferedOutputStream(outs);

    String path1 = inv.getRequest().getSession().

    getServletContext().getRealPath("/WEB-INF/downloads");

    logger.info(path1);

    inv.getResponse().setContentType("application/x-download");// 设置response内容的类型

    inv.getResponse().setHeader("Content-disposition",

    "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));// 设置头部信息

    // inv.getResponse().setContentLength((int)file.length());

    int bytesRead = 0;

    byte[] buffer = new byte[8192];

    // 开始向网络传输文件流

    while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {

    bouts.write(buffer, 0, bytesRead);

    }

    bouts.flush();// 这里一定要调用flush()方法

    } catch (Exception e) {

    e.printStackTrace();

    } finally {

    if (bouts != null) {

    bouts.close();

    }

    if (outs != null) {

    outs.close();

    }

    if (bins != null) {

    bins.close();

    }

    if (ins != null) {

    ins.close();

    }

    }

    } else {

    logger.info("导出的文件不存在");

    }

    }

    }

    package com.wt.common.util;

    import java.io.BufferedWriter;

    import java.io.File;

    import java.io.FileOutputStream;

    import java.io.OutputStreamWriter;

    import java.io.Writer;

    import java.util.Map;

    import freemarker.template.Configuration;

    import freemarker.template.Template;

    /**

    @Desc:word操作工具类

    @Author:

    @Date:2014-1-22下午05:03:19

    */

    public class WordUtil {

    @SuppressWarnings("rawtypes")

    public static String createWord2(Map dataMap, String templateName, String filePath, String fileName) {

    try {

    // 创建配置实例

    Configuration configuration = new Configuration();

    // 设置编码

    configuration.setDefaultEncoding("UTF-8");

    // ftl模板文件统一放至 com.lun.template 包下面

    configuration.setClassForTemplateLoading(WordUtil.class, "\\com\\wt\\common\\util\\");

    // 获取模板

    Template template = configuration.getTemplate(templateName);

    // 输出文件

    File outFile = new File(filePath + File.separator + fileName);

    // 如果输出目标文件夹不存在,则创建

    if (!outFile.getParentFile().exists()) {

    outFile.getParentFile().mkdirs();

    }

    // 将模板和数据模型合并生成文件

    Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));

    // 生成文件

    template.process(dataMap, out);

    // 关闭流

    out.flush();

    out.close();

    return filePath + File.separator + fileName;

    } catch (Exception e) {

    e.printStackTrace();

    }

    return null;

    }

    }

    package com.wt.controllers.test1;

    import java.io.IOException;

    import java.text.SimpleDateFormat;

    import java.util.ArrayList;

    import java.util.Date;

    import java.util.HashMap;

    import java.util.List;

    import java.util.Map;

    import java.util.Random;

    import net.paoding.rose.web.Invocation;

    import net.paoding.rose.web.annotation.Path;

    import net.paoding.rose.web.annotation.rest.Get;

    import org.apache.commons.lang.StringUtils;

    import org.springframework.beans.factory.annotation.Autowired;

    import com.wt.common.util.CommonsUtil;

    import com.wt.common.util.Constants;

    import com.wt.common.util.ResponseObject;

    import com.wt.common.util.WordUtil;

    import com.wt.service.download.DownloadService;

    /**

    @Desc:生成word

    @Author:

    @Date:2014-1-22下午04:52:03

    */

    @Path("/word")

    public class WordController {

    @Autowired

    private DownloadService downloadService;

    private String filePath; //文件路径

    // private String fileName; //文件名称

    private String fileOnlyName; //文件唯一名称

    /**

    * createWord2:(这里用一句话描述这个方法的作用).

    * localhost:8080/test1/word/createWord2

    *

    * @author wpengfei

    * @param inv

    * @return

    * @throws IOException

    * @since JDK 1.6

    */

    @Get("/createWord2")

    public String createWord2(Invocation inv) throws IOException {

    /** 用于组装word页面需要的数据 */

    Map dataMap = new HashMap();

    SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");

    dataMap.put("startTime", sdf.format(new Date()));

    dataMap.put("endTime", sdf.format(new Date()));

    dataMap.put("count", 1);

    dataMap.put("username", "Tom");

    dataMap.put("courseName", "物理");

    dataMap.put("className", "1班");

    dataMap.put("materialName", "体育学");

    dataMap.put("materialVer", 1.0);

    dataMap.put("teachAim", "诺克尔12421价是否可骄傲了空间阿凡达捡垃圾覅文件附件安防奇偶万佛诺克尔12421价是否可骄傲了空间阿凡达捡垃圾覅文件附件安防奇偶万佛诺克尔12421价是否可骄傲了空间阿凡达捡垃圾覅文件附件安防奇偶万佛诺克尔12421价是否可骄傲了空间阿凡达捡垃圾覅文件附件安防奇偶万佛诺克尔12421价是否可骄傲了空间阿凡达捡垃圾覅文件附件安防奇偶万佛");

    //文件导出的目标路径

    filePath=Constants.UPLOAD_BASE_FOLD;

    StringBuffer sb=new StringBuffer();

    sb.append(sdf.format(new Date()));

    sb.append("_");

    Random r=new Random();

    sb.append(r.nextInt(100));

    //文件唯一名称

    fileOnlyName = "testDoc11_"+sb+".doc";

    /** 生成word */

    String result = WordUtil.createWord2(dataMap, "testDoc11.ftl", filePath, fileOnlyName);

    if(StringUtils.isNotBlank(result)){

    downloadService.downLoad(inv, fileOnlyName, result);

    }

    return "@";

    }

    }

    展开全文
  • Java操作Word文档

    2021-10-21 20:18:52
    Java 生成 Word 的几种方案 参考 ​ 主要有这么一些工具可以使用 Jacob、Apache POI、Java...经测试这样方式生成的word文档完全符合 office 标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑
  • 在日常工作中,我们可能常常需要打印各种文件资料,比如word文档。对于编程员,应用程序中文档的打印是一项非常重要的功能,也一直是一个非常复杂的工作。特别是提到Web打印,这的确会很棘手。一般如果要想选择非...
  • 在word的另存为界面可以设置保存文件为utf-8编码,具体操作请参照以下步骤。1、在电脑上打开目标word...4、然后在出现窗口的编码页面中将编码方式设置为UTF-8格式,点击确定。5、完成以上设置后,即可将目标word文档...
  • 出现这种情况,说明该word文档使用了不同的编码方式或格式,而汉语的编码方式刚好和word相一致罢了。那么,该如何解决word文档打开出现乱码的问题呢?word文档打开出现乱码的解决办法:方法一:删除内容格式法乱码的...
  • 主要涉及的内容为 python-docx ,一款可以操作 Word 文档(仅支持 docx)的第三方库。 文章目录写在前面创建一个文档先实现第一步,写入一个标题添加文字段落列表的添加图片的添加表格添加相关样式设置页眉和页脚...
  • html怎么打开Word文档

    2021-06-20 00:49:39
    1回答2021-01-26浏览:10分类:办公入门回答:你说的是网页上在线编辑Word吧。知道的方案有几种。1)采用网页插件,比如PageOffice,webOffice,这种方案实际是调用本地Office进行编辑,确切的说是网页编辑而非在线...
  • 近日需要将人员的基本信息导出,存储为word文档,查阅了很多资料,最后选择了使用freemarker,网上一共有四种方式,效果都一样,选择它呢是因为使用简单,再次记录一下,一个简单的demo,仅供参考。1.引入依赖:org....
  • 本发明涉及文档转换和数据处理领域,更具体地说,涉及一种基于JAVA实现由Word文档向LaTeX文档转换的方法。背景技术:TeX提供了一套功能强大并且十分灵活的排版语言,它多达900条指令,并且TeX有宏功能,用户可以不断...
  • springboot生成word文档

    千次阅读 2021-01-12 22:03:28
    // 指定输出word文件的路径 // 调用工具类WordUtils的createDoc方法生成Word文档 InputStreamSource file = createDoc(dataMap, template); InputStream fin = file.getInputStream(); ServletOutputStream out; ...
  • java怎么由html生成word,保留html样式@RequestMapping("download")public void exportWord( HttpServletRequest request, HttpServletResponse response) throws Exception {User user = AppContext.getLoginUser...
  • java生成word文档,超简单,超实用!1、引入pom包2、制作word模板文件:3、上java代码4、运行代码OK! 到此大功告成! 最近在开发项目的时候,需要将数据生成word文档保存/下载,下面就来介绍下如何java生成word文档...
  • 前两天帮同学实现在线预览word文档中的内容,而且需要提供可以下载的链接!在网上找了好久,都没有什么可行的方法,只得用最笨的方法来实现了。希望得到各位大神的指教。下面我就具体谈谈自己的实现过程,总结一下...
  • 安装过office的服务器可以调用一个叫word.application的com,可以生成word文档,不过这种方式我不推荐,因为执行效率比较低(我测试了一下,在执行代码的时候,服务器会真的去打开一个word客户端)。理想的com应该...
  • 用户提问我要实现一个简历管理系统,把简历(word文档)上传到数据库里,然后还要下载下来...推荐答案将WORD文档放入ORACLE有两种方式,一是文件采用文件系统存储,数据库只存放文件的相对路径,二是存入BLOB类型字段...
  • @param condition* @return*/@PostMapping(value = "/exportInfoToWord")public void exportInfoToWord(@RequestBody HashMap condition, HttpServletResponse response) throws IOException {//创建Word文档...
  • 背景 项目开始时,数据库表设计是从概要设计到详细设计,再到数据库中的表结构,有一套完整的文档;...那么,怎么从现有的数据库表自动导出一个相对比较整齐的word文档呢? 从网上看了下,有人提供了方案\(☆o☆)
  • 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 含有word模板,后端填充数据后导出前言一、安装python的docxtpl模块二、使用步骤总结 前言 对实现的功能进行简单描述:实现为用户访问网页,在...
  • 如果直接用FILE后者OPEN等函数读取WORD的话往往是乱码,原来要使用COM 这是我简单的一个读取并存储到新的WORD上的文件一、先开启PHP.ini的COM,操作如下1.extension=php_com_dotnet.dll2.com.allow_dcom = true二、...
  • 精品文档精品文档PAGEPAGE6精品文档PAGE1、ajax是什么?ajax:asynchronousjavascriptandxml:异步的javascript和xml。ajax是一种用来改良用户体验的技术,其本质是利用浏览器内置的一种特殊的对象(XMLHttpRequest)异步...
  • Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob、Apache POI、Java2Word、iText等各种方式,其实在从Office 2003开始,就可以将Office文档转换成XML文件,这样只要将需要填入的...
  • 随着 SaaS 服务的流行,越来越多的人选择在各个平台线上编写文档,制作表格并进行分享。同时,随着 Markdown 语法的破圈,很多平台开始集成支持这种简洁的书写标记语言,这样可以保证平台上用户文档样式的统一性。...
  • 一、添加maven依赖,导入FreeMarker所需要的jar包1 2 org.freemarker3 freemarker4 2.3.205 二、定义word模板文件三、修改模板xml文件把刚刚制作的word文件另存为xml文件修改这个xml文件,开发工具我用的idea,我是...
  • 随着SaaS服务的流行,越来越多的人选择在各个平台上编写文档,制作表格并进行分享。同时,随着Markdown语法的破圈,很多平台开始集成支持这种简洁的书写标记语言,这样可以保证平台上用户文档样式的统一性。但是在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,784
精华内容 21,113
关键字:

word文档编码方式