精华内容
下载资源
问答
  • 要填入模板数据文件 11 Map dataMap= new HashMap(); 12 get(dataMap); 13 14 configuration.setServletContextForTemplateLoading(request.getServletContext(), "/WEB-INF/freemarker" ); 15 ...

    http://wenku.baidu.com/link?url=YxTZWVP3ssO-e_Br3LIZVq2xOQnqaSz8gLPiRUDN8NIR_wX2-Z25OqwbVn5kXqGiOFYUMBsaMlWcbHld565N5ENMBTrUOp_-rsrsjIMBlgi

     

     1 public class WordUtil {
     2     private Configuration configuration=null;
     3     
     4     public WordUtil () {
     5         configuration = new Configuration();
     6         configuration.setDefaultEncoding("utf-8");
     7     }
     8     
     9     public void createDoc(HttpServletRequest request) {
    10         //要填入模板的数据文件
    11         Map dataMap=new HashMap();
    12         get(dataMap);
    13         
    14         configuration.setServletContextForTemplateLoading(request.getServletContext(), "/WEB-INF/freemarker");
    15         try {
    16             Template t=configuration.getTemplate("paperTemplate.flt");
    17             t.setEncoding("UTF-8");
    18             //D:\workspace2\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Ztree\WEB-INF\freemarker\exam.doc
    19             String path=request.getSession().getServletContext().getRealPath("/WEB-INF/freemarker/exam.doc");
    20             Writer out=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), "UTF-8"));
    21             t.process(dataMap, out);
    22             out.close();
    23             
    24         } catch (TemplateNotFoundException e) {
    25             e.printStackTrace();
    26         } catch (MalformedTemplateNameException e) {
    27             e.printStackTrace();
    28         } catch (ParseException e) {
    29             e.printStackTrace();
    30         } catch (IOException e) {
    31             e.printStackTrace();
    32         } catch (TemplateException e) {
    33             // TODO 自动生成的 catch 块
    34             e.printStackTrace();
    35         }
    36     }
    37 
    38     //注意dataMap里存放的数据Key值要与模板中的参数相对应
    39     private void get(Map dataMap) {
    40         dataMap.put("title", "java笔试试卷");
    41         List<Map<String, Object>> namelist=new ArrayList<Map<String,Object>>();
    42         for (int i = 0; i < 5; i++) {
    43             Map<String, Object> map=new HashMap<String, Object>();
    44             map.put("xz1", i+1);
    45             map.put("xz2", "下面哪些是Thread类的方法()"+(i+1));
    46             map.put("ans1", "A start()");
    47             map.put("ans2", " B run()");
    48             map.put("ans3", "C exit()");
    49             map.put("ans4", "D getPriority()");
    50             namelist.add(map);
    51         }
    52         dataMap.put("namelist", namelist);
    53     }

     

     

    转载于:https://www.cnblogs.com/hym-pcitc/p/6429485.html

    展开全文
  • 首先,对xml文件进行分析,熟悉标签; 然后,切分文档为不同块。我们要对文档中书签进行替换,因此需要将文档切分为书签块和非书签块; 还有就是表格中行循环,比如当前取出数据是一个list,我们需要根据...

    1 背景

    dom4j,Jdom,w3c dom解析xml文档时速度比较慢,因此选择自己写代码解析xml文档。

    2 思路

    首先,对xml文件进行分析,熟悉标签;

    然后,切分文档为不同的块。我们要对文档中的书签进行替换,因此需要将文档切分为书签块和非书签块;

    还有就是表格中行的循环,比如当前取出的数据是一个list,我们需要根据list的大小来生成表格中的行数,并对此表格中的书签进行数据替换(如下图),此时,需要将文档进切分为“循环的行块”和非行块。

    除此之外,还有需删除的行块,表示该行需要删除,一般用循环的行在合并单元格之后的表格设计上。

    最后,对文档中切分好的块进行文档构建。

    3 编码

    3.1 块切分器

    (1)书签切分器BookmarkCutter

     

    (2)行切分器RowBookmarkCutter

     

    (3)不需处理的书签块(skipCutter)

     (4)删除切分器

    (5)整个表格循环切分器

     3.2 构件xml文档

    文档切分完成后,分别对不同的块中的进行写入,构件成一个完整的文档。

    其中最主要的写入是“书签块的写入”,由于书签块分为“头”“尾”“身体”,身体里包含“文字块”和“非文字”块,书签替换时只需将数据替换到第一个文字块中即可,之后的文字块忽略不计(因为替换的文字很难选择文字块中的某一块的样式,所以选择取第一个文字块的样式)

    附上代码下载代码

     

     

    展开全文
  • 处理思路: ... 在xml 文件中,使用freemark标签,替换一些自定义值 使用freemark 解析xml ,输出到.doc 文件  在处理时候要把文件后缀改成.ftl格式 获得自定义内容的word文件 案列资源:  ...

    处理思路:

    1. 将word模板以xml格式另存一份,得到xml格式模板
    2. 在xml 文件中,使用freemark标签,替换一些自定义值
    3. 使用freemark 解析xml ,输出到.doc 文件 
    4. 在处理的时候要把文件后缀改成.ftl格式
    5. 获得自定义内容的word文件

    案列资源: 

    https://download.csdn.net/download/csdn_heliu/10881778

    实际操作: 

    word模板:

     另存为xml文件,修改后缀名为.ftl格式(ftl文件是使用freemark标签处理过的,已经替换自定义内容,用idea或者eclipse处理太卡了,在外面用编辑器处理的)

    实际代码实现: 

     public static void main(String[] args) {
            //定义一个集合存放的是学生信息
            List<Student> studentList = new ArrayList<>();
            //学生A
            Student a = new Student();
            a.setName("学生A");
            a.setSex("男");
            a.setAge(18);
            a.setPhone("18856652121");
            a.setAddress("安徽省合肥市");
            studentList.add(a);
            //学生B
            Student b = new Student();
            b.setName("学生B");
            b.setSex("女");
            b.setAge(80);
            b.setPhone("18856654444");
            b.setAddress("美国加州");
            studentList.add(b);
            //学生C
            Student c = new Student();
            c.setName("学生C");
            c.setSex("女");
            c.setAge(19);
            c.setPhone("18856652121");
            c.setAddress("江苏浙江");
            studentList.add(c);
            //把学生信息放到map里
            Map<String, Object> params = new HashMap<>();
            params.put("studentList", studentList);
            //标题
            params.put("title", "高三(3)班");
    
            logger.info("params:{}", params);
    
            //生成自定义内容word
            String resultFilePath = String.format("D:/edu/test_%s.doc", "高三(3)班");
            FreeMakerParser.process("templates/test.ftl", resultFilePath, params);
        }

    解析xml输出到.doc文件中—生成word文档时使用的方法:

     /**
         * @Description 解析xml输出到.doc文件中—生成word文档时使用
         * @author HeLiu
         * @date 2018/12/27 17:07
         */
        public static String process(String templateFilePath, String resultFilePath, Map param) {
            CONFIGURER.setDefaultEncoding("UTF-8");// 设置默认编码方式
            try {
                InputStream is = FreeMakerParser.class.getClassLoader().getResourceAsStream(templateFilePath);
                if (null == is) {
                    logger.info(".............InputStream is null..........");
                }
                File targetFile = FileToolUtil.createNewFile(resultFilePath);
                Writer resultFileWriter = new OutputStreamWriter(new FileOutputStream(targetFile), "utf-8");
                Reader templateFileReader = new InputStreamReader(is, "utf-8");
                Template template = createTemplate(DEFAULT_TEMPLATE_EXPRESSION, templateFileReader);
                template.process(param, resultFileWriter);
                logger.info(".............freemark文件解析完成,生成word成功,文件路径:" + targetFile + "!..........");
                return resultFilePath;
            } catch (Exception e) {
                logger.error("freemark解析异常", e);
                return null;
            }
        }

    创建文件方法:

     /**
         * @Description 创建新文件,有目录则先生成目录
         * @author HeLiu
         * @date 2018/12/27 17:17
         */
        public static File createNewFile(String pathFileName) throws IOException {
            File outFile = new File(pathFileName);
            File parentFile = outFile.getParentFile();
            if (parentFile != null && !parentFile.exists()) {
                boolean ret = parentFile.mkdirs();//不存在则创建父目录
                logger.info("......创建 {},目录结果:{}", parentFile.getAbsolutePath(), ret);
            }
            if (!outFile.exists()) {
                outFile.createNewFile();
            }
            return outFile;
        }

     xml文件修改思路:

    这里用到了freemarker插值的方法—${title},

    freemarker循环list使用方法—<#list studentList as bean> 

                                                              ${bean.object}

                                                    </#list>

    具体freemarker标签使用方法可以自己详细查询一下

    重复的版块可以用循环生成,在处理的时候要把多余的标签内容删除掉

    下面是修改的地方部分代码:

    //修改标题
    <w:t>${title}</w:t>
    
    
    //修改表格生成内容
    <#list studentList as bean>
                            <w:tr w:rsidR="00E5798D" w:rsidTr="00E5798D">
                                <w:trPr>
                                    <w:trHeight w:val="652"/>
                                </w:trPr>
                                <w:tc>
                                    <w:tcPr>
                                        <w:tcW w:w="1746" w:type="dxa"/>
                                        <w:vAlign w:val="center"/>
                                    </w:tcPr>
                                    <w:p w:rsidR="00E5798D" w:rsidRPr="00E5798D" w:rsidRDefault="0045179D"
                                         w:rsidP="00E5798D">
                                        <w:pPr>
                                            <w:jc w:val="center"/>
                                            <w:rPr>
                                                <w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"
                                                          w:hAnsiTheme="minorEastAsia"/>
                                                <w:sz w:val="24"/>
                                            </w:rPr>
                                        </w:pPr>
                                        <w:r>
                                            <w:rPr>
                                                <w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"
                                                          w:hAnsiTheme="minorEastAsia" w:hint="eastAsia"/>
                                                <w:sz w:val="24"/>
                                            </w:rPr>
                                            <w:t>${bean.name}</w:t>
                                        </w:r>
                                    </w:p>
                                </w:tc>
                                <w:tc>
                                    <w:tcPr>
                                        <w:tcW w:w="1746" w:type="dxa"/>
                                        <w:vAlign w:val="center"/>
                                    </w:tcPr>
                                    <w:p w:rsidR="00E5798D" w:rsidRPr="00E5798D" w:rsidRDefault="0045179D"
                                         w:rsidP="00E5798D">
                                        <w:pPr>
                                            <w:jc w:val="center"/>
                                            <w:rPr>
                                                <w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"
                                                          w:hAnsiTheme="minorEastAsia"/>
                                                <w:sz w:val="24"/>
                                            </w:rPr>
                                        </w:pPr>
                                        <w:r>
                                            <w:rPr>
                                                <w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"
                                                          w:hAnsiTheme="minorEastAsia" w:hint="eastAsia"/>
                                                <w:sz w:val="24"/>
                                            </w:rPr>
                                            <w:t>${bean.sex}</w:t>
                                        </w:r>
                                    </w:p>
                                </w:tc>
                                <w:tc>
                                    <w:tcPr>
                                        <w:tcW w:w="1746" w:type="dxa"/>
                                        <w:vAlign w:val="center"/>
                                    </w:tcPr>
                                    <w:p w:rsidR="00E5798D" w:rsidRPr="00E5798D" w:rsidRDefault="0045179D"
                                         w:rsidP="00E5798D">
                                        <w:pPr>
                                            <w:jc w:val="center"/>
                                            <w:rPr>
                                                <w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"
                                                          w:hAnsiTheme="minorEastAsia"/>
                                                <w:sz w:val="24"/>
                                            </w:rPr>
                                        </w:pPr>
                                        <w:r>
                                            <w:rPr>
                                                <w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"
                                                          w:hAnsiTheme="minorEastAsia" w:hint="eastAsia"/>
                                                <w:sz w:val="24"/>
                                            </w:rPr>
                                            <w:t>${bean.age}</w:t>
                                        </w:r>
                                    </w:p>
                                </w:tc>
                                <w:tc>
                                    <w:tcPr>
                                        <w:tcW w:w="1747" w:type="dxa"/>
                                        <w:vAlign w:val="center"/>
                                    </w:tcPr>
                                    <w:p w:rsidR="00E5798D" w:rsidRPr="00E5798D" w:rsidRDefault="0045179D"
                                         w:rsidP="00E5798D">
                                        <w:pPr>
                                            <w:jc w:val="center"/>
                                            <w:rPr>
                                                <w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"
                                                          w:hAnsiTheme="minorEastAsia"/>
                                                <w:sz w:val="24"/>
                                            </w:rPr>
                                        </w:pPr>
                                        <w:r>
                                            <w:rPr>
                                                <w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"
                                                          w:hAnsiTheme="minorEastAsia" w:hint="eastAsia"/>
                                                <w:sz w:val="24"/>
                                            </w:rPr>
                                            <w:t>${bean.phone}</w:t>
                                        </w:r>
                                    </w:p>
                                </w:tc>
                                <w:tc>
                                    <w:tcPr>
                                        <w:tcW w:w="1747" w:type="dxa"/>
                                        <w:vAlign w:val="center"/>
                                    </w:tcPr>
                                    <w:p w:rsidR="00E5798D" w:rsidRPr="00E5798D" w:rsidRDefault="0045179D"
                                         w:rsidP="00E5798D">
                                        <w:pPr>
                                            <w:jc w:val="center"/>
                                            <w:rPr>
                                                <w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"
                                                          w:hAnsiTheme="minorEastAsia"/>
                                                <w:sz w:val="24"/>
                                            </w:rPr>
                                        </w:pPr>
                                        <w:r>
                                            <w:rPr>
                                                <w:rFonts w:asciiTheme="minorEastAsia" w:eastAsiaTheme="minorEastAsia"
                                                          w:hAnsiTheme="minorEastAsia" w:hint="eastAsia"/>
                                                <w:sz w:val="24"/>
                                            </w:rPr>
                                            <w:t>${bean.address}</w:t>
                                        </w:r>
                                    </w:p>
                                </w:tc>
                            </w:tr>
                        </#list>
    
    
    

    pom依赖:

    <dependency>
    			<groupId>org.freemarker</groupId>
    			<artifactId>freemarker</artifactId>
    			<version>2.3.28</version>
    		</dependency>
    
    		<dependency>
    			<groupId>commons-io</groupId>
    			<artifactId>commons-io</artifactId>
    			<version>2.5</version>
    		</dependency>

     

     运行结果:在定义的路径下有个新生成的word文件

    总结:利用freemarker标签修改xml文件的时候要细心,不能写错,不能删错标签,不然都会导致word文件生成失败。文件一定要修改为ftl格式。

     

     

    展开全文
  • 实现思路:一 、 将别人提供的word 模板,另存为xml 格式的文件 ,得到xml模板二、在xml 文件中,使用freemark标签,替换一些自定义值三、 使用freemark 解析xml ,输出到.doc 文件 小结: 这里word文档就生成了 ...

    实现思路:

    • 一 、 将别人提供的word 模板,另存为xml 格式的文件 ,得到xml模板
    • 二、在xml 文件中,使用freemark标签,替换一些自定义值
    • 三、 使用freemark 解析xml ,输出到.doc 文件 
    • 小结: 这里word文档就生成了 

    word 转pdf 

    注意:

    • 一 : 这里生成的word 文档,在使用openoffice 转换成pdf 时,pdf 中全是xml ,(但是原生的word 时正常的),所以openoffice 不适合,百度提到了asponse -word 可以 
    • 最后使用asponse -word 成功了 
    • 二:部署到linux 时,转换的内容时乱码,需要在linux 安装 windows 字体,

    参考 :https://blog.csdn.net/liuao107329/article/details/80285628

    展开全文
  • 生成word模板:首先用word编辑好文档,然后另存为时候,改一下保存类型,改为xml文件,这个xml文件就是ftl模版了,给这个xml文件重命名为ftl文件,模版就制作完成了,需要更改只是模版中变量而已~ ...
  • Word-docx文件图片信息格式分析

    千次阅读 2017-08-22 16:20:38
    本文为笔记、仅作参考。 前文为: 用FreeMarker生成Word文档。现在新需求来了,导出的Word文档中、需要包含图片。大致处理流程为: 解析导出信息、将 ...将 [img[xxxIdInt]] 格式字符串、使用XML标签替换回去。
  • 后台主要工作是解析XML定义的标签文件,并获取到数据集,放入到Map中,然后调用Jacob.jar中提供相关方法来实现替换。首先想多说一句就是jacob会每次生成word报告时都会启动一个office word进程,替换完毕之后 需要...
  • 后台主要工作是解析XML定义的标签文件,并获取到数据集,放入到Map中,然后调用Jacob.jar中提供相关方法来实现替换。首先想多说一句就是 jacob会每次生成word报告时都会启动一个office word进程,替换完毕之后 ...
  • 二进制XML存储方案

    2008-09-25 09:48:50
    · 存储数据中可能包括一个或者多个的文件附件,如:word文档; · 存储数据可能被不同平台使用,如:windows或者linux; · 作为web项目一部分,除了提供VC接口之外,存储数据格式需要提供java接口...
  • 15.4.1 实现带模式验证的XML读取 431 15.4.2 将XML类型强制转换为与.NET兼容的类型 434 15.5 使用XPathDocument读取XML 435 15.6 ASP.NET 2.0中的XML 436 15.6.1 XmlDataSource服务器控制件 436 15.6.2 ...
  • 也就是说,不要在word里首先打完 ${ } 之后,又从其它地方把 string 字符串粘贴至 { } 之间,这样在 word 转化为 xml时,解析会有问题,freemarker解析时,会报错。 /** * @Desc:生成word文件 * @Author:张轮...
  • freemarker生成复杂word

    热门讨论 2012-04-24 18:32:55
    Word从2003开始支持XML格式,用XML+Freemarder还做就很简单了,大致的思路是先用office2003或者2007编辑好 word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。...
  • 上个博客生成了一个静态柱状图 也就是将柱状图图片放到word里,这个博客说说 ftl文件里给他设置数据动态 1创建.docx文档模板: 类似于这样模板 2.生成xml在线解析格式然后转ftl: 类似于这样 它...
  • 用XPath解析XML - 78 - Web Service client - 79 - Functional programming with Java功能扩展? - 79 - Option, Some<T> and None<T> - 80 - Tuple, B> - 80 - Pattern Matching模式匹配 - 81 - Promises - 81 - ...
  • 极端来说,一个纯静态html文件,就是一堆xml标签,之所以当我们用浏览器打开页面能看到各种按钮,图表,那是因为浏览器是一个专门解析并可视化xml标准标签的工具软件而已,就像word能打开doc文件。同样xml在内存中也...
  • 介绍了应用ASP.NET进行程序开发各个方面知识和技巧,主要包括网站开发常备技术、前端技术应用开发、操作Office软件(Word/Excel)、ADO.NET数据库操作技术、LINQ技术、XML文件、水晶报表、Web Service服务、网站...
  • 介绍了应用ASP.NET进行程序开发各个方面知识和技巧,主要包括网站开发常备技术、前端技术应用开发、操作Office软件(Word/Excel)、ADO.NET数据库操作技术、LINQ技术、XML文件、水晶报表、Web Service服务、网站...
  • Python Cookbook

    2013-07-31 22:33:26
    12.7 解析Microsoft Excel的XML 452 12.8 验证XML文档 454 12.9 过滤属于指定命名空间的元素和属性 455 12.10 用SAX合并连续的文本事件 458 12.11 使用MSHTML来解析XML或HTML 461 第13章 网络编程 462 引言 ...
  • Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    2个目标文件,FTP目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致变化,(4)为了可靠和高效地传输,虽然用户...
  • 处理文件文件系统库 金融:会计和财务软件包 游戏开发:游戏开发相关库 地理位置:地理相关位置信息和工具库 编译器相关:转到其他语言 Goroutines:用于管理和使用Goroutines工具 图形界面:用于构建GUI应用程序...
  • python-docx:读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。 python-pptx:可用于创建和修改 ppt 文件的 Python 库。 relatorio:模板化 OpenDocument 文件。 unoconv:在 LibreOffice/OpenOffice ...
  • java开源包1

    千次下载 热门讨论 2013-06-28 09:14:34
    JCaptcha4Struts2 是一个 Struts2插件,用来增加验证码支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大 JCaptcha来生成验证码...
  • java开源包12

    热门讨论 2013-06-28 10:14:45
    JCaptcha4Struts2 是一个 Struts2插件,用来增加验证码支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大 JCaptcha来生成验证码...
  • Java资源包01

    2016-08-31 09:16:25
    JCaptcha4Struts2 是一个 Struts2插件,用来增加验证码支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大 JCaptcha来生成验证码...
  • java开源包101

    2016-07-13 10:11:08
    JCaptcha4Struts2 是一个 Struts2插件,用来增加验证码支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大 JCaptcha来生成验证码...
  • java开源包11

    热门讨论 2013-06-28 10:10:38
    JCaptcha4Struts2 是一个 Struts2插件,用来增加验证码支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大 JCaptcha来生成验证码...
  • java开源包2

    热门讨论 2013-06-28 09:17:39
    JCaptcha4Struts2 是一个 Struts2插件,用来增加验证码支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大 JCaptcha来生成验证码...

空空如也

空空如也

1 2 3 4
收藏数 68
精华内容 27
关键字:

word的xml文件标签解析