精华内容
下载资源
问答
  • word模板文件temp.docx

    2021-04-29 16:23:24
    aspose.word for java 模板文件
  • PowerDesigner导出Word模板文件
  • 该文件为所需要生成word文件的一个word格式的模板文件,为加盟商承诺书模板,有新加盟商来加盟的时候,系统导出一个承诺书文件给对方,每个承诺书里面的加盟商...使用者可以参考该模板建立自己所需要的word模板文件
  • 一个使用Apache的poi使用word模板循环输出表格行并导出的例子
  • /// <summary>... /// 按照word模板文件 生成新word文件 /// </summary> /// <param name="tempFile">模板文件路径</param> /// <param name="saveFile">生...
           	/// <summary>
            /// 按照word模板文件 生成新word文件
            /// </summary>
            /// <param name="tempFile">模板文件路径</param>
            /// <param name="saveFile">生成文件路径</param>
            /// <param name="billRegister">议案登记</param>        
            public void CreateFileByTemplate(string tempFile,string saveFile, L1BillRegister billRegister)
            {
                using (FileStream stream = File.OpenRead(tempFile))
                {
                    XWPFDocument doc = new XWPFDocument(stream);
    
                    //遍历段落                  
                    foreach (var para in doc.Paragraphs)
                    {
                        ReplaceKey(para, billRegister);
                    }
    
                    //遍历表格      
                    foreach (var table in doc.Tables)
                    {
                        foreach (var row in table.Rows)
                        {
                            foreach (var cell in row.GetTableCells())
                            {
                                foreach (var para in cell.Paragraphs)
                                {
                                    ReplaceKey(para, billRegister);
                                }
                            }
                        }
                    }
                    FileStream out1 = new FileStream(saveFile, FileMode.Create);
                    doc.Write(out1);
                    out1.Close();
                }
            }
    		
    	/// <summary>
            /// 对模板中的值进行替换
            /// </summary>
            /// <param name="para">word文档对象</param>
            /// <param name="billRegister">议案登记对象</param>       
            private static void ReplaceKey(XWPFParagraph para, L1BillRegister billRegister)
            {
                string text = "";
                foreach (var run in para.Runs)
                {
                    text = run.ToString();             
                    if (text.Contains("a"))
                    {
                        run.SetText(billRegister.BillName, 0);
                    } 
                    else
                    {
                        run.SetText(text, 0);
                    }                
                }
            }
    		
    		
    	//调用
    	string tempFile = System.Web.HttpContext.Current.Server.MapPath("~/weboffice/tempfiles/meetSolutions.docx");
            string saveFile = System.Web.HttpContext.Current.Server.MapPath("~/weboffice/tempfiles/test/" + billRegister.BillId + ".doc");
    	this.CreateFileByTemplate(tempFile,saveFile, billRegister);
    

      

    转载于:https://www.cnblogs.com/YYkun/p/10242624.html

    展开全文
  • 利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码。解决模板读取异常问题,提供wordUtils工具类(各种功能实现) 第一步: 项目结构见下图: 第二...

    利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码。解决模板读取异常问题,提供wordUtils工具类(各种功能实现)
    第一步:
    项目结构见下图:
    项目结构图
    第二步:
    前端界面见下
    前端界面

    swagger界面

    第三步:
    模板样式
    模板格式

    第四步:
    输出结果
    输出结果

    核心代码如下:

    package com.word.poi.demo.controller;
    
    import com.word.poi.demo.service.WordService;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.MediaType;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletResponse;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    @RestController
    @RequestMapping("/word")
    @CrossOrigin(origins = "*", maxAge = 3600)
    @Api(tags = "word文档处理")
    public class WordController {
        @Autowired
        private WordService wordService;
    
        @RequestMapping(value = "/exportWord",method = RequestMethod.GET)
        @ApiOperation(value = "生成并导出word文档", httpMethod = "GET", notes = "生成并导出word文档", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
        public void exportFDDBrief(
                HttpServletResponse response
                ) throws Exception {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HHmmss");
            //获取统计时间段
            String time = "10.09-10.19";
            String wordName = "Word版-("+time+")"+sdf.format(new Date());
            // 告诉浏览器用什么软件可以打开此文件
            response.reset();// 清空输出流
            response.setHeader("content-Type", "application/msword");
            // 下载文件的默认名称
            response.setHeader("Content-Disposition", "attachment;filename="
                    +new String(wordName.getBytes("GB2312"), "8859_1") + ".docx");
            OutputStream out = response.getOutputStream();
            //读取word模板
            InputStream in = this.getClass().getResourceAsStream("/templates/wordTemplate.docx");
            wordService.exportWord(in,out,"全球");
    
        }
    
    }
    
    
    package com.word.poi.demo.util;
    
    import org.apache.commons.collections4.CollectionUtils;
    import org.apache.commons.lang3.StringUtils;
    import org.apache.poi.xwpf.usermodel.*;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * 通过word模板生成新的word工具类
     * 
     */
    public class WorderToNewWordUtils {
    
        /**
         * 根据模板生成新word文档
         * 判断表格是需要替换还是需要插入,判断逻辑有${}为替换,表格无${}为插入
         * @param textMap 需要替换的信息集合
         * @return 成功返回true,失败返回false
         */
        public static XWPFDocument changWordForcommon(InputStream in,Map<String, String> textMap) {
            XWPFDocument document = null;
            try {
                //第一步:获取docx解析对象
                document = new XWPFDocument(in);
                //第二步:重构XWPFDocument中 不合格的 占位符 比如:${abcd}分开为${a,b..,cd}
                refactorXWPFDocument(document);
                //第三步:解析替换文本段落对象
                changeText(document, textMap);
                //第四步:解析替换表格对象
               changeTableCity(document, textMap);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return document;
    
        }
        /**
         * 根据模板生成新word文档
         * 判断表格是需要替换还是需要插入,判断逻辑有${}为替换,表格无${}为插入
         * @param textMap 需要替换的信息集合
         * @param extendTableMap 需要插入的表格信息集合
         * @param colorMapForCell
         * @return 成功返回true,失败返回false
         */
        public static XWPFDocument changWordForComplex(
                InputStream in,
                Map<String, String> textMap, 
                Map<String, List<List<String>>> extendTableMap,
                Map<String, List<String>> colorMapForCell) {
            XWPFDocument document = null;
            try {
                //第一步:获取docx解析对象
                document = new XWPFDocument(in);
                //第二步:重构XWPFDocument中 不合格的 占位符 比如:${abcd}分开为${a,b..,cd}
                refactorXWPFDocument(document);
                //第三步:解析替换文本段落对象
               changeText(document, textMap);
                //第四步:解析替换表格对象
               changeTableProvince(document, textMap, extendTableMap);
                //第五步:根据逻辑设置表格cell的背景颜色
                setColorForCell(document,colorMapForCell);
    
            } catch (IOException e) {
                e.printStackTrace();
            }
            return document;
    
        }
        private static void setColorForCell(XWPFDocument document, Map<String, List<String>> colorMapForCell) {
            List<XWPFTable> tables = document.getTables();
            for (int i = 0; i <tables.size() ; i++) {
                List<String> placeList = colorMapForCell.get("table" + i);//获取表格坐标list
                if (CollectionUtils.isNotEmpty(placeList)){
                    for (String palce:placeList) {
                        String[] split = palce.split(",");
                        int x = Integer.parseInt(split[0]);
                        int y = Integer.parseInt(split[1]);
                        tables.get(i).getRow(x).getCell(y).setColor("FF0000");
                    }
                }
            }
        }
    
        /**
         * 替换段落文本
         * @param document docx解析对象
         * @param textMap 需要替换的信息集合
         */
        public static void changeText(XWPFDocument document, Map<String, String> textMap){
            //获取段落集合
            List<XWPFParagraph> paragraphs = document.getParagraphs();
    
            for (XWPFParagraph paragraph : paragraphs) {
                //判断此段落时候需要进行替换
                String text = paragraph.getText();
                //重构段落  不合格的 占位符 比如:${abcd}分开为${a,b..,cd}
               // refactorParagraph(paragraph);
                if(checkText(text)){
                    List<XWPFRun> runs = paragraph.getRuns();
                    for (XWPFRun run : runs) {
                        //替换模板原来位置
                        run.setText(changeValue(run.toString(), textMap),0);
                    }
                }
            }
    
        }
    
        /**
         * 替换表格对象方法
         * @param document docx解析对象
         * @param textMap 需要替换的信息集合
         */
        public static void changeTableCity(XWPFDocument document, Map<String, String> textMap
               ){
            //获取表格对象集合
            List<XWPFTable> tables = document.getTables();
            for (int i = 0; i < tables.size(); i++) {
                //只处理行数大于等于2的表格,且不循环表头
                XWPFTable table = tables.get(i);
                if(table.getRows().size()>1){
                    //判断表格是需要替换还是需要插入,判断逻辑有$为替换,表格无$为插入
                    if(checkText(table.getText())){
                        List<XWPFTableRow> rows = table.getRows();
                        //遍历表格,并替换模板
                        eachTable(rows, textMap);
                    }
                }
            }
        }
        /**
         * 替换表格对象方法
         * @param document docx解析对象
         * @param textMap 需要替换的信息集合
         * @param extendTableMap 需要插入的表格信息集合
         */
        public static void changeTableProvince(XWPFDocument document, Map<String, String> textMap,
                                               Map<String, List<List<String>>> extendTableMap){
            //获取表格对象集合
            List<XWPFTable> tables = document.getTables();
            int tableNo = 0;
            for (int i = 0; i < tables.size(); i++) {
                //只处理行数大于等于2的表格,且不循环表头
                XWPFTable table = tables.get(i);
                if(table.getRows().size()>1){
                    //判断表格是需要替换还是需要插入,判断逻辑有$为替换,表格无$为插入
                    if(checkText(table.getText())){
                        List<XWPFTableRow> rows = table.getRows();
                        //遍历表格,并替换模板
                        eachTable(rows, textMap);
                        tableNo++;
                    }else{
                        List<List<String>> tableList = extendTableMap.get("table" + tableNo);
                        insertTable(table, tableList);
                        tableNo++;
                    }
                }
            }
        }
    
    
    
    
    
        /**
         * 遍历表格
         * @param rows 表格行对象
         * @param textMap 需要替换的信息集合
         */
        public static void eachTable(List<XWPFTableRow> rows ,Map<String, String> textMap){
            for (XWPFTableRow row : rows) {
                List<XWPFTableCell> cells = row.getTableCells();
                for (XWPFTableCell cell : cells) {
                    //判断单元格是否需要替换
                    if(checkText(cell.getText())){
                        List<XWPFParagraph> paragraphs = cell.getParagraphs();
                        for (XWPFParagraph paragraph : paragraphs) {
                            List<XWPFRun> runs = paragraph.getRuns();
                            for (XWPFRun run : runs) {
                                run.setText(changeValue(run.toString(), textMap),0);
                            }
                        }
                    }
                }
            }
        }
    
        /**
         * 为表格插入数据,行数不够添加新行
         * @param table 需要插入数据的表格
         * @param tableList 插入数据集合
         */
        public static void insertTable(XWPFTable table, List<List<String>> tableList){
            //创建行,根据需要插入的数据添加新行,不处理表头
            for(int i = 1; i < tableList.size(); i++){
                //XWPFTableRow row =table.createRow();
            }
            //遍历表格插入数据
            List<XWPFTableRow> rows = table.getRows();
            for(int i = 1; i < rows.size(); i++){
                XWPFTableRow newRow = table.getRow(i);
                List<XWPFTableCell> cells = newRow.getTableCells();
                for(int j = 0; j < cells.size(); j++){
                    XWPFTableCell cell = cells.get(j);
                   // cell.setText(tableList.get(i-1).get(j));
                    XWPFParagraph xwpfParagraph = cell.getParagraphs().get(0);//获取cell中的第一个段落第一个ruan并设置字体样式和内容
                    XWPFRun run = xwpfParagraph.createRun();
                    run.setFontSize(9);
                    run.setFontFamily("宋体");
                    run.setText(tableList.get(i-1).get(j));
                }
            }
        }
    
    
    
        /**
         * 判断文本中时候包含{{
         * @param text 文本
         * @return 包含返回true,不包含返回false
         */
        public static boolean checkText(String text){
            boolean check  =  false;
            if(null != text && text.indexOf("$")!= -1){
                check = true;
            }
            return check;
    
        }
    
        /**
         * 匹配传入信息集合与模板
         * @param value 模板需要替换的区域
         * @param textMap 传入信息集合
         * @return 模板需要替换区域信息集合对应值
         */
        public static String changeValue(String value, Map<String, String> textMap){
            Set<Entry<String, String>> textSets = textMap.entrySet();
            for (Entry<String, String> textSet : textSets) {
                //匹配模板与替换值 格式{{key}}
                String key = "${"+textSet.getKey()+"}";
    
                if(null != value && value.indexOf(key)!= -1){
                    String s = textSet.getValue();
                    value = s;
                }
            }
            //模板未匹配到区域替换为空
            if(checkText(value)){
                value = "NULL";
            }
            return value;
        }
    
        public static void refactorXWPFDocument(XWPFDocument doc) {
            try {
                buildParagraph(doc);
                buildTable(doc);
                /*List<XWPFParagraph> paragraphs = doc.getParagraphs();
                for (XWPFParagraph paragraph : paragraphs){
                    List<XWPFRun> runs = paragraph.getRuns();
                    for (XWPFRun run : runs){
                        System.out.println(run.toString());
                    }
                }*/
            } catch (Exception e) {
                e.printStackTrace();
            }
            //return doc;
        }
    
        public static void refactorParagraph(XWPFParagraph paragraph) {
            int start = -1;
            int end = -1;
            List<XWPFRun> runs = paragraph.getRuns();
            for (int i = 0; i < runs.size() ; i++) {
                String runText = runs.get(i).toString();
                if ('$' == runText.charAt(0)&&'}' == runText.charAt(runText.length() - 1)){
                    continue;
                }
                if ('$' == runText.charAt(0)){
                    start = i;
                }
                if ('}' == runText.charAt(runText.length() - 1)){
                    end = i;
                    break;
                }
            }
            if (start != -1){
                mergeRun(paragraph,start,end);
                refactorParagraph(paragraph);
            }
        }
    
      /*  public static void main(String[] args) {
            String runText ="";
            char c = runText.charAt(0);
            System.out.println(c);
    
        }*/
        public static void mergeRun(XWPFParagraph paragraph, int start, int end) {
            int removeCount = end-start;//删除次数
            int removeIndex = start+1;//删除开始位置
    
            List<XWPFRun> runs = paragraph.getRuns();
            for (int i = 0; i <runs.size() ; i++) {
                System.out.println(runs.get(i).toString());
            }
            StringBuilder sb = new StringBuilder();
            sb.append(runs.get(start).toString());
    
            for (int i = 0; i < removeCount; i++){
                sb.append(runs.get(removeIndex).toString());
                paragraph.removeRun(removeIndex);
            }
            runs.get(start).setText(sb.toString(),0);
        }
    
        public static Matcher matcher(String str) {
            Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(str);
            return matcher;
        }
    
    
        public static void buildParagraph(XWPFDocument document){
            for (XWPFParagraph paragraph : document.getParagraphs()) {
                if (matcher(paragraph.getText()).find()) {
                    removeEmptyRun(paragraph);
                    refactorParagraph(paragraph);
                }
            }
        }
        public static void buildTable(XWPFDocument document){
            List<XWPFTable> tables = document.getTables();
            for (XWPFTable xwpfTable : tables) {
                List<XWPFTableRow> rows = xwpfTable.getRows();
                for (XWPFTableRow row :rows){
                    List<XWPFTableCell> tableCells = row.getTableCells();
                    for (XWPFTableCell tableCell : tableCells){
                        List<XWPFParagraph> paragraphs = tableCell.getParagraphs();
                        for (XWPFParagraph paragraph : paragraphs){
                            if (matcher(paragraph.getText()).find()) {
                                removeEmptyRun(paragraph);
                                refactorParagraph(paragraph);
                            }
                        }
                    }
                }
    
            }
        }
        private static void removeEmptyRun(XWPFParagraph paragraph) {
            List<XWPFRun> runsq = paragraph.getRuns();
            for (int i = 0; i <runsq.size() ; i++) {
                String runText = runsq.get(i).toString();
                if (StringUtils.isEmpty(runText)){
                    paragraph.removeRun(i);
                    break;
                }
            }
            for (int i = 0; i <runsq.size() ; i++) {
                String runText = runsq.get(i).toString();
                if (StringUtils.isEmpty(runText)){
                    removeEmptyRun(paragraph);
                    break;
                }
            }
        }
    
    }
    
    
    

    具体源码详见:https://download.csdn.net/download/qq_36244155/10805107
    源码下载后,用idea打开,maven加载依赖即可运行。
    也可以打包成demo-0.0.1-SNAPSHOT.jar后,
    用命令 java -jar demo-0.0.1-SNAPSHOT.jar 运行。
    访问地址:http://localhost:8080/#
    swagger访问地址:http://localhost:8080/swagger-ui.html

    展开全文
  • 删除Word模板文件

    2020-01-12 15:49:01
    (1)选择【文件】-【选项】命令,打开“Word选项”对话框,选择“高级”选项卡,在右侧单击“文件位置”按钮。 (2)打开“文件位置”对话框,选择“用户模板”选项,然后单击“修改”按钮。 (3)打开“修改位置...

    (1)选择【文件】-【选项】命令,打开“Word选项”对话框,选择“高级”选项卡,在右侧单击“文件位置”按钮。
    在这里插入图片描述
    (2)打开“文件位置”对话框,选择“用户模板”选项,然后单击“修改”按钮。
    在这里插入图片描述
    (3)打开“修改位置”对话框,在地址栏中单击鼠标,然后按【Ctrl+A】键全选地址栏中的路径文本,再按【Ctrl+C】键复制这些路径。
    在这里插入图片描述
    (4)打开“计算机”窗口,在地址栏中粘贴刚才复制的路径,按“Enter”键,即可快速进入Word模板存放的位置。找到并选择“Normal.dotm”文件,按【Delete】键删除该文件即可。
    在这里插入图片描述
    本方法解决了每次新建一个word文件都默认缩进0.85cm问题,删除了模板即可。

    展开全文
  • 详细描述java读word模板并生成word文件,包括jar包、dll文件(32、64位)、doc说明文件、example样例文件
  • springboot实现根据指定pdf、word模板文件填充值到文件里面,生成对应的文件
  • Word模板-红头文件模板.wpt
  • JAVA使用POI-TL通过Word模板生成Word文件

    万次阅读 热门讨论 2018-08-15 16:04:24
    技术背景 很多时候我们网站或者系统需要提供一些word文件,例如证明.docx或者订单....这里主要讲解如何通过一个制作好的word模板文件,通过数据填充,生成加工好的word文件。 官方网站 http://deepoove.com/...

    技术背景

    很多时候我们网站或者系统需要提供一些word文件,例如证明.docx或者订单.docx等文件供用户下载打印等。

    用Java操作word文档,毫无疑问,当下最流行apache poi,对于poi如何操作word文档,这里不作过多介绍。

    这里主要讲解如何通过一个制作好的word模板文件,通过数据填充,生成加工好的word文件。

    官方网站

    http://deepoove.com/poi-tl

    Maven

    <dependency>
        <groupId>com.deepoove</groupId>
        <artifactId>poi-tl</artifactId>
        <version>1.3.1</version>
    </dependency>
    

    实战内容


    以下源码已经上传再我的开源项目里面的spring-cloud-study-poi
    https://github.com/moshowgame/spring-cloud-study

    说先是新建模板word文档(。docx格式,2007/2013/2016新格式的)
    这里写图片描述
    运行效果

    这里写图片描述

    核心实现代码

    
    @RestController
    public class PoiController {
    
    	@GetMapping("/generateWord")
    	public ApiReturnObject  generateWord(String data){
    			//图片路径,请注意你是linux还是windows
    			String wordPath="C:\\Users\\Administrator\\Desktop\\";
    			String modelName="人物模板.docx";
    			String outputName="hanyunxi.docx";
    			Map<String, Object> datas = new HashMap<String, Object>() {
    				{
    					//本地图片
    					put("name","鞠婧祎");
    					put("team","前SNH48");
    					put("gender","女");
    					put("birthday","19940618");
    					put("remark","鞠婧祎,1994年6月18日出生于四川遂宁,毕业于四川音乐学院附属中学,中国女演员、歌手,原SNH48 TEAM NII成员[1]。2013年9月5日,升格为SNH48 TEAM NII二期生正式成员;11月2日,以《剧场女神》公演正式出道。2014年6月7日,拍摄个人首支MV《足球派对》;7月26日,参加SNH48“一心向前”演唱会暨SNH48第一届总选举,演唱《流着泪微笑》并获SNH48总选举第四名。2015年1月15日,发行出道两周年EP《青春的约定》。2016年12月10日,获“星光大赏”年度新锐电视剧女演员。2017年1月1日,参加安徽卫视《国剧盛典》;3月27日,获第24届东方风云榜音乐盛典“年度飞跃歌手”奖[2];5月4日,获团中央“五四优秀青年”称号;5月25日,发行第二张个人EP《等不到你》;[3]7月29日,参加“我心翱翔”第四届总选举发布演唱会,获得SNH48第四届总选举第1名;[4]12月15日,SNH48官方宣布,鞠婧祎正式从SNH48 Group单飞、成立个人工作室。2018年3月26日,获第25届《东方风云榜》音乐盛典年度跨界艺人奖。7月28日,参加湖南卫视综艺节目《快乐大本营》。");
    					put("active",new NumbericRenderData(new ArrayList<TextRenderData>(){{
    						add(new TextRenderData("FF00FF", "2013年 以《剧场女神》公演正式出道"));
    						add(new TextRenderData("FF00FF", "2014年 拍摄个人首支MV《足球派对》"));
    						add(new TextRenderData("FF00FF", "2015年 发行出道两周年EP《青春的约定》"));
    						add(new TextRenderData("FF00FF", "2016年 主演玄幻剧《九州天空城》"));
    					}}));
    					put("tables", new TableRenderData(new ArrayList<RenderData>(){{
    						add(new TextRenderData("d0d0d0", "节目"));
    						add(new TextRenderData("d0d0d0", "次数"));
    					}},new ArrayList<Object>(){{
    						add("《SNH星剧院公演》;999");
    						add("《敢ZUO敢为女声秀》;4");
    						add("《快乐大本营》;2");
    					}}, "no datas", 10600));
    //				//网路图片
    				put("picture", new PictureRenderData(200, 250, ".png", BytePictureUtils.getUrlByteArray("https://pic.baike.soso.com/ugc/baikepic2/18293/cut-20170602162513-2088410512.jpg/300")));
    
    				}
    			};
    
    			XWPFTemplate template = XWPFTemplate.compile(wordPath+modelName)
    					.render(datas);
    			FileOutputStream out;
    			try {
    				out = new FileOutputStream(wordPath+outputName);
    				template.write(out);
    				out.flush();
    				out.close();
    				template.close();
    			} catch (FileNotFoundException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    
    
    		return ApiReturnUtil.success(data);
    	}
    
    }
    

    支持的模板标签

    • 文本模板{{var}}
    put("author", new TextRenderData("000000", "Sayi卅一"));
    put("introduce", "http://www.deepoove.com");
    
    • 图片模板{{@var}}
    // 本地图片
    put("localPicture", new PictureRenderData(120, 120, "./sayi.png"));
    
    // 本地图片byte数据
    byte[] localByteArray = BytePictureUtils.getLocalByteArray(new File("./logo.png"));
    put("localBytePicture", new PictureRenderData(100, 120, ".png", localByteArray));
    
    // 网络图片
    put("urlPicture", new PictureRenderData(100, 100, ".png", BytePictureUtils.getUrlByteArray("https://avatars3.githubusercontent.com/u/1394854")));
    
    // java 图片
    put("bufferImagePicture", new PictureRenderData(100, 120, ".png", BytePictureUtils.getBufferByteArray(bufferImage)));
    
    • 表格模板{{#var}}
    put("changeLog", new TableRenderData(new ArrayList<RenderData>(){{
    				add(new TextRenderData("d0d0d0", ""));
    				add(new TextRenderData("d0d0d0", "introduce"));
    			}},new ArrayList<Object>(){{
    				add("1;add new # gramer");
    				add("2;support insert table");
    				add("3;support more style");
    			}}, "no datas", 10600));
    
    • 列表模板{{*var}}
    put("feature", new NumbericRenderData(new ArrayList<TextRenderData>() {
      {
        add(new TextRenderData("Plug-in grammar"));
        add(new TextRenderData("Supports word text, header..."));
        add(new TextRenderData("Not just templates, but also style templates"));
      }
    }));
    
    • 文档模板{{+var}}
    List<SegmentData> segments = new ArrayList<SegmentData>();
    SegmentData s1 = new SegmentData();
    s1.setTitle("经常抱怨的自己");
    s1.setContent("每个人生活得都不容易,经常向别人抱怨的人,说白了就是把对方当做“垃圾场”,你一股脑地将自己的埋怨与不满倒给别人,自己倒是爽了,你有考虑过对方的感受吗?对方的脸上可能一笑了之,但是心里可能有一万只草泥马奔腾而过。");
    segments.add(s1);
    
    SegmentData s2 = new SegmentData();
    s2.setTitle("拖拖拉拉的自己");
    s2.setContent("能够今天做完的事情,不要拖到明天,你的事情没有任何人有义务去帮你做;不要做“宅男”、不要当“宅女”,放假的日子约上三五好友出去转转;经常动手做家务,既能分担伴侣的负担,又有一个干净舒适的环境何乐而不为呢?");
    segments.add(s2);
    
    put("docx_word", new DocxRenderData(new File("~/segment.docx"), segments));
    

    可能的报错

    如果出现这个错误,要判断文件后缀名是doc,还是docx。
    对POI来说,如果是doc,使用HSSFWorkbook;如果是docx,使用XSSFWorkbook。
    而POI-TL封装的是docx的版本,现在是主流格式,所以推荐用这个,当然,输出文件随意,你输出文件名弄成doc也ok(格式)

    org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException: The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with OOXML (Office Open XML) Documents. You need to call a different part of POI to process this data (eg HSSF instead of XSSF)
    	at org.apache.poi.openxml4j.opc.internal.ZipHelper.verifyZipHeader(ZipHelper.java:184)
    	at org.apache.poi.openxml4j.opc.internal.ZipHelper.openZipStream(ZipHelper.java:241)
    	at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:98)
    	at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324)
    	at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37)
    	at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:116)
    	at com.deepoove.poi.NiceXWPFDocument.<init>(NiceXWPFDocument.java:85)
    	at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:129)
    	at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:110)
    	at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:78)
    	at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:74)
    	at com.softdev.system.demo.controller.PoiController.generateWord(PoiController.java:51)
    
    展开全文
  • 根据word模板生成新的word文件
  • C#中由word模板 替换标签后,同时生成 word文档,并且生成 pdf文件
  • Jsp结合Velocity实现依据Word模板文件生成对应数据文件,操作非常灵活,方便。
  • asp.net 利用word模板导出word文件

    热门讨论 2011-04-25 20:15:12
    asp.net 利用word模板导出word文件 实例
  • 83个word模板文件,写文档不用愁,超级好用
  • 在项目需求中,需要对于一个word模板文档生成相对应的word文件,而此word模板是多页的并且需要在最终文件中生成相应的目录,由于项目环境是Linux,所以舍弃了jacob(windows环境)。然后主要是研究了Apache poi 进行...
  • 包含aspose-word.jar+license.xml+测试代码+测试模板。根据word模板使用自定义的命令,生成数据文件。将模板demo.docx放到c盘下,执行Main方法会在c盘下生成数据文件demo_text.docx。适合生成各类报表文件
  • Java操作word模板文件

    万次阅读 热门讨论 2011-07-01 11:14:00
    关于导出word文档,之前想过ireport但模板文件比较复杂不容易画。所以采取了Java操作word文件,替换word中的元素方法模板文件如下单位名称:$ACCTNAME$ NO: $SN$ 导出后效果:单位名称:XXXX科技股份有限司 NO: ...
  • /// /// 按照word模板文件 生成新word文件/// /// 模板文件路径/// 生成文件路径/// 议案登记public void CreateFileByTemplate(string tempFile,string saveFile, L1BillRegister billRegister){using (FileStream ...
  • Spring下载word模板文件

    千次阅读 2017-07-03 22:42:31
    1.使用Poi-tl,添加依赖<dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.0.0</version> </dependency>poi-tl是一个...
  • 文件传阅单Word模板

    2020-11-20 23:05:14
    这是一款整理发布的文件传阅单Word模板,适用于公司企业文件传阅记录统计,确保文件在传阅期间...该文档为文件传阅单Word模板,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • 模板导出word文件

    2014-05-17 17:41:03
    1.通过将word模板转换为html文件,输出word。2.利用第三方组件Aspose.Words操作word模板,输出word。
  • 使用POI 导出word模板文件

    千次阅读 热门讨论 2019-03-21 11:29:32
    } } 文件导出工具类: public class POIWordUtil { /** * 根据模板生成新word文档 * 判断表格是需要替换还是需要插入,判断逻辑有$为替换,表格无$为插入 * * @param inputUrl 模板存放地址 * @param outputUrl 新...
  • Java根据word 模板,生成自定义内容的word 文件案列使用的工具文件
  • 根据Word模板生成Word文件 (JAVA POI)

    千次阅读 2019-07-26 22:24:49
    (也试过使用Freemarker渲染数据,但是有个很大的弊端:使用Freemarker模板文件会变得很大,大概为原来的十五至二十倍。) 用法 POI的Maven依赖 <dependency> <groupId>org.apache.poi</g.....
  • 前言:java导出word有很多方式,这里介绍最简单...1、将list数据导出到word数据模板如图所示,字段的值暂时数字1-7代替,这里说明一下为什么要1-7的数字代替字段值,因为一会要把doc格式的文件转换成xml,这里如果

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,242
精华内容 25,296
关键字:

word模板文件怎么用