java 读取服务器(网路)的word模板文件并替换自定义的数据(图片)

39 篇文章 3 订阅

maven 所需依赖

<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.5.5</version>
</dependency>

<dependency>
	<groupId>com.squareup.okhttp3</groupId>
	<artifactId>okhttp</artifactId>
	<version>4.3.1</version>
</dependency>

读取服务器(网路)的word模板文件并替换自定义的数据(图片),输出到本地文件夹

    public static void main(String[] args) throws Exception {
        ConfigureBuilder builder = Configure.builder();
        Map map = Maps.newHashMap();
        map.put("id", "123");
        map.put("img", Pictures.ofUrl("http://192.168.1.16:9000/common/isite90-form-server/20220311/1646965853625/202203111030536250000002-bea34e6e-0c71-4eb5-8f47-6247ac140398.png", PictureType.JPEG).size(60, 60).create());

        String paht  = "http://192.168.1.16:9000/common/isite90-form-server/20220321/1647826081579/202203210928015790000002-41db51fd-ec98-4c1e-b08e-1e7a815604c5.docx";

        URL url = new URL(paht);
        HttpURLConnection httpUrl = (HttpURLConnection) url.openConnection();
        //设置请求方式为"GET"
        httpUrl.setRequestMethod("GET");
        //超时响应时间为5秒
        httpUrl.setConnectTimeout(5 * 1000);
        //通过输入流获取图片数据
        InputStream inStream = httpUrl.getInputStream();
        XWPFTemplate template = XWPFTemplate.compile(inStream, builder.build()).render(map);
        template.writeAndClose(new FileOutputStream("D:\\test\\output.docx"));
    }

读取服务器(网路)的word模板文件并替换自定义的数据(图片),返回输出到浏览器

    // 替换word文档数据(包括图片)并导出
    public static ResultBody replaceWord(HttpServletResponse response, Map<String, Object> map, String templateFilePath, String outFileName) throws Exception {
        ConfigureBuilder builder = Configure.builder();
        map.put("id", "123");
        map.put("img", Pictures.ofUrl("http://192.168.1.16:9000/common/isite90-form-server/20220311/1646965853625/202203111030536250000002-bea34e6e-0c71-4eb5-8f47-6247ac140398.png", PictureType.JPEG).size(60, 60).create());


        //  读取远程服务器的文件
        URL url = new URL(templateFilePath);
        HttpURLConnection httpUrl = (HttpURLConnection) url.openConnection();
        //设置请求方式为"GET"
        httpUrl.setRequestMethod("GET");
        //超时响应时间为5秒
        httpUrl.setConnectTimeout(5 * 1000);
        //通过输入流获取图片数据
        InputStream inStream = httpUrl.getInputStream();
        // 读入 输入文件流
        XWPFTemplate template = XWPFTemplate.compile(inStream, builder.build()).render(map);
//        XWPFTemplate template1 = XWPFTemplate.compile(new File("D:\\test\\td.docx"), builder.build()).render(map);
//        template.writeAndClose(new FileOutputStream("D:\\test\\output.docx"));
        response.setContentType("application/octet-stream");
        response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(  outFileName+".docx", "UTF-8"));
        OutputStream out = response.getOutputStream();
        BufferedOutputStream bos = new BufferedOutputStream(out);
        template.write(bos);
        bos.flush();
        out.flush();
        PoitlIOUtils.closeQuietlyMulti(template, bos, out);
        return null;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
实现java导出动态word带有图片的步骤如下: 1. 首先,需要在Java项目中引入aspose.word的依赖。 2. 接着,需要准备好自定义word模板,可以使用Microsoft Word进行制作。在制作模板时,将需要动态填充的位置标记出来,同时为需要插入图片的位置添加一个图片控件。在这个控件的属性中,设置好图片的默认值,以及允许用户插入新的图片。 3. 在Java代码中,使用aspose.word提供的API读取自定义word模板,并且使用aspose.word提供的API将需要填充的数据填入模板中。对于需要插入图片的位置,可以使用aspose.word提供的API获取到图片控件,并且替换其中的图片。 4. 最后,将填充好数据word文件输出即可。 以下是示例代码: ```java // 加载自定义word模板 Document doc = new Document("自定义word模板.docx"); // 获取需要填充的位置 NodeCollection<Node> nodes = doc.getChildNodes(NodeType.RUN, true); // 填充数据,这里使用了HashMap作为数据源,实际开发中可以根据实际情况使用其他数据源 HashMap<String, String> data = new HashMap<String, String>(); data.put("name", "张三"); data.put("age", "25"); data.put("address", "北京市朝阳区"); // 插入图片,这里使用了FileInputStream作为图片源,实际开发中可以根据实际情况使用其他图片源 for (Shape shape : (Iterable<Shape>) doc.getChildNodes(NodeType.SHAPE, true)) { if (shape.hasImage()) { FileInputStream imageStream = new FileInputStream("图片源.png"); shape.getImageData().setImage(imageStream); } } // 输出填充好数据word文件 doc.save("填充好数据word文件.docx"); ``` 以上代码演示了如何使用aspose.word自定义word模板实现java导出动态word带有图片
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值