精华内容
下载资源
问答
  • Java导出word模板

    2020-12-01 23:05:13
    Java导出word模板 最近项目中有生成word报文需求, 需求中使用到word模板导出功能, 记录下, 以便复用; 之前有相似需求, 当时做法稍显复杂,区分了doc和docx两种后缀形式的word,本文基于docx模板导出。 1. 编写word模板...

    Java导出word模板


    最近项目中有生成word报文需求, 需求中使用到word模板导出功能, 记录下, 以便复用; 之前有相似需求, 当时做法稍显复杂,区分了doc和docx两种后缀形式的word,本文基于docx模板导出。

    1. 编写word模板
    首先创建一个docx后缀的word文档, 编写好需要的内容,调好格式; 文档中需要变动替换的内容根据替换的语法进行替换, 以下列出常用的几种替换形式,比较简单:

    • 普通文本 -> 双大括号 {{}} 替换; 例如{{object.name}} object为后端java传过来的对象,
      object.name即为获取传过来对象的name属性;

    • 循环 -> 以问号开头, 斜杠结尾; 例如{{?object.personList}}
      年龄:{{age}}{{/object.personList}} 循环personList, 遍历展示person的age属性;

    • 图片 -> 图片替换使用@符号 {{@testRender}}; 注意: 图片替换后端需组装PictureRenderData对象传入;

    2. Java导出数据
    这里用到的是poi方式,直接上代码:

    ConfigureBuilder builder = Configure.newBuilder();
    builder.setElMode(Configure.ELMode.SPEL_MODE);
    // 需要生成的word
    File wordFile = new File("D:/test.docx");
    wordFile.getParentFile().mkdirs();
    try (
    	// 根据写好的docx模板创建模板对象
        XWPFTemplate template = XWPFTemplate.compile("D:/test_template.docx", builder.build());
        FileOutputStream out = new FileOutputStream(wordFile)
    ) {
    	// objectDto为数据对象
        template.render(objectDto);
        template.write(out);
        out.flush();
    }
    

    导出完成,这种方式相对简单; 之前需求有转换pdf功能, 尝试了几种方式, 发现对格式的保留程度最好的一种是借助libreoffice(Windows和Linux平台表现都还不错), 这里不细讲。

    展开全文
  • java导出word模板

    2019-09-12 16:23:52
    项目中,可能会有很多地方需要导出word模板,首先,你需要有模板,然后,模板另存为xml格式。 package com; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStrea...

    项目中,可能会有很多地方需要导出word模板,首先,你需要有模板,然后,模板另存为xml格式。

    package com;
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.util.HashMap;
    import java.util.Map;
    
    import freemarker.cache.FileTemplateLoader;
    import freemarker.cache.TemplateLoader;
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    
    public class CreateWord {
    
    	public static void main(String[] args) {
    		Map<String, Object> cont = new HashMap<String, Object>();// 存储数据
    
    		Configuration cfg = new Configuration();
    
    		TemplateLoader templateLoader = null;
    
    		try {
    			//模板的路径
    			File fir = new File("W:/test/wswhr/");
    			
    			//生成文件的路径及文件名。
    			File outFile = new File("W:/test/wswhr/委托创作合同.doc");
    
    			Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));
    
    			// 使用FileTemplateLoader
    			//制定模板路径
    			templateLoader = new FileTemplateLoader(fir);//
    			String tempname = "委托创作合同.xml";
    
    			cfg.setTemplateLoader(templateLoader);
    			Template t = cfg.getTemplate(tempname, "UTF-8");
    			
    			t.process(cont, out);
    			out.flush();
    			out.close();
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    }
    注意,里面的

    cfg.setTemplateLoader(templateLoader);

    这一句,是指定模板所在目录。

    如果只是运行一些测试类,或者本地main方法可以用这个。

    如果是在线上服务器,请用下面的代码来制定模板路径。

    //创建配置实例 
    	        Configuration configuration = new Configuration();
           
    	        //设置编码
                configuration.setDefaultEncoding("UTF-8");
                
                //ftl模板文件统一放至 com.lun.template 包下面
                configuration.setClassForTemplateLoading(WordUtil.class, "/cn/digitalpublishing/templates/");
                
                //获取模板 
                Template template = configuration.getTemplate(templateName);

    这里的,制定模板路径的方法是,setClassForTemplateLoading.

    望文生义也知道,根据指定的class文件,去找对应的目录加载模板。

    转载于:https://my.oschina.net/wswhr/blog/709831

    展开全文
  • java 导出word模板

    2020-03-19 11:50:43
    一、模板 模板样式: 第一步:在需要传入参数的地方写入参数 然后将word另存为xml文件。 第二步:用Notepad++打开(其他编辑器也可以,用着notepad因为方便编辑),然后将里面的参数修改成 “${参数}”这个样式,...

    一、模板
    模板样式:
    这个是我自己用word手画的模板
    第一步:在需要传入参数的地方写入参数
    在这里插入图片描述
    然后将word另存为xml文件。
    第二步:用Notepad++打开(其他编辑器也可以,用着notepad因为方便编辑),然后将里面的参数修改成 “${参数}”这个样式,如下图
    在这里插入图片描述
    根据自己的所写入的参数,依次对比修改
    第三步:保存,然后将XML文件的后缀,修改成ftl,这样模板就生成好了。
    注意:不要在word中修改参数的形式,要在xml中修改,因为在word中修改,另存为xml的时候,参数会被分离或者丢失(我踩过的坑),一旦丢失或者分离,你就要重头再来一遍。

    二、代码实现
    第一步:后端代码实现
    用的是freemarker导出的word,所以这个jar包可以之前去maven的仓库中去下载,也可以在pom.xml中写好依赖,然后直接更新
    在这里插入图片描述
    用的框架式spring boot + mybatis plus。
    controller层的实现:
    /**
    * 下载word文档
    */
    @GetMapping("/downLoadWord")
    @ApiOperation(“下载word文档”)
    @ApiImplicitParams({
    @ApiImplicitParam(paramType = “query”, name = “marketId”, value = “商贸城id”, dataType = “String”),
    @ApiImplicitParam(paramType = “query”, name = “shopCode”, value = “商铺编号”, dataType = “String”),
    @ApiImplicitParam(paramType = “query”, name = “copyMeterDate”, value = “抄表时间”, dataType = “String”),
    @ApiImplicitParam(paramType = “query”, name = “electricChargeState”, value = “mark”, dataType = “String”),
    @ApiImplicitParam(paramType = “query”, name = “startDate”, value = “开始时间”, dataType = “String”),
    @ApiImplicitParam(paramType = “query”, name = “endDate”, value = “结束时间”, dataType = “String”),
    @ApiImplicitParam(paramType = “query”, name = “ids”, value = “ids”, dataType = “String”)
    })
    public R downLoadWord(
    @RequestParam(name = “marketId”, required = false) String marketId,
    @RequestParam(name = “shopCode”, required = false) String shopCode,
    @RequestParam(name = “copyMeterDate”, required = false) String copyMeterDate,
    @RequestParam(name = “electricChargeState”, required = false) String electricChargeState,
    @RequestParam(name = “startDate”, required = false) String startDate,
    @RequestParam(name = “endDate”, required = false) String endDate,
    @RequestParam(name = “ids”, required = false) String ids,
    HttpServletResponse resp
    ) throws Exception{
    SimpleDateFormat sdt = new SimpleDateFormat(“yyyy-MM-dd”);
    j = j+1;
    int num = 0;
    List list1 = new ArrayList();
    if(ids == null || ids.equals("")) {
    List list = new ArrayList();
    if(startDate!=null&&!startDate.equals("")&&endDate!=null&&!endDate.equals("")) {
    list = electricChargeService.list(
    new QueryWrapper()
    .eq(StringUtils.isNotBlank(marketId), “market_id”, marketId)
    .eq(StringUtils.isNotBlank(copyMeterDate), “copy_meter_date”, copyMeterDate)
    .eq(StringUtils.isNotBlank(electricChargeState), “electric_charge_state”, electricChargeState)
    .between(“electric_charge_date”, startDate+" 00:00:00", endDate+" 23:59:59")
    .eq(“meter_state”, “1”)
    .like(StringUtils.isNotBlank(shopCode), “shop_code”, shopCode)
    .eq(“submit_state”,“1”)
    .eq(“examine_state”,“1”)
    .groupBy(“shop_code”)
    .groupBy(“copy_meter_date”)
    .orderByDesc(“CREATE_TIME”)
    );
    }else{
    list = electricChargeService.list(
    new QueryWrapper()
    .eq(StringUtils.isNotBlank(marketId), “market_id”, marketId)
    .eq(StringUtils.isNotBlank(copyMeterDate), “copy_meter_date”, copyMeterDate)
    .eq(StringUtils.isNotBlank(electricChargeState), “electric_charge_state”, electricChargeState)
    .eq(“meter_state”, “1”)
    .like(StringUtils.isNotBlank(shopCode), “shop_code”, shopCode)
    .eq(“submit_state”,“1”)
    .eq(“examine_state”,“1”)
    .groupBy(“shop_code”)
    .groupBy(“copy_meter_date”)
    .orderByDesc(“CREATE_TIME”)
    );
    }

            for(ElectricChargeEntity electricCharge : list){
                 list1 = electricChargeService.list(new QueryWrapper<ElectricChargeEntity>()
                        .eq("copy_meter_date",electricCharge.getCopyMeterDate())
                        .eq("market_id",electricCharge.getMarketId())
                        .eq("shop_code",electricCharge.getShopCode())
                        .eq("examine_state","1"));
                Map<String, Object> root = new HashMap<String, Object>();
                root.put("newDate",sdt.format(new Date()));
                String str= String.format("%07d",j);
                root.put("number",str);
                String remark = "";
                String last = "";
                String current = "";
                String quantity = "";
                String price = "";
                String sum = "";
                String code = "";
                String waterlast = "";
                String watercurrent = "";
                String waterQuantity = "";
                String waterPrice = "";
                String waterSum = "";
                for(ElectricChargeEntity electricChargeEntity:list1){
    

    // 电费
    if(electricChargeEntity.getChargeType().equals(“0”)){
    last = electricChargeEntity.getLastElectricQuantity();
    current = electricChargeEntity.getCurrentElectricQuantity();
    quantity=electricChargeEntity.getElectricQuantity();
    price=electricChargeEntity.getUnitPrice();
    double a = DoubleUtil.mul(Double.valueOf(electricChargeEntity.getElectricQuantity()),Double.valueOf(electricChargeEntity.getUnitPrice()));
    sum = String.valueOf(a);
    code = electricChargeEntity.getShopCode();

                        if(electricChargeEntity.getRemark()!=null){
                            remark = remark + electricChargeEntity.getRemark();
                        }
    

    // 水费
    }else if(electricChargeEntity.getChargeType().equals(“1”)){
    waterlast=electricChargeEntity.getLastElectricQuantity();
    watercurrent=electricChargeEntity.getCurrentElectricQuantity();
    waterQuantity=electricChargeEntity.getElectricQuantity();
    waterPrice=electricChargeEntity.getUnitPrice();
    double b = DoubleUtil.mul(Double.valueOf(electricChargeEntity.getElectricQuantity()),Double.valueOf(electricChargeEntity.getUnitPrice()));
    waterSum=String.valueOf(b);
    code=electricChargeEntity.getShopCode();
    if(electricChargeEntity.getRemark()!=null){
    remark = remark + electricChargeEntity.getRemark();
    }
    }

                }
                root.put("last",last);
                root.put("current",current);
                root.put("quantity",quantity);
                root.put("price",price);
                root.put("sum",sum);
                root.put("shopCode",code);
                root.put("waterlast",waterlast);
                root.put("watercurrent",watercurrent);
                root.put("waterQuantity",waterQuantity);
                root.put("waterPrice",waterPrice);
                root.put("waterSum",waterSum);
                root.put("reamrk",remark);
                // 设置FreeMarker的版本和编码格式
                Configuration configuration = new Configuration(new Version("2.3.0"));
                configuration.setDefaultEncoding("UTF-8");
                configuration.setDirectoryForTemplateLoading(new File("D:\\workplace\\tradeZone\\src\\main\\java\\io\\project\\common\\ftl"));
                // 输出文档路径及名称
                File outFile = new File("D:\\水电收据.doc");
                String path = "D:\\水电收据.doc";
                String fileName = "水电收据.doc";
                Template template = configuration.getTemplate("water1.ftl", "utf-8");
                Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
                template.process(root, out);
                out.close();
    
                FileDownload  fileDownload = new FileDownload();
                fileDownload.downloadFile(path,fileName,resp);
            }
        }else{
            List<String> index2 = Arrays.asList(ids.split(","));
            for(String electricChargeId:index2){
                ElectricChargeEntity electricCharge = electricChargeService.getById(electricChargeId);
                 list1 = electricChargeService.list(new QueryWrapper<ElectricChargeEntity>()
                        .eq("copy_meter_date",electricCharge.getCopyMeterDate())
                        .eq("market_id",electricCharge.getMarketId())
                        .eq("shop_code",electricCharge.getShopCode())
                        .eq("examine_state","1"));
                Map<String, Object> root = new HashMap<String, Object>();
                root.put("newDate",sdt.format(new Date()));
                root.put("number",String.format("%07d",j));
                String remark = "";
                String last = "";
                String current = "";
                String quantity = "";
                String price = "";
                String sum = "";
                String code = "";
                String waterlast = "";
                String watercurrent = "";
                String waterQuantity = "";
                String waterPrice = "";
                String waterSum = "";
                for(ElectricChargeEntity electricChargeEntity:list1){
    

    // 电费
    if(electricChargeEntity.getChargeType().equals(“0”)){
    last = electricChargeEntity.getLastElectricQuantity();
    current = electricChargeEntity.getCurrentElectricQuantity();
    quantity=electricChargeEntity.getElectricQuantity();
    price=electricChargeEntity.getUnitPrice();
    double a = DoubleUtil.mul(Double.valueOf(electricChargeEntity.getElectricQuantity()),Double.valueOf(electricChargeEntity.getUnitPrice()));
    sum = String.valueOf(a);
    code = electricChargeEntity.getShopCode();
    if(electricChargeEntity.getRemark()!=null){
    remark = remark + electricChargeEntity.getRemark();
    }

    // 水费
    }else if(electricChargeEntity.getChargeType().equals(“1”)){
    waterlast=electricChargeEntity.getLastElectricQuantity();
    watercurrent=electricChargeEntity.getCurrentElectricQuantity();
    waterQuantity=electricChargeEntity.getElectricQuantity();
    waterPrice=electricChargeEntity.getUnitPrice();
    double b = DoubleUtil.mul(Double.valueOf(electricChargeEntity.getElectricQuantity()),Double.valueOf(electricChargeEntity.getUnitPrice()));
    waterSum=String.valueOf(b);
    code=electricChargeEntity.getShopCode();
    if(electricChargeEntity.getRemark()!=null){
    remark = remark + electricChargeEntity.getRemark();
    }

                   }
               }
                root.put("last",last);
                root.put("current",current);
                root.put("quantity",quantity);
                root.put("price",price);
                root.put("sum",sum);
                root.put("shopCode",code);
                root.put("waterlast",waterlast);
                root.put("watercurrent",watercurrent);
                root.put("waterQuantity",waterQuantity);
                root.put("waterPrice",waterPrice);
                root.put("waterSum",waterSum);
    
                root.put("reamrk",remark);
                // 设置FreeMarker的版本和编码格式
                Configuration configuration = new Configuration(new Version("2.3.0"));
                configuration.setDefaultEncoding("UTF-8");
                configuration.setDirectoryForTemplateLoading(new File("D:\\workplace\\tradeZone\\src\\main\\java\\io\\project\\common\\ftl"));
                // 输出文档路径及名称
                File outFile = new File("D:\\水电收据.doc");
                String path = "D:\\水电收据.doc";
               String fileName = "水电收据.doc";
                Template template = configuration.getTemplate("water1.ftl", "utf-8");
                Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
                template.process(root, out);
                out.close();
                
                FileDownload  fileDownload = new FileDownload();
                fileDownload.downloadFile(path,fileName,resp);
    
            }
        }
        return R.ok().put("list",list1);
    }
    

    代码过长,是因为我的业务逻辑过于复杂啰嗦,下载的具体代码是从 root.put(“last”,last);这行开始,到fileDownload.downloadFile(path,fileName,resp);
    这行结束

    工具类:
    public class FileDownload {

    public void downloadFile(String filePath,String fileName, HttpServletResponse response) throws IOException {
        if (null != filePath){
            File file = new File(filePath);
            response.reset(); // 非常重要
    

    // response.setContentType(“application/x-msdownload”); 不注释会报错 Could not find acceptable representation
    response.setHeader(“Content-Disposition”, “attachment;filename=”+java.net.URLEncoder.encode(fileName,“UTF-8”));
    response.setHeader(“Content-Length”, “”+file.length());
    byte[] buffer = new byte[1024];
    FileInputStream fis = new FileInputStream(file);
    BufferedInputStream bis = new BufferedInputStream(fis);
    OutputStream os = response.getOutputStream();
    int i = bis.read(buffer);
    while (i != -1) {
    os.write(buffer, 0, i);
    i = bis.read(buffer);
    }
    os.flush();
    fis.close();
    }
    }
    }

    前端:用的是Vue
    downLoad (electricChargeId) {
    //参数
    var arr = this.dataForm.value
    var a
    var b
    if (arr === ‘’ || arr === undefined || arr === null) {
    a = ‘’
    b = ‘’
    } else {
    a = arr[0]
    b = arr[1]
    }
    //可以只穿一个id,我把它写成数组,方便以后批量下载改进
    let ids = electricChargeId ? [electricChargeId] : this.dataListSelections.map(item => {
    return item.electricChargeId
    })
    //接口地址
    var url = /electriccharge/downLoadWord?token=${this.$cookie.get('token')}&ids= + ids
    this.KaTeX parse error: Expected '}', got 'EOF' at end of input: … url: this.http.adornUrl(url),
    method: ‘get’,
    params: this.KaTeX parse error: Expected '}', got 'EOF' at end of input: …arketId': this.store.state.common.marketIdName,
    ‘shopId’: this.dataForm.shopId,
    ‘startDate’: a,
    ‘endDate’: b,
    ‘copyMeterDate’: this.dataForm.copyMeterDate,
    ‘electricChargeState’: this.electricChargeState
    }),
    responseType: ‘blob’ // 表明返回服务器返回的数据类型
    }).then(res => {
    //注意这一行,如果是word,就要改成msword,pdf就是pdf,excel要改成ms.excel
    const blob = new Blob([res.data], { type: ‘application/vnd.msword’ })
    const downloadElement = document.createElement(‘a’)
    const href = window.URL.createObjectURL(blob)
    const name = decodeURI(res.headers[‘Content-Disposition’] === undefined ? (res.headers[‘content-disposition’]).split(’=’)[1] : (res.headers[‘Content-Disposition’]).split(’=’)[1])
    downloadElement.href = href
    downloadElement.download = name
    document.body.appendChild(downloadElement)
    downloadElement.click()
    document.body.removeChild(downloadElement)// 下载完成移除元素
    // window.URL.revokeObjectURL(href); // 释放掉blob对象
    this.dataListLoading = false
    })
    }

    前端代码感觉没有什么,都是常规的调用接口,只要注意下返回参数就可以了。

    三、效果
    在这里插入图片描述
    这个目前只是单个下载word,至于循环打印的,还在研究,有什么错误,欢迎指正,大家一起进步学习。

    展开全文
  • java 调用word模板实现循环套打生成word文档首先我用的技术是 poi 这是代码,一个工具类得调用 public class WordUtil { /** * 基于模板文件导出 word 文档,此方法主要是用来处理文档中需要替换的文本内容,对图片...

    9e1f3d5168dd34f41528bd175c13c35e.png

    java 调用word模板实现循环套打生成word文档

    首先我用的技术是 poi 这是代码,一个工具类得调用 public class WordUtil { /** * 基于模板文件导出 word 文档,此方法主要是用来处理文档中需要替换的文本内容,对图片和表格无效 * * @param templatePath * 模板文件的路径,要求路径中要包含全名,并且模板文件只能是 07 及以上格式,即 docx 的文件 * @param destFilePath * 导出文件的存放路径,包含文件名,例如,E:/test/小区公告.docx * @param data * 用来替换文档中预定义的字符串,要求预定义的字符串与 data 中的 key 值要相同 */ public static void exportWordByTemplate(String templatePath, String destFilePath, Map data) { FileOutputStream out = null; XWPFDocument doc = null; try { doc = new XWPFDocument(POIXMLDocument.openPackage(templatePath)); List listRun; List listParagraphs = doc.getParagraphs(); for (int i = 0; i listRun = listParagraphs.get(i).getRuns(); for (int j = 0; j if (data.get(listRun.get(j).getText(0)) != null) { String val = data.get(listRun.get(j).getText(0)); listRun.get(j).setText(val, 0); } } } File destFile = new File(destFilePath); if (!destFile.getParentFile().exists()) { destFile.getParentFile().mkdirs(); } out = new FileOutputStream(destFilePath); doc.write(out); } catch (IOException e) { e.printStackTrace(); } finally { try { if (out != null) out.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 基于模板文件导出 word 文档,该方法支持03格式,但是此方法只能保留文档内容,不能保留文档中的样式和图片,建议将模板使用 07 的格式保存 * * @param templatePath * 模板文件的路径 * @param destFilePath * 导出文件的存放路径,包含文件名,例如,E:/test/小区公告.doc * @param data * 用来替换文档中预定义的字符串,要求预定义的字符串与 data 中的 key 值要相同 */ public static void export03WordByTemplate(String templatePath, String destFilePath, Map data) { try { WordExtractor doc = new WordExtractor(new FileInputStream( templatePath)); String content = doc.getText(); for (String key : data.keySet()) { content = content.replaceAll(key, data.get(key)); } byte b[] = content.getBytes(); ByteArrayInputStream bais = new ByteArrayInputStream(b); POIFSFileSystem fs = new POIFSFileSystem(); DirectoryEntry directory = fs.getRoot(); directory.createDocument("WordDocument", bais); FileOutputStream ostream = new FileOutputStream(destFilePath); fs.writeFilesystem(ostream); bais.close(); ostream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { Map maps = new HashMap(); maps.put("appellation", "万达公寓业主:"); maps.put( "main_body", "输出的内容"); maps.put("date", "2013年1月23日"); exportWordByTemplate("E:/sss 2.docx", "E:/test/test.doc", maps); } }"E:/sss 2.docx 模板存放的地址。

    E:/test/test.doc 新生成的地址。

    java如何实现读取word文件并按指定word样式格式输出

    public class CreateWordDemo { public void createDocContext(String file) throws DocumentException,IOException { // 设置纸张大小 Document document = new Document(PageSize.A4); // 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中 RtfWriter2.getInstance(document, new FileOutputStream(file)); document.open(); // 设置中文字体 BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED); // 标题字体风格 Font titleFont = new Font(bfChinese, 12,Font.BOLD); // 正文字体风格 Font contextFont = new Font(bfChinese, 10,Font.NORMAL); Paragraph title = new Paragraph("标题"); // 设置标题格式对齐方式 title.setAlignment(Element.ALIGN_CENTER); title.setFont(titleFont); document.add(title); String contextString ="iText是一个能够快速产生PDF文件的java类库。

    " + " \n"// 换行 +"iText的java类对于那些要产生包含文本," + "表格,图形的只读文档是很有用的。

    它的类库尤其与java Servlet有很好的给合。

    " +"使用iText与PDF能够使你正确的控制Servlet的输出。

    "; Paragraph context = new Paragraph(contextString); // 正文格式左对齐 context.setAlignment(Element.ALIGN_LEFT); context.setFont(contextFont); // 离上一段落(标题)空的行数 context.setSpacingBefore(5); // 设置第一行空的列数 context.setFirstLineIndent(20); document.add(context); // 利用类FontFactory结合Font和Color可以设置各种各样字体样式 Paragraph underline = new Paragraph("下划线的实现",FontFactory.getFont( FontFactory.HELVETICA_BOLDOBLIQUE, 18,Font.UNDERLINE, new Color(0, 0,255))); document.add(underline); // 设置 Table 表格 Table aTable = new Table(3); int width[] = { 25, 25, 50 }; aTable.setWidths(width);// 设置每列所占比例 aTable.setWidth(90); // 占页面宽度90% aTable.setAlignment(Element.ALIGN_CENTER);// 居中显示 aTable.setAlignment(Element.ALIGN_MIDDLE);// 纵向居中显示 aTable.setAutoFillEmptyCells(true); // 自动填满 aTable.setBorderWidth(1); // 边框宽度 aTable.setBorderColor(new Color(0, 125, 255)); // 边框颜色 aTable.setPadding(2);// 衬距,看效果就知道什么意思了 aTable.setSpacing(3);// 即单元格之间的间距 aTable.setBorder(2);// 边框 // 设置表头 Cell haderCell = new Cell("表格表头"); haderCell.setHeader(true); haderCell.setColspan(3); aTable.addCell(haderCell); aTable.endHeaders(); Font fontChinese = new Font(bfChinese, 12, Font.NORMAL,Color.GREEN); Cell cell = new Cell(new Phrase("这是一个测试的 3*3 Table 数据",fontChinese)); cell.setVerticalAlignment(Element.ALIGN_TOP); cell.setBorderColor(new Color(255, 0,0)); cell.setRowspan(2); aTable.addCell(cell); aTable.addCell(new Cell("#1")); aTable.addCell(new Cell("#2")); aTable.addCell(new Cell("#3")); aTable.addCell(new Cell("#4")); Cell cell3 = new Cell(new Phrase("一行三列数据",fontChinese)); cell3.setColspan(3); cell3.setVerticalAlignment(Element.ALIGN_CENTER); aTable.addCell(cell3); document.add(aTable); document.add(new Paragraph("\n")); // 添加图片 Image.getInstance即可以放路径又可以放二进制字节流 Image img = Image.getInstance("d:\\img01800.jpg"); img.setAbsolutePosition(0,0); img.setAlignment(Image.RIGHT);// 设置图片显示位置 img.scaleAbsolute(60, 60);// 直接设定显示尺寸 // img.scalePercent(50);//表示显示的大小为原尺寸的50% // img.scalePercent(25,12);//图像高宽的显示比例 // img.setRotation(30);//图像旋转一定角度 document.add(img); document.close(); } public static void main(String[] args) { CreateWordDemo word = new CreateWordDemo(); String file ="d:/demo1.doc"; try { word.createDocContext(file); } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

    展开全文
  • 项目中,可能会有很多地方需要导出word模板,首先,你需要有模板,然后,模板另存为xml格式。package com;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io....
  • 修改word模板 这里用到了freemarker这个框架,当然这只是此框架的微不足道的一个功能 原理很简单,就是此框像很多web模板框架一样,根据预先定义的标志位(${ID}) ,然后将键为ID的 字符串填充进去。 你需要先将你的...
  • 使用freemarker技术,首先将word模板另存为xml文档,方便填充数据。然后将后缀名改为ftl,简单方便.
  • 1 创建word模板 2 动态数据占位 格式:${xxxxx} 3 点击另存为xml格式 4 修改后缀名为ftl 5 导入到idea中 6 修改文件编码为utf-8 7 复制模板内容在线代码格式化 8 编辑模板中内容 如果有空值会报错,...
  • java导出word文档

    千次阅读 2015-08-26 22:13:05
    java使用模板导出word文档
  • java根据提供word模板导出word文档

    千次阅读 2019-10-17 14:27:44
    (1)首先修改word模板如下形式,把需要查询写入word的值用${}形式封装 (2)把word改为ftl格式 首先word另存为选择xml 然后重命名直接将XML文件修改后缀名为ftl文件 (3)关键代码 public void ...
  • 前言:java导出word有很多方式,这里介绍最简单的一种,利用freemark模板导出word文档。 说明:这里用导出一个list列表数据到word文档来举例 首先导入freeamark依赖,版本号最好不要太低,在maven依赖官网找使用...
  • 使用freemarker模板导出word文档,用的比较多。这里也是采用的这种方式。1 编辑一个word文件的模板,用于在程序中需要读入填充在模板中的数据先用字母代替,注意word版本为word2003或高于这个版本;如:test.doc2 把...
  • 对于这个功能,想必也有其他平台会需要吧。... 这种导出word,用XML的方式实现,相对简单。 word2003版本以后的都可以保存xml的形式。 模板:    保存成xml文件,用Notepad++打开编辑,并将这些需要
  • JAVA导出word文档

    2021-03-04 11:43:34
    * 导出word * <p>第一步生成替换后的word文件,只支持docx</p> * <p>第二步下载生成的文件</p> * <p>第三步删除生成的临时文件</p> * 模版变量中变量格式:{{foo}} * @...
  • Java导出Word文档的实现

    千次阅读 热门讨论 2020-10-18 16:17:13
    在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表、医院的患者统计报表、电商平台的销售报表等等。 导出Word方式多种多样,通常有以下几种方式: 1. 使用第三方Java工具类库Hutool...
  • FreeMarker导出指定模板 ftl模板里标签的 去掉字体加粗 <w:b w:val="off" /> 字体变黑体 <w:color w:val="auto" w:themeColor="none" w:themeShade="#000000" />
  • java导出word

    2013-04-09 15:11:23
    利用java导出word 编写ftl模板 导出即可 很简单
  • 优点:采用FreeMarker是导出Word的最佳实现,非常的灵活,能够按照自己指定的样式设置并输出内容,操作简单方便,代码实现也容易。代码量少,样式、内容容易控制,打印不变形,完全符合office标准 缺点:需要提前...
  • Freemarker java导出word文档 ** 一、生成Word模板 生产word模版主要分为两步,一个是把word文档另存为xml文档,注意是另存为。然后把xml文档后缀改为ftl文档。在编辑word文档的时候,最好把需要填充或替换的位置,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,330
精华内容 3,332
关键字:

java导出word模板

java 订阅