精华内容
下载资源
问答
  • Word模板-常用扩展名的含义.wps
  • publicstaticvoidmain(String[]args){//模板、文件、图片路径StringworkPath=System.getProperty("user.dir")+"/static-utils/src/main/resources/word/";StringtemplateName="test.docx";Mapdatas=newHashMap()...

    public static void main(String[] args) {

    //模板、文件、图片路径

    String workPath=System.getProperty("user.dir") + "/static-utils/src/main/resources/word/";

    String templateName="test.docx";

    Map datas = new HashMap() {

    {

    //文本

    put("name","xiaoguo");

    put("sex","男");

    put("year","20200105");

    put("hello","xiaoguo写于2020年一月");

    //自定义表格

    RowRenderData header = RowRenderData.build(new TextRenderData("1C86EE", "姓名"), new TextRenderData("1C86EE", "学历"));

    RowRenderData row0 = RowRenderData.build("张三", "研究生");

    RowRenderData row1 = RowRenderData.build("李四", "博士");

    RowRenderData row2 = RowRenderData.build("王五", "博士后");

    put("tables", new MiniTableRenderData(header, Arrays.asList(row0, row1, row2)));

    //自定义有序列表

    put("testText", new NumbericRenderData(NumbericRenderData.FMT_DECIMAL, new ArrayList() {

    {

    add(new TextRenderData("Plug-in grammar"));

    add(new TextRenderData("Supports word text, header..."));

    add(new TextRenderData("Not just templates, but also style templates"));

    }

    }));

    //网落图片

    put("picture", new PictureRenderData(200, 150, ".jpg", BytePictureUtils.getUrlBufferedImage("https://gss3.bdstatic.com/7Po3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike116%2C5%2C5%2C116%2C38/sign=61c551093f6d55fbd1cb7e740c4b242f/d8f9d72a6059252d937820d3369b033b5ab5b9fd.jpg")));

    //本地图片

    put("picture2", new PictureRenderData(200, 150, ".jpg", BytePictureUtils.getLocalByteArray(new File(workPath + "c1.jpg"))));

    }

    };

    generateWord(datas, workPath + templateName, workPath);

    }

    /**

    * 通过word模板并生成word文档

    *

    * @param paramData    参数数据

    * @param templatePath word模板地址加模板文件名字

    * @param outFilePath  输出文件地址(不带文件名字)

    * @return 生成的word文件

    */

    public static File generateWord(Map paramData, String templatePath, String outFilePath) {

    String outFileName = "word_" + System.currentTimeMillis() + "_" + random.nextInt(100) + ".doc";

    return generateWord(paramData, templatePath, outFilePath, outFileName);

    }

    /**

    * 通过word模板并生成word文档

    *

    * @param paramData    参数数据

    * @param templatePath word模板地址加模板文件名字

    * @param outFilePath  输出文件地址(不带文件名字)

    * @param outFileName  输出文件名字

    * @return 生成的word文件

    */

    public static File generateWord(Map paramData, String templatePath, String outFilePath, String outFileName) {

    //判断输出文件路径和文件名是否含有指定后缀

    outFilePath = CommonUtil.addIfNoSuffix(outFilePath, "/", "\\");

    outFileName = CommonUtil.addIfNoSuffix(outFileName, ".doc", ".docx");

    //解析word模板

    XWPFTemplate template = XWPFTemplate.compile(templatePath).render(paramData);

    //输出文件

    FileOutputStream out = null;

    File outFile = new File(outFilePath + outFileName);

    try {

    out = new FileOutputStream(outFile);

    template.write(out);

    out.flush();

    } catch (IOException e) {

    log.error("生成word写入文件失败", e);

    } finally {

    if (template != null) {

    try {

    template.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    if (out != null) {

    try {

    out.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    return outFile;

    }

    展开全文
  • Java通过word模板导出word1.创建word模板文件,注意调整好格式,后期修改较为麻烦2.打开创建好的word模板,点击文件另存为,选择xml格式3.将生成的模板xml文件后缀改成ftl,例如:模板.xml-->模板.ftl4.在项目中...

    Java通过word模板导出word

    1.创建word模板文件,注意调整好格式,后期修改较为麻烦

    2.打开创建好的word模板,点击文件另存为,选择xml格式

    e0e73426e0d41fbe5db08e3603793375.png

    3.将生成的模板xml文件后缀改成ftl,例如:模板.xml-->模板.ftl

    4.在项目中引入freemarker依赖

    5.将模板.ftl文件放入项目resources下面的templates(自定义文件夹)

    6.编写代码程序。

    示例如下:

    public void exportReport(HttpServletResponse response) throws IOException, TemplateException {

    //map存储word需要的数据

    Map dataMap = new HashMap<>();

    //封装好的数据

    ReportDataDto dataForWord = getDataForWord(taskNo, isExport);

    //将数据指定key存储到map中

    dataMap.put("reportData", dataForWord);

    //配置对象

    Configuration configuration = new Configuration();

    //设置配置的字符编码为utf-8,避免字符集问题

    configuration.setDefaultEncoding("UTF-8");

    //获取resources下指定的文件夹路径,如果项目需要打成jar包,

    //此举很重要,别的方式可能无法获取到模板文件夹的相对路径

    configuration.setClassForTemplateLoading(this.getClass(), "/templates");

    // 获取模板实例,上行配置了模板文件所在路径

    Template t = configuration.getTemplate("模板.ftl", "utf-8");//以utf-8的编码读取ftl文件

    //设置响应类型为word

    response.setContentType("application/msword");

    //设置响应头,注意如果导出的word名含有汉字则需要将文件名

    //变成byte并且指定字符集为gbk,表示将GBK汉字转为byte

    //然后将其转为iso8859-1的字符串

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

    + new String(("导出报告").getBytes("GBK"), "iso8859-1") + "\"");

    //此句非常关键,不然word文档全是乱码

    response.setCharacterEncoding("utf-8");

    PrintWriter out = response.getWriter();

    //使用数据填充模板

    t.process(dataMap, out);

    //以流的输出到浏览器,即下载

    out.close();

    }

    复制代码

    7.使用freemarker标签对模板.ftl文件进行数据渲染,例如:

    740b1e4955dc23f77d374a35a5d7b0d5.png

    tip:

    1.

    代表xml的段落,代表行,代表文本内容

    2.对于word中存在图片的情况,生成的模板.ftl将有这样一部分:

    9f1b6a4b52b93eb063f23eb7cedd4a5b.png

    找到 ${photo.zposs}

    标签,将里面的base64替换为${图片的base64}

    需要先将图片转为base64,下面提供一种方式

    public class Base64Util {

    /**

    *通过图片的URL转为base64

    */

    public static String getBase64ByImgUrl(String url){

    String suffix = url.substring(url.lastIndexOf(".") + 1);

    try {

    URL urls = new URL(url);

    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    Image image = Toolkit.getDefaultToolkit().getImage(urls);

    BufferedImage biOut = toBufferedImage(image);

    ImageIO.write(biOut, suffix, baos);

    String base64Str = encodeImage(baos.toByteArray());

    return base64Str;

    } catch (Exception e) {

    e.printStackTrace();

    return null;

    }

    }

    /**

    * 图片转字符串

    * @param image

    * @return

    */

    public static String encodeImage(byte[] image){

    BASE64Encoder decoder = new BASE64Encoder();

    return replaceEnter(decoder.encode(image));

    }

    }

    复制代码

    注意:

    1.使用frermarker标签时,尽量对数据做非空判断,避免出错

    2.如果模板一开始样式不对,可以在后来在模板中修改好样式,重新另存为xml文件,然后到ftl文件中找到此内容,替换

    展开全文
  • 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

    展开全文
  • 展开全部先下载jacob_1.10.1.zip。解压后将jacob.dll放到windows/system32下面或\j2.../** Java2word.java** Created on 2007年8月13日, 上午10:32** Tochange this template, choose Tools | Template Manager* and...

    展开全部

    先下载jacob_1.10.1.zip。

    解压后将jacob.dll放到windows/system32下面或\j2sdk\bin下面。

    将jacob.jar加入项目。

    /*

    * Java2word.java

    *

    * Created on 2007年8月13日, 上午10:32

    *

    * To

    change this template, choose Tools | Template Manager

    * and open the template

    in the editor.

    */

    /*

    * 传入数据为HashMap对象,32313133353236313431303231363533e78988e69d8331333337396261对象中的Key代表word模板中要替换的字段,Value代表用来替换的值。

    *

    word模板中所有要替换的字段(即HashMap中的Key)以特殊字符开头和结尾,如:$code$、$date$……,

    以免执行错误的替换。

    *

    所有要替换为图片的字段,Key中需包含image或者Value为图片的全路径(目前只判断文件后缀名为:.bmp、

    .jpg、.gif)。

    *

    要替换表格中的数据时,HashMap中的Key格式为“table$R@N”,其中:R代表从表格的第R行开始替换,N代表

    word模板中的第N张表格;Value为ArrayList对象,ArrayList中包含的对象统一为String[],一条String[]代

    表一行数据,ArrayList中第一条记录为特殊记录,记录的是表格中要替换的列号,如:要替换第一列、第三列、

    第五列的数据,则第一条记录为String[3]

    {“1”,”3”,”5”}。

    */

    package com.word.util;

    /**

    *

    * @author kdl

    */

    import java.util.ArrayList;

    import

    java.util.HashMap;

    import java.util.Iterator;

    import com.jacob.activeX.ActiveXComponent;

    import

    com.jacob.com.Dispatch;

    import com.jacob.com.Variant;

    public class Java2word {

    private boolean saveOnExit;

    /**

    * word文档

    */

    Dispatch doc = null;

    /**

    * word运行程序对象s

    */

    private ActiveXComponent

    word;

    /**

    * 所有word文档

    */

    private Dispatch

    documents;

    /**

    * 构造函数

    */

    public Java2word() {

    if(word==null){

    word = new

    ActiveXComponent("Word.Application");

    word.setProperty("Visible",new

    Variant(false));

    }

    if(documents==null)

    documents = word.getProperty("Documents").toDispatch();

    saveOnExit =

    false;

    }

    /**

    * 设置参数:退出时是否保存

    * @param

    saveOnExit boolean true-退出时保存文件,false-退出时不保存文件

    */

    public void

    setSaveOnExit(boolean saveOnExit) {

    this.saveOnExit =

    saveOnExit;

    }

    /**

    * 得到参数:退出时是否保存

    * @return

    boolean true-退出时保存文件,false-退出时不保存文件

    */

    public boolean

    getSaveOnExit() {

    return saveOnExit;

    }

    /**

    * 打开文件

    * @param inputDoc String 要打开的文件,全路径

    *

    @return Dispatch 打开的文件

    */

    public Dispatch open(String inputDoc)

    {

    return

    Dispatch.call(documents,"Open",inputDoc).toDispatch();

    //return

    Dispatch.invoke(documents,"Open",Dispatch.Method,new Object[]{inputDoc},new

    int[1]).toDispatch();

    }

    /**

    * 选定内容

    *

    @return Dispatch 选定的范围或插入点

    */

    public Dispatch select()

    {

    return word.getProperty("Selection").toDispatch();

    }

    /**

    * 把选定内容或插入点向上移动

    * @param selection

    Dispatch 要移动的内容

    * @param count int 移动的距离

    */

    public

    void moveUp(Dispatch selection,int count) {

    for(int i = 0;i <

    count;i ++)

    Dispatch.call(selection,"MoveUp");

    }

    /**

    * 把选定内容或插入点向下移动

    * @param selection

    Dispatch 要移动的内容

    * @param count int 移动的距离

    */

    public

    void moveDown(Dispatch selection,int count) {

    for(int i = 0;i <

    count;i ++)

    Dispatch.call(selection,"MoveDown");

    }

    /**

    * 把选定内容或插入点向左移动

    * @param selection

    Dispatch 要移动的内容

    * @param count int 移动的距离

    */

    public

    void moveLeft(Dispatch selection,int count) {

    for(int i = 0;i <

    count;i ++) {

    Dispatch.call(selection,"MoveLeft");

    }

    }

    /**

    * 把选定内容或插入点向右移动

    * @param

    selection Dispatch 要移动的内容

    * @param count int 移动的距离

    */

    public void moveRight(Dispatch selection,int count) {

    for(int i =

    0;i < count;i ++)

    Dispatch.call(selection,"MoveRight");

    }

    /**

    *

    把插入点移动到文件首位置

    * @param selection Dispatch 插入点

    */

    public

    void moveStart(Dispatch selection) {

    Dispatch.call(selection,"HomeKey",new Variant(6));

    }

    /**

    * 从选定内容或插入点开始查找文本

    * @param selection Dispatch

    选定内容

    * @param toFindText String 要查找的文本

    * @return boolean

    true-查找到并选中该文本,false-未查找到文本

    */

    public boolean find(Dispatch

    selection,String toFindText) {

    //从selection所在位置开始查询

    Dispatch find = word.call(selection,"Find").toDispatch();

    //设置要查找的内容

    Dispatch.put(find,"Text",toFindText);

    //向前查找

    Dispatch.put(find,"Forward","True");

    //设置格式

    Dispatch.put(find,"Format","True");

    //大小写匹配

    Dispatch.put(find,"MatchCase","True");

    //全字匹配

    Dispatch.put(find,"MatchWholeWord","True");

    //查找并选中

    return Dispatch.call(find,"Execute").getBoolean();

    }

    /**

    * 把选定内容替换为设定文本

    * @param selection

    Dispatch 选定内容

    * @param newText String 替换为文本

    */

    public

    void replace(Dispatch selection,String newText) {

    //设置替换文本

    Dispatch.put(selection,"Text",newText);

    }

    /**

    * 全局替换

    * @param selection Dispatch

    选定内容或起始插入点

    * @param oldText String 要替换的文本

    * @param newText

    String 替换为文本

    */

    public void replaceAll(Dispatch

    selection,String oldText,Object replaceObj) {

    //移动到文件开头

    moveStart(selection);

    if(oldText.startsWith("table") ||

    replaceObj instanceof ArrayList)

    replaceTable(selection,oldText,(ArrayList) replaceObj);

    else

    {

    String newText = (String) replaceObj;

    if(newText==null)

    newText="";

    if(oldText.indexOf("image") != -1&!newText.trim().equals("") ||

    newText.lastIndexOf(".bmp") != -1 || newText.lastIndexOf(".jpg") != -1 ||

    newText.lastIndexOf(".gif") != -1){

    while(find(selection,oldText)) {

    replaceImage(selection,newText);

    Dispatch.call(selection,"MoveRight");

    }

    }else{

    while(find(selection,oldText))

    {

    replace(selection,newText);

    Dispatch.call(selection,"MoveRight");

    }

    }

    }

    }

    /**

    * 替换图片

    * @param

    selection Dispatch 图片的插入点

    * @param imagePath String 图片文件(全路径)

    */

    public void replaceImage(Dispatch selection,String imagePath)

    {

    Dispatch.call(Dispatch.get(selection,"InLineShapes").toDispatch(),"AddPicture",imagePath);

    }

    /**

    * 替换表格

    * @param selection Dispatch

    插入点

    * @param tableName String

    表格名称,形如table$1@1、table$2@1...table$R@N,R代表从表格中的第N行开始填充,N代表word文件中的第N张表

    * @param fields HashMap 表格中要替换的字段与数据的对应表

    */

    public void

    replaceTable(Dispatch selection,String tableName,ArrayList dataList)

    {

    if(dataList.size() <= 1) {

    System.out.println("Empty table!");

    return;

    }

    //要填充的列

    String[] cols = (String[])

    dataList.get(0);

    //表格序号

    String tbIndex =

    tableName.substring(tableName.lastIndexOf("@") + 1);

    //从第几行开始填充

    int fromRow =

    Integer.parseInt(tableName.substring(tableName.lastIndexOf("$") +

    1,tableName.lastIndexOf("@")));

    //所有表格

    Dispatch tables =

    Dispatch.get(doc,"Tables").toDispatch();

    //要填充的表格

    Dispatch table = Dispatch.call(tables,"Item",new

    Variant(tbIndex)).toDispatch();

    //表格的所有行

    Dispatch rows =

    Dispatch.get(table,"Rows").toDispatch();

    //填充表格

    for(int

    i = 1;i < dataList.size();i ++) {

    //某一行数据

    String[] datas = (String[]) dataList.get(i);

    //在表格中添加一行

    if(Dispatch.get(rows,"Count").getInt() < fromRow +

    i - 1)

    Dispatch.call(rows,"Add");

    //填充该行的相关列

    for(int j = 0;j < datas.length;j ++)

    {

    //得到单元格

    Dispatch cell =

    Dispatch.call(table,"Cell",Integer.toString(fromRow + i -

    1),cols[j]).toDispatch();

    //选中单元格

    Dispatch.call(cell,"Select");

    //设置格式

    Dispatch font = Dispatch.get(selection,"Font").toDispatch();

    Dispatch.put(font,"Bold","0");

    Dispatch.put(font,"Italic","0");

    //输入数据

    Dispatch.put(selection,"Text",datas[j]);

    }

    }

    }

    /**

    * 保存文件

    * @param outputPath String

    输出文件(包含路径)

    */

    public void save(String outputPath) {

    Dispatch.call(Dispatch.call(word,"WordBasic").getDispatch(),"FileSaveAs",outputPath);

    }

    /**

    * 关闭文件

    * @param document Dispatch

    要关闭的文件

    */

    public void close(Dispatch doc) {

    Dispatch.call(doc,"Close",new Variant(saveOnExit));

    word.invoke("Quit",new Variant[]{});

    word = null;

    }

    /**

    * 根据模板、数据生成word文件

    * @param inputPath

    String 模板文件(包含路径)

    * @param outPath String 输出文件(包含路径)

    * @param

    data HashMap 数据包(包含要填充的字段、对应的数据)

    */

    public void toWord(String

    inputPath,String outPath,HashMap data) {

    String oldText;

    Object newValue;

    try {

    if(doc==null)

    doc = open(inputPath);

    Dispatch selection =

    select();

    Iterator keys =

    data.keySet().iterator();

    while(keys.hasNext())

    {

    oldText = (String) keys.next();

    newValue = data.get(oldText);

    replaceAll(selection,oldText,newValue);

    }

    save(outPath);

    } catch(Exception

    e) {

    System.out.println("操作word文件失败!");

    e.printStackTrace();

    } finally {

    if(doc !=

    null)

    close(doc);

    }

    }

    本回答由电脑网络分类达人 李孝忠推荐

    2Q==

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    展开全文
  • 1、word模板文件处理,如下图所示在word 文档中填值的地方写入占位变量2、将word文档另存为xml文件、编辑如下图,找到填写的占位,修改为${bcrxm}格式3、将文件后缀名改为.ftl文件4、java处理过程 、 引入frameMark jar...
  • * 所有要替换为图片的字段,Key中需包含image或者Value为图片的全路径(目前只判断文件后缀名为:.bmp、 .jpg、.gif)。 * 要替换表格中的数据时,HashMap中的Key格式为“table$R@N”,其中:R代表从表格的第R行...
  • Word模板更改

    2020-02-19 11:20:02
    使用word时,设置好各种样式库等功能之后,如果这个word以后经常使用,可以将其设置为word模板,这样,以后每次新建word时,直接就可以使用模板的样式库等功能,基本原理就是把原有的模板给替换掉: 首先,我们需要...
  • java 根据word模板生成word 文档先下载jacob_1.10.1.zip。解压后将jacob.dll放到windows/system32下面或\j2sdk\bin下面。将jacob.jar加入项目。/** Java2word.java** To change this template, choose Tools | ...
  • 正好公司要求生成word形式的合同,而且是以模板的形式。这下子就不能用纯生的PHP去写了,网上也有很多纯生PHP去写,但是流程很多,代码也很多,小白的我肯定是能偷懒则偷懒,找到了一个通用的三方库(用composer自动...
  • 如果想生成一个叫TJ君真棒.docx的文档,并且在文档里包含文本{{title}},只需要一句代码,这句代码也是整个引擎的核心所在: //核心API采用了极简设计,只需要一行代码 XWPFTemplate.compile("TJ君真棒.docx")....
  • 修改word模板 这里用到了freemarker这个框架,当然这只是此框架的微不足道的一个功能 原理很简单,就是此框像很多web模板框架一样,根据预先定义的标志位(${ID}) ,然后将键为ID的 字符串填充进去。 你需要先将你的...
  • Java实现freemarker生成word模板

    千次阅读 2017-06-29 15:15:31
     本文要介绍的就是如何生成模板,并将从源文件截取的内容填充到模板文件(即生成目标文件)的过程,读取源文件内容的方法请阅读博主另一篇文章《Java实现poi方式读取word文件内容》。 1.准备工作  jar包----------...
  • java利用word模板生成word文件(SpringBoot可以使用)
  • WORD模板使用技巧一点通.docxWORD模板使用技巧一点通●文/图翁永平大家知道,Word提供了各式各样的模 板,当在制作专业的文档之前,看看有没有现成的模板可用,如果答案是肯定的, 那么就发挥“拿来主义”的精神吧,...
  • java根据word模板生成word文件

    千次阅读 2020-07-30 10:30:45
    1、首先新建一个word模板, 2、另存为xml格式, 3、将xml文件的扩展名直接改成ftl, 4、导入freemaker.jar 2、使用软件打开ftl文件,找到w:binData快速定位图片位置,写上${imgStr}(名字随意,和java代码中的对应...
  • /*** 传入数据为HashMap对象,对象中的Key代表word模板中要替换的字段。...* 全部要替换为图片的字段,Key中需包括image或者Value为图片的全路径* (眼下仅仅推断文件后缀名为:.bmp、.jpg、.gif...
  • 最近在实际工作中遇到的一个情况是,每个月固定时间要报送一批文档,文档的内容相似,有固定的模板,我这么懒的人肯定要想一个一劳永逸的办法。下面把搜索发现的情况记录一下,以备以后需要。Python有个叫做docx-...
  • word模板以xml格式另存一份,得到xml格式模板 在xml 文件中,使用freemark标签,替换一些自定义值 使用freemark 解析xml ,输出到.doc 文件  在处理的时候要把文件后缀改成.ftl格式 获得自定义内容的word文件...
  • JAVA使用POI-TL通过Word模板生成Word文件

    万次阅读 多人点赞 2018-08-15 16:04:24
    技术背景 很多时候我们网站或者系统需要提供一些word文件,例如证明.docx或者订单....这里主要讲解如何通过一个制作好的word模板文件,通过数据填充,生成加工好的word文件。 官方网站 http://deepoove.com/...
  • 在复杂word文档场景下,使用模板引擎是比POI、easypoi更优的解决方案
  • 使用word模板生成word文档的各类方案生成word的各种方案word另存xml进行后续处理2003版本word(.doc)的xml处理并生成word2007版本word(.docx)的xml处理poi直接操作word对象进行文本替换生成word使用poi-tl库对模板...
  • java操作word书签生成word模板(不用jar包)最近有个需求,在word模板文档上设置书签,然后从数据库中查询数据,填充到word 文档书签位置,刚拿到需求时,使劲在网上找资料。幻想第三方jar包,帮我实现。有Apatch 的POI...
  • java实现word模板导出

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

    2020-08-28 20:21:11
    Word模板注入攻击 0x00 工具准备 phishery:https://github.com/ryhanson/phishery/releases office版本:office 2010 0x01 什么是Word模板注入攻击 Word模板注入攻击就是利用Word文档加载附加模板时的缺陷所发起的...
  • 关于用Java编写生成word文档,动态添加数据到word文档的一些心得,经过翻阅了无数...首先我们的需求是通过一个指定的word模板来生成新的word并且填充内容,内容是我们在布局页面上面就写好的,比如说EditText,TextView
  • java poi 之 word 模板导出(1)

    万次阅读 热门讨论 2018-08-02 17:32:57
    首先百科一下POI是什么: Apache POI是Apache软件基金会的开放源码函式库,POI提供API...下面不废话了,直接总结一下,java 用模板导出 word 的方法。目前项目中我用到的方法分为两种(今天先说第一种)。 1.使用...
  • 使用freemarker技术,首先将word模板另存为xml文档,方便填充数据。然后将后缀名改为ftl,简单方便.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,113
精华内容 10,045
关键字:

word模板后缀名