精华内容
下载资源
问答
  • java 制作word模板

    2020-10-29 16:54:49
    背景:用于实现动态调整word模板中的内容 条件:office组件中格式为docx的word文件 对象与属性关系,如图所示

    背景:用于实现动态调整word模板中的内容

    条件:office组件中格式为docx的word文件

    对象与属性关系(一个学生对应一个同桌及N门学科),如图所示

    一、原生模板

    二、配置参数属性

    1、当前对象的属性,直接写属性名称即可:${属性名}

    2、属性为多选或单选的格式:eq \o\ac(□,${属性名[从0 开始的下标]!}) 

    (1)按图所示操作,找到

    (2)打开域代码

    (3)复制格式进去,并修改属性名称和下标,调整好后记得点击“确定”按钮进行保存

    (4)效果

    (5)有了第一个样式,第1+N个的时候可以直接复制过去,然后再进行调整

    A、复制

    B、选中当前代码(上图标红的部分),右键,选择“编辑域

    C、同样打开“域代码

    D、调整下标,调整完毕后,点击“确定”按钮进行保存

    整体效果

    PS:需要注意的是,当出现这类型的属性时,需要在实体中的属性get方法上加入@WordField(title = "标题,可不写",num=个数)

    3、当前对象中对象的参数,从第二个对象开始写,且与属性之间用下划线"-"拼接:${二级对象_属性名}

    4、list数组格式,需要注意的是不用加"[]":${二级对象和下标_属性名}

    三、制作模板

    1、将文件改成zip的压缩模式,注意,直接重命名改后缀,不要使用压缩!!!另外得是zip后缀的,rar等其他压缩格式不行!!!

    2、解压文件,使用解压插件解压

    3、找到document.xml文件

    4、打开文件document.xml,进行内容调整

    (1)去除每个参数中多余的代码(图中标红所示),每个完整的参数中间不能出现任何代码(图中标绿所示)

    (2)调整完毕后要保存文件

    5、压缩文件

    6、将压缩文件重命名为docx格式,重命名!!!

    7、至此,文件模板制作完毕

    模板使用:https://blog.csdn.net/super_DuoLa/article/details/109384791

    展开全文
  • java生成word模板.zip

    2020-10-30 14:50:22
    java动态生成word模板(文件中含完整项目及对应模板)。模板制作教程https://blog.csdn.net/super_DuoLa/article/details/109338707 核心代码详情https://blog.csdn.net/super_DuoLa/article/details/109384791 ...
  • java实现word模板导出

    2021-04-19 16:13:33
    java实现word模板导出 以下文档为例 方案一 通过freemarker模板引擎 步骤 1.制作模板 使用freemark语法填充变量 另存为xml格式 使用记事本工具检查${}是否连贯,把中间的内容删除即可 在循环处增加<#list 集合名 ...

    java实现word模板导出

    以下文档为例
    在这里插入图片描述

    方案一 通过freemarker模板引擎

    步骤
    1.制作模板
    使用freemark语法填充变量
    在这里插入图片描述

    另存为xml格式
    在这里插入图片描述

    使用记事本工具检查${}是否连贯,把中间的内容删除即可
    在这里插入图片描述

    在循环处增加<#list 集合名 as 变量名></#list>
    在这里插入图片描述
    在这里插入图片描述

    将xml文件的后缀改为.ftl

    2.代码实现

    添加依赖

    org.freemarker freemarker 2.3.28

    @RestController
    @RequestMapping("/word")
    public class WordExportController {
    @GetMapping("/export")
    public void wordExport(HttpServletResponse response) {
    Map<String, Object> data = new HashMap<>();
    data.put(“name”, “年终总结大会”);
    data.put(“place”, “第一会议室”);
    data.put(“time”, “2021年3月25日”);
    data.put(“sponsor”, “张三”);
    List users = Lists.newArrayList(
    new User(“张三”, “组织部”, “10:00”),
    new User(“李四”, “宣传部”, “10:00”));
    data.put(“userList”, users);
    FreeMarkerUtil.createLocalDoc(data, response);
    }
    }

    public static void createLocalDoc(Map<String, Object> data, HttpServletResponse response) {
    try {
    response.setCharacterEncoding(“utf-8”);
    response.setContentType(“application/msword”);
    response.setHeader(“Content-disposition”, “attachment;filename=” + new String(“会议签到表”.getBytes(“utf-8”), “ISO8859-1”));

        Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
        configuration.setDefaultEncoding("UTF-8");
        configuration.setDirectoryForTemplateLoading(new File("C:\\Users\\luban\\Desktop"));
        Template template = configuration.getTemplate("test.ftl");
        OutputStreamWriter writer = new OutputStreamWriter(response.getOutputStream(), "UTF-8");
        template.process(data, writer);
        writer.flush();
        writer.close();
    } catch (Exception e) {
        e.printStackTrace();
        log.info("生成word文档发生异常<{}>", e.getMessage());
    }
    

    }
    3.效果如下
    在这里插入图片描述

    4.补充
    以上方法导出的word文档直接用ms打开没什么问题,但是要再java中使用pdf转换还是不行,因为其本质上还是一个xml文件,所以需要结合zip文件将其转换为word对应格式
    另存为mht(包含富文本必须用此格式) 或者word xml
    使用这种方法对普通变量,少量图片处理基本没啥问题
    需要使用远程模板参考https://blog.csdn.net/MrSpirit/article/details/100770060
    word标签解析参考https://blog.csdn.net/renfufei/article/details/77481753

    方案二 Xdocreport和Freemaker生成docx

    只使用freemaker生成简单的word文档很容易,但是当word文档需要插入动态图片,带循环数据,且含有富文本时解决起来相对比较复杂,但是使用Xdocreport可以轻易解决。
    Xdocreport既可以实现文档填充也可以实现文档转换,此处只介绍其文档填充功能。
    源码地址;https://github.com/opensagres/xdocreport
    文档地址:https://github.com/opensagres/xdocreport/wiki/GettingStarted
    步骤:
    1.制作模板
    以以下文档为例
    在这里插入图片描述

    会议内容为一段富文本
    我们需要在变量替换的位置通过快捷键Ctrl+F9 或 工具栏“插入”->“文档部件或文本”->“域”
    在这里插入图片描述

    选择邮件合并,添加对应属性

    在这里插入图片描述
    在这里插入图片描述

    遇到需要循环的位置
    在第一列的里
    在这里插入图片描述

    “@before-row[#list userList as user]”
    @after-row[/#list]
    遇到图片,先插入一张图片,再为图片添加书签

    在这里插入图片描述
    在这里插入图片描述

    这样模板就制作完成,不需要保存为xml,ftl。直接使用doc或者docx后缀即可
    2.代码实现
    引入依赖

    fr.opensagres.xdocreport xdocreport 2.0.2 核心代码 public static void createXdocreport() { try { //使用远程模板 // InputStream inputStream = new URL(templateUrl).openConnection().getInputStream(); File inputPath = new File("C:\\Users\\luban\\Desktop\\summary.docx"); FileInputStream inputStream = new FileInputStream(inputPath); File outputPath = new File("C:\\Users\\luban\\Desktop\\test.docx"); FileOutputStream outputStream = new FileOutputStream(outputPath); IXDocReport report = XDocReportRegistry .getRegistry() .loadReport(inputStream, TemplateEngineKind.Freemarker); // 设置特殊字段 FieldsMetadata metadata = report.createFieldsMetadata(); metadata.addFieldAsTextStyling("content", SyntaxKind.Html); metadata.addFieldAsImage("avatar", "user.avatar", NullImageBehaviour.RemoveImageTemplate); report.setFieldsMetadata(metadata); // 创建内容-text为模版中对应都变量名称 String content = "<p>我在这里放了一段富文本</p>" + "<p>我准备测试富文本的处理</p>"; content = HtmlUtils.htmlUnescape(content); IContext context = report.createContext(); context.put("name", "年终总结大会"); context.put("time", "2021年3月26日"); context.put("place", "线上"); context.put("sponsor", "张三"); context.put("content", content); //图片这里放图片的输入流 InputStream p1 = new FileInputStream(new File("C:\\Users\\luban\\Desktop\\图片1.png")); InputStream p2 = new FileInputStream(new File("C:\\Users\\luban\\Desktop\\图片2.jpg")); List users = Lists.newArrayList( new UserAvatar("张三", "组织部", new ByteArrayImageProvider(p1)), new UserAvatar("李四", "宣传部", new ByteArrayImageProvider(p2))); context.put("userList", users); // 生成文件 report.process(context, outputStream); inputStream.close(); outputStream.close(); } catch (Exception e) { log.info("生成纪要文件发生异常:<{}>", e.getMessage()); } } 测试 public static void main(String[] args) { createXdocreport(); } 效果如下 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210428115434555.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pVTkV0aHJlZXNldmVu,size_16,color_FFFFFF,t_70#pic_center)

    源码地址
    https://github.com/lubanjune/word-export.git
    参考博文
    https://blog.csdn.net/renfufei/article/details/53283320
    https://blog.csdn.net/weixin_44569204/article/details/86543711
    https://blog.csdn.net/erpenggg/article/details/106714402

    展开全文
  • Java 使用pdf 模板生成pdf文件——制作流程1.使用工具adobe acrobat dc、word 20152.使用 word 繪制一個 3*5 的表格並保存,如下: 3.將文檔另存為pdf格式注:不要使用“另存為adobe pdf ”選項,這樣保存出來的文檔...

    Java 使用pdf 模板生成pdf文件

    ——制作流程

    1.      使用工具

    adobe acrobat dc、word 2015

    2.      使用 word 繪制一個 3*5 的表格並保存,如下:

    go

    go

    3.      將文檔另存為pdf格式

    注:不要使用“另存為adobe pdf ”選項,這樣保存出來的文檔比較大(安裝 adobe acrobat dc 工具后,word中會有該選項)

    go

    4.      打開已安裝的adobe acrobat DC 工具

    go

    5.      文件->創建->創建表單,制作 pdf 模板

    go

    6.      選擇要剛剛保存的pdf文件

    go

    7.      打開后,工具自動生成“文本域”

    go

    8.      修改文本域屬性名

    go

    9.      修改文本域默認字體(選個 adobe 開頭的字體,有助於程序生成)

    go

    10.  保存pdf模板

    go

    11.  多行文本域,可以設置自動換行

    go

    12.  以下為使用IText7通過 pdf 模板生成pdf 的效果

    go

    13.  文本域默認字體對文件大小有影響

    go

    改變前

    go

    改變后

    go

    14.  使用itext7 ,通過pdf模板生成pdf的主要代碼

    /**

    * 使用pdf 模板生成 pdf 文件

    *

    * @author xxj 2017年5月24日

    */

    @Test

    public void fillTemplate() {// 利用模板生成pdf

    // 模板路徑

    String templatePath = "D:/Temp/pdf/pdf-template-form.pdf";

    // 生成的新文件路徑

    String fileName = StringExtend.format("itext-template-{0}.pdf", DateExtend.getDate("yyyyMMddHHmmss"));

    String newPDFPath = PathExtend.Combine("D:/Temp/pdf/", fileName);

    try {

    // com.lowagie.text.pdf.PdfStamper.PdfStamper

    // Initialize PDF document

    PdfDocument pdf = new PdfDocument(new PdfReader(templatePath), new PdfWriter(newPDFPath));

    PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);

    Map fields = form.getFormFields();

    String maxTxt = "你好,世界!hello word!你好,世界!hello word!你好,世界!hello word!"

    + "你好,世界!hello word!你好,世界!hello word!你好,世界!hello word!"

    + "你好,世界!hello word!你好,世界!hello word!你好,世界!hello word!"

    + "你好,世界!hello word!你好,世界!hello word!你好,世界!hello word!"

    + "你好,世界!hello word!你好,世界!hello word!你好,世界!hello word!"

    + "你好,世界!hello word!你好,世界!hello word!你好,世界!hello word!";

    // 處理中文問題

    PdfFont font = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);

    String[] str = { "01.hello word!", "02.你好,世界!", "03.hello word!", "04.你好,世界!", "05.hello word!",

    "06.你好,世界!", "07.hello word!", "08.你好,世界!", "09.hello word!", "10.你好,世界!", "11.hello word!",

    "12.你好,世界!", "13." + maxTxt, "14." + maxTxt, };

    int i = 0;

    java.util.Iterator it = fields.keySet().iterator();

    while (it.hasNext()) {

    // 獲取文本域名稱

    String name = it.next().toString();

    // 填充文本域

    fields.get(name).setValue(str[i++]).setFont(font).setFontSize(12);

    System.out.println(name);

    }

    form.flattenFields();// 設置表單域不可編輯

    pdf.close();

    System.out.println("模板:" + templatePath);

    System.out.println("pdf:" + newPDFPath);

    } catch (IOException e) {

    e.printStackTrace();

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    15.  常見問題

    go

    異常描述

    java.lang.NullPointerException

    atcom.itextpdf.kernel.pdf.PdfDocument.getFont(PdfDocument.java:1479)

    atcom.itextpdf.forms.fields.PdfFormField.getFontAndSize(PdfFormField.java:2442)

    atcom.itextpdf.forms.fields.PdfFormField.regenerateField(PdfFormField.java:1780)

    atcom.itextpdf.forms.fields.PdfFormField.setValue(PdfFormField.java:1038)

    atcom.itextpdf.forms.fields.PdfFormField.setValue(PdfFormField.java:999)

    解決方案:

    打開pdf模板,將字體修改為 adobe 開頭的字體,如 adobe pi

    展开全文
  • java Word模板数据替换

    2021-06-02 14:11:51
    技术背景 ...这里主要讲解如何通过一个制作好的word模板文件,通过数据填充,生成加工好的word文件。 官方网站 http://deepoove.com/poi-tl Maven <dependency> <groupId>com.deepoove

    Maven

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

    模板

    在这里插入图片描述

    实现效果

    在这里插入图片描述

    核心实现代码

    @RestController
    public class PoiTlController {
    
    	@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]");
    					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);
    	}
    
    }
    
    展开全文
  • 根据自己的业务需求制作相应的word模板 例如: 将对应的模板另存为xml格式 编辑xml文档 1.将保存好的xml文档利用idea打开,并使用快捷键将其简单的规整,这样有利于我们后期对它的编辑 2.规整后我们找到我们需要...
  • 背景:java 制作word模板中,多选框错误,如图所示 分析与处理:当前属性可能为office的关键字,换一个属性名即可,如图所示
  • JAVA使用POI-TL通过Word模板生成Word文件

    万次阅读 热门讨论 2018-08-15 16:04:24
    技术背景 很多时候我们网站或者系统需要提供一些word文件,例如证明.docx或者订单....这里主要讲解如何通过一个制作好的word模板文件,通过数据填充,生成加工好的word文件。 官方网站 http://deepoove.com/...
  • 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要...
  • freemarker ... 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Languag...
  • 2、制作Word文件 新建word文件,调整内容和格式,需要动态传参的地方使用占位符,如图: 3、Word文件转换为模板 打开Word文件,另存为,XML格式文件,如图: 4、编写工具类 import java.io....
  • 1.导入jar包 <dependency> <groupId>org.springframework.boot<...2.制作模板、修改word 先将word中需要填充的字段使用${}代替 然后将后缀改成ftl 3.修改JAVA代码 /** * @Desc
  • 1.word模板制作 在word文档光标位置,插入 -》文档部件 -》域,弹框如下: 最终生成的模板文档如下: 注:图片域和单个变量域是同一个,定义图片域时,同一个图片需要定义不同的域名。 2.工具类准备 使用...
  • 本文讲述读取word模板制作和模板读取动态插入数据生成word 1.首先制作模板 找我们需要的word模板文件,打开他,然后选另存为,保存成XML格式 然后用Notepad++打开对应的XML,用XML Tools插件序列化数据(插件下载地址...
  • java 根据模板文件生成word文档——doc功能描述环境说明步骤第一步 制作xml第二步 制作模板第三步 写Java工具类 功能描述 实现批量生成标识签,及生成多页的文档(图中二维码也属于数据一部分),如下图: 环境说明...
  • Java 使用pdf 模板生成pdf文件 ——制作流程 1. 使用工具 adobe acrobat dc、word 2015 2. 使用 word 绘制一个 3*5 的表格并保存,如下: 3. 将文档另存为pdf格式 注:不要使用“另存为adobe pdf ”选项,这样...
  • 制作模板: 1、首先做一份word。 2、对于图片,图片的样式格式要设置好,宽、高、位置大小等,因为原理是替换。 3、对于文字,可以设置简单的替换文字,同样格式、样式、位置等设置好。 4、另存为word 2003 xml...
  • java 模板导出word(含图片)

    千次阅读 2019-03-20 19:51:41
    1.先制作word模板 2.将该文档另存为 xml 文件 3.打开xml 文件 将对应的字段替换,比如 4.将xml文件保存成ftl格式的文档 5.相应的代码: package org.lq.ssm.gp.controller; ...
  • 需求描述: 根据公司纪律小组的电子违规记录,生成word综合分析文档。形式如: 1. 上班时间打游戏 (1)XXX在XXX时间打游戏 ...制作模板的步骤别的博客里基本都有,和把map写进模板的代码大同...
  • java+springmvc实现根据freemarker模板导出word模板。模板使用的后缀可以是:.xml,也可以是.ftl。 步骤1,引入freemarker的jar包。 步骤2,制作模板文件。(红框中的内容是为了替换使用) 另存为xml格式, ...
  • java 下载word freemaker

    2019-03-21 23:05:00
    网上有很多优质的博文了,这里这篇博客就是记录一下字自己,写demo的历程,坑和收获 ... 下载word 的大体思路是,制作模板,封装数据,导出 一 制作模板 很简单的模板 1 首先新建word 2 文...
  • JAVA 下载Word文档

    千次阅读 2018-06-03 15:24:00
    最近在做java中页面下载word文档,给大家分享一下。我的环境是MyEclipse10 , JDK1.6 ,Tomcat 6,我...首先我们需要制作一个ftl模板,这样freemarker才能识别模板 我们新建一个word文档,非常简单的word生成然后我们...
  • Java实现Word导出

    千次阅读 2018-07-19 10:17:28
    一、Word模板制作 在项目中,往往导出word是有一定的格式要求的,POI使用 ${} 作为占位符。模板如下:  二、导入数据至模板 public static void main(String[] args) { //测试数据准备 //1.标题 ...
  • poi填充word模板

    2019-10-24 19:03:13
    1 word模板提前制作好 给填充的地方增加书签 2代码 package io.renren.common.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java...
  • freemarker导出word模板

    2017-11-18 13:46:47
    一般通过java把想要的数据导出成word,需要先制作模板 工具有freemarker或velocity,相比之下感觉freemarker容易上手,操作简便 流程: 1、用word制作模板  表格设置不可见,然后另存为xml格式  用tepad++...
  • 文章目录1、技术背景2、官方网站3、引入依赖4、代码示例 ...这里主要讲解如何通过一个制作好的word模板文件,通过数据填充,生成加工好的word文件 2、官方网站 http://deepoove.com/poi-tl/ poi-tl(poi template langu
  • java-word导出

    2020-08-17 15:49:39
    流程:先拿到模板 --》转换成xml——》修改字段——》转换成ftl格式(模板制作完成)——》添加数据下面 package org.jeecg.modules.demo.st.utils; import freemarker.template.Configuration; import freemarker....

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 165
精华内容 66
关键字:

java制作word模板

java 订阅