文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java根据自定义的word模板生成文档

2023-09-28 21:35

关注

文章目录

提示:以下是本篇文章正文内容,下面案例可供参考

一、新建Word模板

模板文档
在你需要动态生成的内容使用{field}作为占位符,后面代码扫描到就将占位符换成自己的动态内容。

二、导入依赖

  <dependency>         <groupId>org.apache.poigroupId>         <artifactId>poiartifactId>         <version>4.1.2version>     dependency>     <dependency>         <groupId>org.apache.poigroupId>         <artifactId>poi-ooxmlartifactId>         <version>4.1.2version>     dependency>     <dependency>         <groupId>commons-iogroupId>         <artifactId>commons-ioartifactId>         <version>2.11.0version>     dependency>

三、编写代码

1、替换文字

代码如下(示例):

   public static void main(String[] args) {        try {            String templatePath = "C:\\Users\\Administrator\\Desktop\\test3.docx";            String outputPath = "C:\\Users\\Administrator\\Desktop\\output.docx";            InputStream inputStream = new FileInputStream(templatePath);            XWPFDocument document = new XWPFDocument(inputStream);            Map<String, String> hashMap = new HashMap<>();            hashMap.put("name", "JUVENILESS");            hashMap.put("gender", "男");            hashMap.put("schoolNumber", "13123132");            hashMap.put("qq", "123123");            hashMap.put("nativePlace", "测试");            hashMap.put("profession", "测试啊");            hashMap.put("birth", "2025-10");            hashMap.put("dorm", "I123");            hashMap.put("cellNumber", "12345678911");            hashMap.put("introduction", "简单的自我介绍");            hashMap.put("futureOutlook", "简单的对未来发展");            hashMap.put("award", "拿过的奖项拿过的奖项");            hashMap.put("department","部门");            hashMap.put("year","年份");            // 替换占位符            replacePlaceholdersInDocument(document, hashMap);            // 插入图片            insertPictureInTableCell(document, "{picture}", picturePath);            // 保存生成的文档            FileOutputStream outputStream = new FileOutputStream(outputPath);            document.write(outputStream);            outputStream.close();            System.out.println("生成的文档已保存。");        } catch (Exception e) {            e.printStackTrace();        }    }    private static void replacePlaceholdersInDocument(XWPFDocument document, Map<String, String> hashMap) {        for (XWPFParagraph paragraph : document.getParagraphs()) {            replaceParagraphPlaceholders(paragraph, hashMap);        }        for (XWPFTable table : document.getTables()) {            for (XWPFTableRow row : table.getRows()) {                for (XWPFTableCell cell : row.getTableCells()) {                    for (XWPFParagraph paragraph : cell.getParagraphs()) {                        replaceParagraphPlaceholders(paragraph, hashMap);                    }                }            }        }    }

直接运行即可。运行结果图为:
结果图

2、插入图片

这里我是查找表格的单元格里的占位符。
图片文档模板

代码如下(示例):

static String picturePath = "C:\\Users\\Administrator\\Desktop\\picture.jpg";  public static void main(String[] args) {        try {            String templatePath = "C:\\Users\\Administrator\\Desktop\\test4.docx";            String outputPath = "C:\\Users\\Administrator\\Desktop\\output1.docx";            InputStream inputStream = new FileInputStream(templatePath);            XWPFDocument document = new XWPFDocument(inputStream);                        // 插入图片            insertPictureInTableCell(document, "{picture}", picturePath);            // 保存生成的文档            FileOutputStream outputStream = new FileOutputStream(outputPath);            document.write(outputStream);            outputStream.close();            System.out.println("生成的文档已保存。");        } catch (Exception e) {            e.printStackTrace();        }    }    private static void insertPictureInTableCell(XWPFDocument document, String placeholder, String picturePath) throws Exception {        List<XWPFTable> tables = new ArrayList<>(document.getTables());        for (XWPFTable table : tables) {            List<XWPFTableRow> rows = new ArrayList<>(table.getRows());            for (XWPFTableRow row : rows) {                List<XWPFTableCell> cells = new ArrayList<>(row.getTableCells());                for (XWPFTableCell cell : cells) {                    List<XWPFParagraph> paragraphs = new ArrayList<>(cell.getParagraphs());                    for (XWPFParagraph paragraph : paragraphs) {                        List<XWPFRun> runs = new ArrayList<>(paragraph.getRuns());                        for (XWPFRun run : runs) {String text = run.getText(0);if (text != null && text.contains(placeholder)) {    int index = text.indexOf(placeholder);    if (index >= 0) {        // 移除占位符        run.setText(text.replace(placeholder, ""), 0);        // 在当前段落中插入图片        XWPFRun pictureRun = paragraph.createRun();        try (FileInputStream pictureInputStream = new FileInputStream(picturePath)) {            pictureRun.addPicture(pictureInputStream, Document.PICTURE_TYPE_JPEG, "picture.jpg", Units.toEMU(200), Units.toEMU(200));        }    }}                        }                    }                }            }        }    }

生成的结果如下:
生成结果
这里我发现图片的尺寸没法保证跟单元格大小一致,也尝试过很多种方法都不太行。哪位大佬尝试尝试哈哈哈哈


来源地址:https://blog.csdn.net/a12789sd/article/details/131451986

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯