word文档生成系列:doc和docx插入多图

系列文章目录

第一章:springboot下生成复杂word文档方案 在Word软件里面制作模板
第二章:根据模板导出word,复合格式表格生成、可变列表格生成
第三章:doc和docx插入多图
第四章:web环境下word文档预览



前言

doc和docx格式的word文档的图片标签结构是不一样的,不要试图去找它们的共同点,那是浪费时间,我们需要用完全不同的方式去处理这两代的图片标签。


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

准备word文档图片样式

必需使用本身带有图片的word文档来做模板才能正常显示图片,因为只有本身带有图片的word文档才会引入的图片相关的命名空间标签,不然拿一个本身不带有图片的word文档来做模板插入图片是不会显示的。

所以,用一个调好图片格式、线条之类样式操作之后的word文档,转为模板文档后将原有的图片base64编码用freemarker标签替换即可。

需要图片边框,固定、动态大小等样式,要自己先行调整。
在这里插入图片描述

一、doc格式word图片标签

标签解读

下面这个是简化版的三个图片的标签。
第二个、第三个<w:r>标签需要删掉或者注释掉

${} freemarker标签有只需要三个。

    <w:p>
        <#list images as img>
        
        <w:r>
            <w:pict>
                <w:binData w:name="wordml://03000001${img.index}.png" xml:space="preserve">${img.base64}</w:binData>

                <v:shape id="图片 2" o:spid="_x0000_i1025" type="#_x0000_t75"
                         style="width:324pt;height:185.4pt;visibility:visible;mso-wrap-style:square;mso-position-horizontal:absolute"
                         o:preferrelative="f">
                        <v:imagedata src="wordml://03000001${img.index}.png" o:title=""/>
                    </v:shape>
            </w:pict>
        </w:r>
        
        </#list>

        <w:r>
            <w:pict>
                ...第二张图片
            </w:pict>
        </w:r>

        <w:r>
            <w:pict>
                ...第三张图片
            </w:pict>
        </w:r>
    </w:p>

数据结构

{
 "images":[
      {
        "title": "图片标题",
        "base64": "osodfhslkdhflksdkhflsdhjfohwelhlwsejnrrer==",
        "index": 101
       }
    ]
  }

二、docx格式图片标签

docx格式的标签相对doc的要简单一些。

<#list images as img>
    <pkg:part pkg:name="/word/media/image${img.index}.jpeg" pkg:contentType="image/jpeg" pkg:compression="store">
        <pkg:binaryData>${img.base64}
        </pkg:binaryData>
    </pkg:part>
</#list>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据word模板生成包含片的word文档可以通过Java的Apache POI库来实现。首先,需要添加POI库的依赖。 在Java中,可以使用HWPF(HSSFWorkbook)和XWPF(XSSFWorkbook)两个类来处理.doc和.docx文件。下面以.docx文件为例进行说明。 首先,需要准备一个word模板文件,其中包含需要替换的占位符和插入片的位置。 然后,通过POI库加载模板文件: ``` XWPFDocument document = new XWPFDocument(new FileInputStream("模板文件.docx")); ``` 接下来,可以通过`document`对象获取所有的段落(Paragraph)和表格(Table)等元素,然后根据需求对其进行修改。 假设有一个占位符是`${name}`,可以使用`XWPFParagraph`对象替换它: ``` List<XWPFParagraph> paragraphs = document.getParagraphs(); for (XWPFParagraph paragraph : paragraphs) { String text = paragraph.getText(); if (text.contains("${name}")) { text = text.replace("${name}", "张三"); paragraph.setText(text); } } ``` 如果需要在指定位置插入片,可以使用`XWPFParagraph`对象中的`createRun()`方法和`addPicture()`方法: ``` String filePath = "片路径"; int width = 200; int height = 200; XWPFParagraph paragraph = document.createParagraph(); XWPFRun run = paragraph.createRun(); run.addPicture(new FileInputStream(filePath), XWPFDocument.PICTURE_TYPE_JPEG, "片名称", width, height); ``` 最后,将修改后的文档保存为新文件: ``` document.write(new FileOutputStream("生成文档.docx")); document.close(); ``` 通过以上的步骤,就可以根据word模板生成包含片的word文档了。当然,还可以根据具体需求进行更多的操作,如修改字体样式、插入表格等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值