POI-tl 知识整理:整理2 -> 标签

1 文本标签

{{var}}

数据模型:

  • String :文本

  • TextRenderData :有样式的文本

  • HyperlinkTextRenderData :超链接和锚点文本

  • Object :调用 toString() 方法转化为文本

代码示例:

    @Test
    public void testTextLabel() throws Exception{
        Student student = new Student();
        student.setName("小蟹");
        student.setAge(20);
        student.setSex("男");

        XWPFTemplate template = XWPFTemplate.compile("D:\\Idea-projects\\POI_word\\templates2.docx");

        Map<String, Object> map = new HashMap<>();
        map.put("name",new TextRenderData("Eff000", student.getName()));
        map.put("link", new HyperlinkTextRenderData("链接", "http://www.baidu.com") );
        map.put("anchor", new HyperlinkTextRenderData("回到最顶端", "anchor: appendix1"));

        XWPFTemplate render = template.render(map);

        FileOutputStream fileOutputStream = new FileOutputStream("D:\\Idea-projects\\POI_word\\output_object.docx");
        template.writeAndClose(fileOutputStream);

        template.close();  // 一定要记得关闭
    }

 链式代码示例:

    @Test
    public void testTextLabel() throws Exception{

        Student student = new Student();
        student.setName("小蟹");
        student.setAge(20);
        student.setSex("男");

        XWPFTemplate template = XWPFTemplate.compile("D:\\Idea-projects\\POI_word\\templates2.docx");

        Map<String, Object> map = new HashMap<>();

        /*
        * 可以使用链式写法:
        * */
        // 可以通过这种方式设置样式,在下方可以直接get对应的样式
        //Style style = new Style();
        //style.setStrike(true);
        //style.setUnderlinePatterns(UnderlinePatterns.SINGLE);
        //style.setVertAlign(String.valueOf(VerticalAlign.SUPERSCRIPT));

        map.put("name", Texts.of(student.getName()).color("FF0000").bold().fontSize(20).fontFamily("楷体").italic().create());
        map.put("link", Texts.of("链接").color("FF0000").link("http://bilibili.com").create());
        map.put("anchor", Texts.of("回到最顶端").color("8E6000").italic().anchor("anchor: appendix1").create());
        XWPFTemplate render = template.render(map);

        FileOutputStream fileOutputStream = new FileOutputStream("D:\\Idea-projects\\POI_word\\output_object.docx");
        template.writeAndClose(fileOutputStream);

        template.close();  // 一定要记得关闭
    }

运行结果:

2 图片标签

图片标签以@开始:{{@var}}

数据模型:

  • String :图片url或者本地路径,默认使用图片自身尺寸

  • PictureRenderData

  • ByteArrayPictureRenderData

  • FilePictureRenderData

  • UrlPictureRenderData

推荐使用工厂 Pictures 构建图片模型。

示例代码:

    @Test
    public void testImgLabel() throws Exception{

        XWPFTemplate template = XWPFTemplate.compile("D:\\Idea-projects\\POI_word\\templates_imgs.docx");

        Map<String, Object> map = new HashMap<>();

        // 1. 指定本地路径图片
        map.put("img", "D:\\Idea-projects\\POI_word\\girl1.jpg");
        // 2. 指定在线图片
        map.put("girlOnline", "https://c-ssl.duitang.com/uploads/blog/202108/21/20210821132505_66c30.jpg");
        // 3.指定本地路径图片, 并设置大小
        map.put("imgSize", Pictures.ofLocal("D:\\Idea-projects\\POI_word\\girl3.jpg").size(100, 100).create());

        // 4. 图片流
        map.put("StreamImg", Pictures.ofStream(new FileInputStream("D:\\Idea-projects\\POI_word\\girl1.jpg"), PictureType.JPEG)
                .size(300, 250).create());


        // 5. 网络图片(注意网络耗时对系统可能的性能影响)
        map.put("urlImg", Pictures.ofUrl("https://c-ssl.duitang.com/uploads/blog/202108/21/20210821132505_66c30.jpg")
                .size(300, 250).create());


        // 6. java图片
        BufferedImage bufferImage = new BufferedImage(300, 250, BufferedImage.TYPE_INT_RGB);

        // 首先需要填充 bufferImage(这一部分根据自身需要展示的图,填充bufferImage)
        // 获取 Graphics2D 对象
        Graphics2D g2d = bufferImage.createGraphics();

        // 绘制红色背景
        g2d.setColor(Color.RED);
        g2d.fillRect(0, 0, bufferImage.getWidth(), bufferImage.getHeight());

        // 绘制黑色文本
        g2d.setColor(Color.BLACK);
        g2d.setFont(new Font("Arial", Font.BOLD, 20));
        ((Graphics2D) g2d).drawString("Hello World!", 50, 120);

        // 释放 Graphics2D 对象资源
        g2d.dispose();

        map.put("buffered_image", Pictures.ofBufferedImage(bufferImage, PictureType.JPEG)
                .size(300, 250).create());
        XWPFTemplate render = template.render(map);

        FileOutputStream fileOutputStream = new FileOutputStream("D:\\Idea-projects\\POI_word\\output_img.docx");
        template.writeAndClose(fileOutputStream);

        template.close();  // 一定要记得关闭
    }

3 表格标签

表格标签以#开始:{{#var}}

数据模型: 

·TableRenderData

推荐使用工厂 Tables 、 Rows 和 Cells 构建表格模型。

 

3.1 基础表格示例

    @Test
    public void testTableLabel() throws Exception{

        XWPFTemplate template = XWPFTemplate.compile("D:\\Idea-projects\\POI_word\\templates_table.docx");

        Map<String, Object> map = new HashMap<>();

        // 推荐使用工厂 Tables 、 Rows 和 Cells 构建表格模型。

        // 1. 基础表格示例
        TableRenderData tableRenderData = Tables.of(new String[][]{
                new String[]{"00", "01"},
                new String[]{"10", "11"},
        }).border(BorderStyle.DEFAULT).create();

        map.put("table0", tableRenderData);

        XWPFTemplate render = template.render(map);

        FileOutputStream fileOutputStream = new FileOutputStream("D:\\Idea-projects\\POI_word\\output_table.docx");
        template.writeAndClose(fileOutputStream);

        template.close();  // 一定要记得关闭
    }

3.2 表格样式示例

    @Test
    public void testTableLabel() throws Exception{

        XWPFTemplate template = XWPFTemplate.compile("D:\\Idea-projects\\POI_word\\templates_table.docx");

        Map<String, Object> map = new HashMap<>();

        // 推荐使用工厂 Tables 、 Rows 和 Cells 构建表格模型。

 
        // 2. 表格样式示例
        RowRenderData row0 = Rows.of("姓名", "学历").textColor("FFFFFF").textBold().bgColor("4472C4")
                .center().rowExactHeight(3.0).create();
        RowRenderData row1 = Rows.create("张三", "本科");
        RowRenderData row2 = Rows.create("李四", "硕士");
        TableRenderData tableRenderData1 = Tables.create(row0, row1, row2);
        map.put("table1", tableRenderData1);

        XWPFTemplate render = template.render(map);

        FileOutputStream fileOutputStream = new FileOutputStream("D:\\Idea-projects\\POI_word\\output_table.docx");
        template.writeAndClose(fileOutputStream);

        template.close();  // 一定要记得关闭
    }

3.3 表格合并示例

    @Test
    public void testTableLabel() throws Exception{

        XWPFTemplate template = XWPFTemplate.compile("D:\\Idea-projects\\POI_word\\templates_table.docx");

        Map<String, Object> map = new HashMap<>();

        // 推荐使用工厂 Tables 、 Rows 和 Cells 构建表格模型。

        // 可以通过这种方式设置单元格样式
        CellStyle cellStyle = new CellStyle();
        cellStyle.setBackgroundColor("006400");
        // 3. 表格合并示例
        RowRenderData row3 = Rows.of("列0", "列1", "列2").center().bgColor(cellStyle.getBackgroundColor()).create();
        RowRenderData row4 = Rows.create("没有数据", null, null);

        //来指定合并规则
        //这里的 (1, 0) 表示第一行第一列的单元格,(1, 2) 表示第一行第三列的单元格
        MergeCellRule rule = MergeCellRule.builder().map(
                MergeCellRule.Grid.of(1, 0), MergeCellRule.Grid.of(1, 2)).build();
        //将合并规则应用到表格中
        TableRenderData tableRenderData2 = Tables.of(row3, row4).mergeRule(rule).create();
        map.put("table2", tableRenderData2);

        XWPFTemplate render = template.render(map);

        FileOutputStream fileOutputStream = new FileOutputStream("D:\\Idea-projects\\POI_word\\output_table.docx");
        template.writeAndClose(fileOutputStream);

        template.close();  // 一定要记得关闭
    }

4 列表标签

列表标签以*开始:{{*var}}

数据模型:

  • List<String>

  • NumberingRenderData

推荐使用工厂 Numberings 构建列表模型。

代码示例:

    @Test
    public void testListLabel() throws Exception{

        XWPFTemplate template = XWPFTemplate.compile("D:\\Idea-projects\\POI_word\\templates_list.docx");

        Map<String, Object> map = new HashMap<>();

        //推荐使用工厂 Numberings 构建列表模型
        NumberingRenderData numberingRenderData = Numberings.of(LOWER_ROMAN)  // 可以有多种有序、无序编号方式
                .addItem("列表1")
                .addItem("列表2")
                .addItem("列表2")
                .create();
        map.put("list", numberingRenderData);

        XWPFTemplate render = template.render(map);

        FileOutputStream fileOutputStream = new FileOutputStream("D:\\Idea-projects\\POI_word\\output_list.docx");
        template.writeAndClose(fileOutputStream);

        template.close();  // 一定要记得关闭
    }

运行结果:

5 区块对标签

区块对由前后两个标签组成,开始标签以?标识,结束标签以/标识:{{?sections}}{{/sections}}

5.1 False 或 空集合

如果区块对的值是 null 、false 或者空的集合,位于区块中的所有文档元素将不会显示,这就等同于if语句的条件为 false。

5.2 非False 且不是集合

如果区块对的值不为 null 、 false ,且不是集合,位于区块中的所有文档元素会被渲染一次,这就等同于if语句的条件为 true。

    @Test
    public void testSectionLabel() throws Exception{

        XWPFTemplate template = XWPFTemplate.compile("D:\\Idea-projects\\POI_word\\templates_section.docx");

        Map<String, Object> map = new HashMap<>();

        HashMap<String, HashMap<String, String>> data = new HashMap<>();
        HashMap<String, String> dataMin = new HashMap<>();
        dataMin.put("name", "xiexu");
        data.put("person", dataMin);
        map.put("person",data.get("person"));

        XWPFTemplate render = template.render(map);

        FileOutputStream fileOutputStream = new FileOutputStream("D:\\Idea-projects\\POI_word\\output_section.docx");
        template.writeAndClose(fileOutputStream);

        template.close();  // 一定要记得关闭
    }

 

5.3 非空集合

如果区块对的值是一个非空集合,区块中的文档元素会被迭代渲染一次或者N次,这取决于集合的大小,类似于foreach语法。

6 嵌套标签

嵌套又称为导入、包含或者合并,以+标识:{{+var}}

数据模型:

·DocxRenderData

推荐使用工厂 Includes 构建嵌套模型。

代码示例:

public class AddrModel {
    public String addr;

    public AddrModel(String addr) {
        this.addr = addr;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }
}

    @Test
    public void testQiantaoLabel() throws Exception{

        XWPFTemplate template = XWPFTemplate.compile("D:\\Idea-projects\\POI_word\\templates_Qiantao.docx");

        Map<String, Object> map = new HashMap<>();

        ArrayList<AddrModel> list = new ArrayList<>();

        list.add(new AddrModel("Beijing,China"));
        list.add(new AddrModel("Shanghai,China"));


        map.put("nested", Includes.ofLocal("D:\\Idea-projects\\POI_word\\sub.docx").setRenderModel(list).create());

        XWPFTemplate render = template.render(map);

        FileOutputStream fileOutputStream = new FileOutputStream("D:\\Idea-projects\\POI_word\\output_Qiantao.docx");
        template.writeAndClose(fileOutputStream);

        template.close();  // 一定要记得关闭
    }

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/321077.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Brc20钱包横评推荐:谁更适合玩铭文?

加密货币的世界越来越热闹&#xff0c;新的创意层出不穷&#xff01;最近&#xff0c;BRC-20 通证标准成了这个圈子的新宠儿&#xff0c;这是在比特币网络上诞生的一种超酷的新型可替代通证。和以太坊的 ERC-20 通证一样牛&#xff0c;但 BRC-20 通证是 Ordinals 协议的杰作&am…

spring boot application yaml key下划线如何转java的Properties对象字段驼峰

spring boot yaml key和value如何映射到Properties对象 下面以MybatisPlusProperties为例 ##java properties 字段驼峰 ##yaml文件如图&#xff0c;key使用下划线 ##java对象驼峰转下划线匹配yaml文件key DataObjectPropertyName.toDashedForm(name);//驼峰转下划线 ##设置P…

ES自动补全

安装IK分词器 要实现根据字母做补全&#xff0c;就必须对文档按照拼音分词。在GitHub上恰好有elasticsearch的拼音分词插件。地址&#xff1a;GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin is used to do conversion between Chinese characte…

【神经网络算子】

神经网络算子(1)——DeepONet介绍 AI与PDE&#xff08;三&#xff09;&#xff1a;大概是最好懂的DeepONet模型解析 算子把函数映射为函数。 输入函数u&#xff0c;在固定的sensors上&#xff1a;x_1,x_2,…,x_m。即u(x_i)和y。 输出函数G(u)&#xff0c;在随机的y上。即G(u)(…

HUAWEI华为MateStation S台式机电脑12代PUC-H7621N,H5621N原装出厂Windows11.22H2系统

链接&#xff1a;https://pan.baidu.com/s/1QtjLyGTwMZgYiBO5bUVPYg?pwd8mx0 提取码&#xff1a;8mx0 原厂WIN11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、华为电脑管家等预装程序 文件格式&#xff1a;esd/wim/swm 安装方式&#xf…

大模型实战05——LMDeploy大模型量化部署实践

大模型实战05——LMDeploy大模型量化部署实践 1、大模型部署背景 2、LMDeploy简介 3、动手实践环节——安装、部署、量化 注 笔记内容均为截图 笔记课程视频地址&#xff1a;https://www.bilibili.com/video/BV1iW4y1A77P/?spm_id_from333.788&vd_source2882acf8c823ce…

Costco攻入山姆大本营

01 Costco深圳店开业火爆 “我今天不去Costco&#xff0c;早上还没开业&#xff0c;路上就已经堵车了&#xff0c;看来今天人很多&#xff0c;过几天再去”&#xff0c;原本计划在Costco开业当天去逛逛的张芸&#xff08;化名&#xff09;无奈只能放弃。 家住在Costco深圳店旁…

基于Java SSM框架实现医院管理系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现医院管理系统演示 SSM框架 当今流行的“SSM组合框架”是Spring SpringMVC MyBatis的缩写&#xff0c;受到很多的追捧&#xff0c;“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架&#xff0c;通常更简单的数据源。Spring属于…

【算法】了解哈希表/思想 并用哈希解算法题(C++)

文章目录 基本了解解题1.两数之和面试题01.02.判定是否互为字符重排217.存在重复元素219.存在重复元素II49.字母异位词分组 基本了解 哈希表是什么&#xff1f; 一种数据结构&#xff0c;用于存储元素。 有什么用&#xff1f; 用于快速查找元素 与 插入 何时用哈希表&…

最大公约数和最小公倍数

1. 最大公约数 给定两个整数&#xff0c;求这两个数的最大公约数 暴力求解&#xff1a; 从较小的那个数开始&#xff0c;依次递减&#xff0c;直到某个数能够同时被整除 //暴力求解 int main() {int a 0;int b 0;scanf("%d %d", &a, &b);int i 0;int min …

Matlab深度学习进行波形分割(二)

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 &#x1f510;#### 防伪水印——左手の明天 ####&#x1f510; &#x1f497; 大家…

三、ngxin虚拟主机

目录 什么是nginx虚拟主机修改端口 访问页面1、配置nginx.config 文件2、 添加配置给目录中写入内容检测nginx 是否有语法错误&#xff08;nginx -t&#xff09;重启 nginx查看配置结果 不同主机网卡 查看到不同的页面先添加一个临时ip修改ngixn配置文件创建目录文件检测nginx …

聊聊websocket那些事

前端必备工具推荐网站(免费图床、API和ChatAI等实用工具): http://luckycola.com.cn/ 一、什么是websocket? WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议。 它是 HTML5 中的一种新特性&#xff0c;能够实现 Web 应用程序和服务器之间的实时通信&#xff0c;…

C++PythonC# 三语言OpenCV从零开发(1):环境配置

文章目录 前言课程选择环境配置PythonC#COpenCV官网下载新建C项目测试运行Csharp版Python版 gitee仓库总结 前言 由于老王我想转机器视觉方向的上位机行业&#xff0c;我就打算开始从零学OpenCV。但是目前OpenCV有两个官方语言&#xff0c;C和Pyhont。C# 有大佬做了对应的Open…

数据结构——顺序二叉树——堆

1.树的相关概念 在介绍二叉树之前&#xff0c;我们首先要明确树是什么。 树用我们的通常认识来判断应该是一种植物&#xff0c;从根向上生长&#xff0c;分出许多的树枝并长出叶子。对于数据结构中的树而言&#xff0c;其结构也正是从树的特征中剥离出来的。树结构是一种非线性…

8 - MySQL数据读写分离|MySQL多实例

MySQL数据读写分离&#xff5c;MySQL多实例 MySQL数据读写分离数据读写分离如何实现数据的读写分离提供数据读写分离服务的软件&#xff08;中间件&#xff09;maxscale 软件提供的读写分离服务的工作过程配置数据读写分离结构 提供数据存储服务 MySQL多实例 MySQL数据读写分离…

[NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< ​全文 6000 字 内容摘要 NAND Flash 引脚功能 读操作步骤 NAND Flash中的特殊硬件结构 NAND Flash 读写时的数据流向 Read 操作时序 读时序操作过…

求斐波那契数列矩阵乘法的方法

斐波那契数列 先来简单介绍一下斐波那契数列&#xff1a; 斐波那契数列是指这样一个数列&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34&#xff0c;55&#xff0c;89……这个数列从第3项开始 &…

webstorm最新版 激活 成功了

使用webstorm开发工具 很完美&#xff0c;第一次用webstorm IDE 开发工具就完美的激活了&#xff0c;你也不妨试试 链接地址&#xff1a;http://mano100.cn/thread-1942-1-1.html 激活后如下

DM数据库安装注意事项

数据库安装注意事项 一、安装前 一些参数需要在数据库创建实例前找用户确认。 参数名参数掩码参数值备注数据页大小PAGE_SIZE32数据文件使用的页大小(缺省使用8K&#xff0c;建议默认&#xff1a;32)&#xff0c;可以为 4K、8K、16K 或 32K 之一&#xff0c;选择的页大小越大…