aspose java 读取word文档中的图片保存至文件服务器并通过 图片路径替换该图片

aspose官网:https://apireference.aspose.com/words/java/com.aspose.words/Shape

参考文章:https://blog.csdn.net/pingnanlee/article/details/103596823

public void replaceWordImageWithSrc(){
        try {
            Document srcDoc = new Document("C:\\Users\\Downloads\\1617000207075.docx");
            DocumentBuilder builder=new DocumentBuilder(srcDoc);
            List<Shape> shapeList = Arrays.stream(builder.getDocument().getChildNodes(NodeType.SHAPE, true).toArray())
                    .filter(Shape.class::isInstance)
                    .map(Shape.class::cast)
                    .collect(Collectors.toList());
            for (Shape shape : shapeList) {
                if (shape.getShapeType() == ShapeType.IMAGE){
                    builder.moveTo(shape);
                    // 获取这张图片的 byte[] 数据
                    byte[] imageBytes = shape.getImageData().getImageBytes();
                    // 将byte[] 数据存到文件服务器并返回对应的图片文件url
                    String imgaeBase64Str = Base64.getMimeEncoder().encodeToString(imageBytes);
                    // 获取图片的尺寸
                    double width = shape.getWidth();
                    double height = shape.getHeight();
                    // 获取图片的后缀名, 存储时可能会用到
                    String imageSuffix = FileFormatUtil.imageTypeToExtension(shape.getImageData().getImageType());
                    // 此处省略存储图片文件的操作,我的操作是将  byte[] imageBytes 转为base64,然后再进行存储,最后得到一个img标签
                    String imageUrl ="<img src='http://localhost:8080/image/123.png' heigth='123' width='321'>";
                    // img标签写到这个位置,注意,这里我用的不是 builder.insertHtml,因为我将图片替换成对应的url后,后续还要操作word,如果是直接保存成word文档的话,可以使用builder.insertHtml
                    // builder.write 好像有个坑,如果参数里含有中文符号的话,会有word的格式的,类似如下
                    // "<img src='http://localhost:8080/image/‘<p>壁纸</p>.png' heigth='123' width='321'>"
                    builder.write(imageUrl);
                    // 移走图片
                    shape.remove();

                    /**
                     * 原本想通过先处理word文档上所有的图片,将图片存到文件服务器上,并用对应的图片路径url替换原文档中图片数据
                     * (具体而言就是通过 builder.insertHtml(url) url="<img src = 'http://localhost/pic123456.jpg'>)
                     * 经过上面的操作后,如果将被操作的文档doc.save()保存的话,效果应该可以展现出来的
                     * 但是现在还需要读取被操作文档的html,这样导致 本意是想将图片的url替换图片数据的,但是获取word文档的html内容时
                     * 会将url代表的图片给转为base64,这样仍不符合要求;
                     *
                     * 但是通过 builder.write(url)将图片url写回原图的位置时,会出现这样的效果,如果url中包含了中文的话,会被一些html
                     * 标签给隔开,导致url被分割成多个部分,而不是一个整体。
                     *
                     */

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

posted @ 2021-04-09 17:09  一去二三浪里小白龙  阅读(1099)  评论(0编辑  收藏  举报
//增加一段JS脚本,为目录生成使用