Java Word工具类--之Gradle项目创建

废话不多说,导入如下2个依赖,冲冲冲......

maven或者gradle依赖下载中心      https://mvnrepository.com/

    implementation group: 'com.lowagie', name: 'itext', version: '2.1.7'
    implementation group: 'com.lowagie', name: 'itext-rtf', version: '2.1.7'

工具类正文

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.lowagie.text.*;
import com.lowagie.text.Font;
import com.lowagie.text.rtf.RtfWriter2;
import com.soe.family.redis.dto.TableDto;
import com.soe.family.redis.dto.TextDto;
import com.soe.family.redis.dto.WordContent;


import java.awt.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 生成word工具类
 * 1、可扩展,word一般有表格【table】、文本【text】、图片【picture】等几种形式
 * 2、以流的方式传递文件【数据】
 * 3、
 */
public class CreateDocUtil {

//    private static Logger log = Logger.getLogger(CreateDocUtil.class);

    public static void createDocument(String filePath, String fileName, List<WordContent> datas){
        // 输出文件
        File outFile = new File(filePath + File.separator + fileName + ".doc");
        // 如果输出目标文件夹不存在,则创建
        if (!outFile.getParentFile().exists()) {
            outFile.getParentFile().mkdirs();
        }

        //创建Word文件,设置纸张的大小
        Document document = new Document(PageSize.A4);
        try {
            //创建word文档
            RtfWriter2.getInstance(document,new FileOutputStream(outFile));
            //打开文档
            document.open();

            if (!datas.isEmpty()) {
                for (WordContent data : datas) {
                    JSONObject jsonObject = JSONUtil.parseObj(data);

                    String textJson = jsonObject.getStr("text");
                    String tableJson = jsonObject.getStr("table");
                    if (textJson != null) {
                        //如果有标题就创建标题
                        if (data.getText().getTitle() != null) {
                            Paragraph header = new Paragraph(data.getText().getTitle(), new Font(Font.NORMAL, 13, Font.BOLD, new Color(0, 0, 0)));
                            header.setAlignment(Element.ALIGN_CENTER);
                            //写入标题
                            document.add(header);
                        }
                        //创建段落 NORMAL正常
                        Paragraph paragraph = new Paragraph(data.getText().getContent(), new Font(Font.NORMAL, 11, Font.NORMAL, new Color(0, 0, 0)));
                        //设置段落为左对齐
                        paragraph.setAlignment(Element.ALIGN_LEFT);
                        //设置首行缩进
                        paragraph.setFirstLineIndent(20);
                        //写入段落
                        document.add(paragraph);
                    }
                    if (tableJson != null) {
                        String[] header = data.getTable().getHeader();
                        String[][] infos = data.getTable().getInformation();
                        //创建多个表格
                        Table aTable = new Table(header.length);
/*                      aTable.setTableFitsPage(true);
                        aTable.setCellsFitPage(true);
                        aTable.setLastHeaderRow(10);
                        aTable.setOffset(5);
                        aTable.setAutoFillEmptyCells(true);*/
                        aTable.setAlignment(4);
                        for (String head : header) {
                            //把表格上方的标题创建出来
                            aTable.addCell(new Cell(head));
                        }
                        //把数据填写到表格中,只要够了表格数量会自动换行
                        for (String[] info : infos) {
                            for(String number : info) {
                                aTable.addCell(new Cell(number));
                            }
                        }
                        document.add(aTable);
                        document.add(new Paragraph("\n"));
                    }
                }
            }

            //关流
            document.close();
            System.out.println("输出成功!");
        } catch (FileNotFoundException | DocumentException e) {
            System.out.println("生成文档失败!");
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws FileNotFoundException {
        List<WordContent> datas = new ArrayList<>();
        WordContent wordContent = new WordContent();
        TextDto textDto = new TextDto();
        textDto.setTitle("我就是我,不一样的烟火!");
        textDto.setContent("壬戌之秋,七月既望,苏子与客泛舟游于赤壁之下。清风徐来,水波不兴。举酒属客,诵明月之诗,歌窈窕之章。少焉,月出于东山之上,徘徊于斗牛之间。白露横江,水光接天。" +
                "纵一苇之所如,凌万顷之茫然。浩浩乎如冯虚御风,而不知其所止;飘飘乎如遗世独立,羽化而登仙。\n 于是饮酒乐甚,扣舷而歌之。歌曰:“桂棹兮兰桨,击空明兮溯流光。渺渺兮予怀," +
                "望美人兮天一方。”客有吹洞箫者,倚歌而和之。其声呜呜然,如怨如慕,如泣如诉,余音袅袅,不绝如缕。舞幽壑之潜蛟,泣孤舟之嫠妇。 苏子愀然,正襟危坐而问客曰:“何为其然也?”客曰:" +
                "“月明星稀,乌鹊南飞,此非曹孟德之诗乎?西望夏口,东望武昌,山川相缪,郁乎苍苍,此非孟德之困于周郎者乎?方其破荆州,下江陵,顺流而东也,舳舻千里,旌旗蔽空,酾酒临江," +
                "横槊赋诗,固一世之雄也,而今安在哉?况吾与子渔樵于江渚之上,侣鱼虾而友麋鹿,驾一叶之扁舟,举匏樽以相属。寄蜉蝣于天地,渺沧海之一粟。哀吾生之须臾,羡长江之无穷。挟飞仙以遨游" +
                ",抱明月而长终。知不可乎骤得,托遗响于悲风。\n” 苏子曰:“客亦知夫水与月乎?逝者如斯,而未尝往也;盈虚者如彼,而卒莫消长也。盖将自其变者而观之,则天地曾不能以一瞬;自其不变者" +
                "而观之,则物与我皆无尽也,而又何羡乎!且夫天地之间,物各有主,苟非吾之所有,虽一毫而莫取。惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色,取之无禁,用之不竭,是造物者" +
                "之无尽藏也,而吾与子之所共适。”客喜而笑,洗盏更酌。肴核既尽,杯盘狼籍。相与枕藉乎舟中,不知东方之既白。 ");
        wordContent.setText(textDto);
        TableDto tableDto = new TableDto();
        tableDto.setHeader(new String[]{"项目类别", "实施方案", "规划环评", "大纲+报告书", "仅大纲", "报告书", "报告表", "补充报告", "补充报告书", "补充报告表"});
        tableDto.setInformation(new String[][]{
                new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9",""},
                new String[]{"我","是","最","优","秀","的","男","人","",""},
                new String[]{"我","特别","想","喜欢","一个","人",",","和她","相爱","到老去"}
        });
        wordContent.setTable(tableDto);
        datas.add(wordContent);
        WordContent wordContent2 = new WordContent();
        TextDto textDto2 = new TextDto();
        textDto2.setContent("时维九月,序属三秋。潦水尽而寒潭清,烟光凝而暮山紫。俨骖騑于上路,访风景于崇阿;临帝子之长洲,得天人之旧馆。层峦耸翠,上出重霄;飞阁流丹,下临无地。鹤汀凫渚,穷岛屿之萦回;桂殿兰宫,即冈峦之体势。\n" +
                "披绣闼,俯雕甍,山原旷其盈视,川泽纡其骇瞩。闾阎扑地,钟鸣鼎食之家;舸舰弥津,青雀黄龙之舳。云销雨霁,彩彻区明。落霞与孤鹜齐飞,秋水共长天一色。渔舟唱晚,响穷彭蠡之滨;雁阵惊寒,声断衡阳之浦。\n" +
                "遥襟甫畅,逸兴遄飞。爽籁发而清风生,纤歌凝而白云遏。睢园绿竹,气凌彭泽之樽;邺水朱华,光照临川之笔。四美具,二难并。穷睇眄于中天,极娱游于暇日。天高地迥,觉宇宙之无穷;兴尽悲来,识盈虚之有数。望长安于日下,目吴会于云间。地势极而南溟深,天柱高而北辰远。关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。怀帝阍而不见,奉宣室以何年?");
        wordContent2.setText(textDto2);
        datas.add(wordContent2);
        JSONArray objects = JSONUtil.parseArray(datas);
        System.out.println(objects);

        /**
         * [{
         * 	"text": {
         * 		"title": "我就是我,不一样的烟火!",
         * 		"content": "壬戌之秋,七月既望,苏子与客泛舟游于赤壁之下。清风徐来,水波不兴。举酒属客,诵明月之诗,歌窈窕之章。少焉,月出于东山之上,徘徊于斗牛之间。白露横江,水光接天。纵一苇之所如,凌万顷之茫然。浩浩乎如冯虚御风,而不知其所止;飘飘乎如遗世独立,羽化而登仙。\n 于是饮酒乐甚,扣舷而歌之。歌曰:“桂棹兮兰桨,击空明兮溯流光。渺渺兮予怀,望美人兮天一方。”客有吹洞箫者,倚歌而和之。其声呜呜然,如怨如慕,如泣如诉,余音袅袅,不绝如缕。舞幽壑之潜蛟,泣孤舟之嫠妇。 苏子愀然,正襟危坐而问客曰:“何为其然也?”客曰:“月明星稀,乌鹊南飞,此非曹孟德之诗乎?西望夏口,东望武昌,山川相缪,郁乎苍苍,此非孟德之困于周郎者乎?方其破荆州,下江陵,顺流而东也,舳舻千里,旌旗蔽空,酾酒临江,横槊赋诗,固一世之雄也,而今安在哉?况吾与子渔樵于江渚之上,侣鱼虾而友麋鹿,驾一叶之扁舟,举匏樽以相属。寄蜉蝣于天地,渺沧海之一粟。哀吾生之须臾,羡长江之无穷。挟飞仙以遨游,抱明月而长终。知不可乎骤得,托遗响于悲风。\n” 苏子曰:“客亦知夫水与月乎?逝者如斯,而未尝往也;盈虚者如彼,而卒莫消长也。盖将自其变者而观之,则天地曾不能以一瞬;自其不变者而观之,则物与我皆无尽也,而又何羡乎!且夫天地之间,物各有主,苟非吾之所有,虽一毫而莫取。惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色,取之无禁,用之不竭,是造物者之无尽藏也,而吾与子之所共适。”客喜而笑,洗盏更酌。肴核既尽,杯盘狼籍。相与枕藉乎舟中,不知东方之既白。 "
         *        },
         * 	"table": {
         * 		"header": ["项目类别", "实施方案", "规划环评", "大纲+报告书", "仅大纲", "报告书", "报告表", "补充报告", "补充报告书", "补充报告表"],
         * 		"information": [
         * 			["1", "2", "3", "4", "5", "6", "7", "8", "9", ""],
         * 			["我", "是", "最", "优", "秀", "的", "男", "人", "", ""],
         * 			["我", "特别", "想", "喜欢", "一个", "人", ",", "和她", "相爱", "到老去"]
         * 		]
         *    }
         * }, {
         * 	"text": {
         * 		"content": "时维九月,序属三秋。潦水尽而寒潭清,烟光凝而暮山紫。俨骖騑于上路,访风景于崇阿;临帝子之长洲,得天人之旧馆。层峦耸翠,上出重霄;飞阁流丹,下临无地。鹤汀凫渚,穷岛屿之萦回;桂殿兰宫,即冈峦之体势。\n披绣闼,俯雕甍,山原旷其盈视,川泽纡其骇瞩。闾阎扑地,钟鸣鼎食之家;舸舰弥津,青雀黄龙之舳。云销雨霁,彩彻区明。落霞与孤鹜齐飞,秋水共长天一色。渔舟唱晚,响穷彭蠡之滨;雁阵惊寒,声断衡阳之浦。\n遥襟甫畅,逸兴遄飞。爽籁发而清风生,纤歌凝而白云遏。睢园绿竹,气凌彭泽之樽;邺水朱华,光照临川之笔。四美具,二难并。穷睇眄于中天,极娱游于暇日。天高地迥,觉宇宙之无穷;兴尽悲来,识盈虚之有数。望长安于日下,目吴会于云间。地势极而南溟深,天柱高而北辰远。关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。怀帝阍而不见,奉宣室以何年?"
         *    }
         * }]
         */

        createDocument("E:\\app\\test","我是你爸爸", datas);
    }


}

以下是封装的实体类 

import lombok.Data;

@Data
public class WordContent {

    private TextDto text;

    private TableDto table;

    private PhotoDto photo;
}

public class TableDto {

    /**
     * 表格头内容
     */
    private String[] header;

    /**
     * 表格内的数据信息
     */
    private String[][] information;
}
@Data
public class TextDto {

    /**
     * 标题,也可以做小标题
     */
    private String title;

    /**
     * 段落文字内容
     */
    private String content;
}
@Data
public class PhotoDto {

    /**
     * 图片内容
     */
    private String photo;
}

 本文还在探索与完善中,望能与大家探讨;

操作word文档一般有下载、查看、打印等等功能..........

以下有前辈的笔记

使用ITEXT创建word表格_慕课手记

如何把图片转换成base64在后台转换成图片放在本地_慕课手记

Java 打印Word文档 - E-iceblue - 博客园

下面是蓝冰科技对一系列办公软件的封装,支持多种语言! 

Spire.Doc for Java 中文教程

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值