POI-5.2.2 操作Word【图片操作相关】

poi 3.17操作Word工具包,点击此处

当前版本 5.2.2 ,版本不同,写法略有差异
- poi-5.2.2 操作word 【段落】
- poi-5.2.2 操作word 【表格】
- poi-5.2.2 操作word【单元格、行、列】
- poi 5.2.2 操作word【页眉页脚】
- poi 5.2.2 操作word【纸张、边距】
- poi-5.2.2 操作word【图片操作相关】
- poi 5.2.2 操作word【目录】


本文所需依赖

		<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-full</artifactId>
            <version>5.2.2</version>
        </dependency>


- 添加图片(内嵌)

   /**
     * 添加图片【内嵌图片】
     * @param width         单位  磅
     * @param height        单位  磅
     * @Return
     */
    public static void addPicture_Inline(XWPFRun run ,InputStream pictureData, int pictureType, String filename,
                                         float width, float height ) throws Exception {
        run.addPicture(pictureData , pictureType , filename , ptToEMUs(width) , ptToEMUs(height));
    }

- 添加图片(内嵌、图片染色)

    /**
     * 添加图片【内嵌图片】
     * @Auther lu zhifeng
     * @Date 2020/11/14 12:27 上午
     * @param width         单位  磅
     * @param height        单位  磅
     * @param backGColor    图片染色 如:ffffff
     * @Return
     */
    public static void addPicture_Inline(XWPFRun run ,InputStream pictureData, int pictureType, String filename,
                                         float width, float height , String backGColor) throws Exception {
        run.addPicture(pictureData , pictureType , filename , ptToEMUs(width) , ptToEMUs(height));
        CTDrawing drawing = run.getCTR().getDrawingArray(0);
        CTInline inline = drawing.getInlineArray(0);

        //给图片添加颜色
        if(!StringUtil.empty(backGColor)){
            String xmlColor = "<a:duotone>\n" +
                    "<a:prstClr val=\"black\"/>\n" +
                    "<a:srgbClr val=\"" + backGColor + "\">\n" +
//                        "<a:tint val=\"45000\"/>\n" +
//                        "<a:satMod val=\"400000\"/>\n" +
                    "</a:srgbClr>\n" +
                    "</a:duotone>\n" +
                    "</a:blip>";


            String string = inline.getGraphic().getGraphicData().xmlText();

            String toReplaceStr = string.replaceAll(".*(<a:blip.*?/>).*", "$1");
            String targetReplace = toReplaceStr.replaceAll("/>", ">") + xmlColor;
            String result = string.replaceAll(toReplaceStr, targetReplace);

            XmlObject parse = XmlObject.Factory.parse(result);
            inline.getGraphic().getGraphicData().set(parse);
        }
    }

- 添加图片(浮动)

    /**
     * 添加图片[环绕模式:文字上方/下方]
     * @param pictureData       图片数据
     * @param pictureType       图片类型,参考  ({@link XWPFDocument#PICTURE_TYPE_PNG})
     * @param filename          图片名
     * @param width             图片宽  单位 磅
     * @param height            图片高  单位 磅
     * @param wrapType          环绕模式:{@link WordBaseConstants#AROUND_BEHIND_OVER}
     * @param positionH         水平方向的移动数值  单位 磅
     * @param relFromH          水平方向的位置相对于谁进行调整
     * @param positionV         垂直方向的移动数值  单位 磅
     * @param relFromV          垂直方向的位置相对于谁进行调整
     * @param backGColor        图片染色
     */
    public static void addPicture_Anchor(XWPFRun run ,InputStream pictureData, int pictureType, String filename,
                                         float width, float height ,float positionH , STRelFromH.Enum relFromH,
                                         float positionV , STRelFromV.Enum relFromV , int wrapType , String backGColor) throws IOException {
        try {
            run.addPicture(pictureData , pictureType , filename , ptToEMUs(width) , ptToEMUs(height));
            //获取刚才添加的图片数据
            CTDrawing drawing = run.getCTR().getDrawingArray(0);
            CTGraphicalObject graphicalobject = drawing.getInlineArray(0).getGraphic();

            long id = drawing.getInlineArray(0).getDocPr().getId();     //使用原来的id

            //设置一个浮动模式,替换掉默认的行内模式
            CTAnchor ctAnchor = drawing.addNewAnchor();
            String xml = "<a:graphic xmlns:a=\"" + CTGraphicalObject.type.getName().getNamespaceURI() + "\">" + "<a:graphicData uri=\"" + org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture.type.getName().getNamespaceURI() + "\">" + "<pic:pic xmlns:pic=\"" + org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture.type.getName().getNamespaceURI() + "\" />" + "</a:graphicData>" + "</a:graphic>";
            InputSource is = new InputSource(new StringReader(xml));
            org.w3c.dom.Document doc = DocumentHelper.readDocument(is);
            ctAnchor.set(org.apache.xmlbeans.XmlToken.Factory.parse(doc.getDocumentElement(), POIXMLTypeLoader.DEFAULT_XML_OPTIONS));
            ctAnchor.setDistT(0L);      //位置
            ctAnchor.setDistR(0L);
            ctAnchor.setDistB(0L);
            ctAnchor.setDistL(0L);
            ctAnchor.setLocked(false);
            ctAnchor.setLayoutInCell(true);
            ctAnchor.setSimplePos2(false);
            ctAnchor.setAllowOverlap(true);
            ctAnchor.setRelativeHeight(0);

            if(wrapType == WordBaseConstants.AROUND_BEHIND_OVER){
                ctAnchor.setBehindDoc(false);
                ctAnchor.addNewWrapNone();          //浮动模式,无文字环绕
            }else if(wrapType == WordBaseConstants.AROUND_BEHIND_UNDER){
                ctAnchor.setBehindDoc(true);
                ctAnchor.addNewWrapNone();          //浮动模式,无文字环绕
            }else if(wrapType == WordBaseConstants.AROUND_SQUARE){
                ctAnchor.addNewWrapSquare();
            }else if(wrapType == WordBaseConstants.AROUND_TIGHT){
                ctAnchor.addNewWrapTight();
            }else if(wrapType == WordBaseConstants.AROUND_THROUGH){
                ctAnchor.addNewWrapThrough();
            }else if(wrapType == WordBaseConstants.AROUND_TOP_BOTTOM){
                ctAnchor.addNewWrapTopAndBottom();
            }
            CTPosH ctPosH = ctAnchor.addNewPositionH();
            ctPosH.setRelativeFrom(relFromH == null ? STRelFromH.CHARACTER : relFromH);
            ctPosH.setPosOffset(ptToEMUs(positionH));
            CTPosV ctPosV = ctAnchor.addNewPositionV();
            ctPosV.setRelativeFrom(relFromV == null ? STRelFromV.PARAGRAPH : relFromV);
            ctPosV.setPosOffset(ptToEMUs(positionV));

            CTPoint2D ctPoint2D = ctAnchor.addNewSimplePos();
            ctPoint2D.setX(0);
            ctPoint2D.setY(0);
            ctAnchor.addNewCNvGraphicFramePr();
            CTNonVisualDrawingProps docPr = ctAnchor.addNewDocPr();
            docPr.setId(id);
            docPr.setName("Drawing " + id);
            docPr.setDescr(filename);

            CTPositiveSize2D extent = ctAnchor.addNewExtent();
            extent.setCx(ptToEMUs(width));
            extent.setCy(ptToEMUs(height));

            ctAnchor.setGraphic(graphicalobject);

            drawing.setAnchorArray(new CTAnchor[]{ctAnchor});//添加浮动属性
            drawing.removeInline(0);//删除行内属性

            //给图片添加颜色
            if(!StringUtil.empty(backGColor)){
                String xmlColor = "<a:duotone>\n" +
                        "<a:prstClr val=\"black\"/>\n" +
                        "<a:srgbClr val=\"" + backGColor + "\">\n" +
//                        "<a:tint val=\"45000\"/>\n" +
//                        "<a:satMod val=\"400000\"/>\n" +
                        "</a:srgbClr>\n" +
                        "</a:duotone>\n" +
                        "</a:blip>";

                String string = ctAnchor.getGraphic().getGraphicData().xmlText();

                String toReplaceStr = string.replaceAll(".*(<a:blip.*?/>).*", "$1");
                String targetReplace = toReplaceStr.replaceAll("/>", ">") + xmlColor;
                String result = string.replaceAll(toReplaceStr, targetReplace);

                XmlObject parse = XmlObject.Factory.parse(result);
                ctAnchor.getGraphic().getGraphicData().set(parse);
            }

        } catch (XmlException | SAXException | InvalidFormatException var31) {
            throw new IllegalStateException(var31);
        }
    }

- 涉及常量


public class WordBaseConstants {

    //环绕模式选项
    /** 内嵌 */
    public static final int AROUND_INLINE = 0;
    /** 浮于文字上方 */
    public static final int AROUND_BEHIND_OVER = 1;
    /** 衬于文字下方 */
    public static final int AROUND_BEHIND_UNDER = 2;
    /** 四周型 */
    public static final int AROUND_SQUARE = 3;
    /** 紧密型 */
    public static final int AROUND_TIGHT = 4;
    /** 穿越型 */
    public static final int AROUND_THROUGH = 5;
    /** 上下型 */
    public static final int AROUND_TOP_BOTTOM = 6;

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
注:下文中的 *** 代表文件名中的版本号。 # 【poi-***.jar中文文档.zip】 中包含: 中文文档:【poi-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【poi-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【poi-***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【poi-***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【poi-***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: poi-***.jar中文文档.zip,java,poi-***.jar,org.apache.poi,poi,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,apache,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【poi-***.jar中文文档.zip】,再解压其中的 【poi-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件; # Maven依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>***</version> </dependency> ``` # Gradle依赖: ``` Gradle: implementation group: 'org.apache.poi', name: 'poi', version: '***' Gradle (Short): implementation 'org.apache.poi:poi:***' Gradle (Kotlin): implementation("org.apache.poi:poi:***") ``` # 含有的 Java package(包)(此处仅列举3个): ``` org.apache.poi org.apache.poi.common org.apache.poi.common.usermodel ...... ``` # 含有的 Java class(类)(此处仅列举3个): ``` org.apache.poi.EmptyFileException org.apache.poi.EncryptedDocumentException org.apache.poi.OldFileFormatException ...... ```
poi-ooxml-5.2.2.jar是一个Java库,用于操作Microsoft Office Open XML(OOXML)格式的文档。它是Apache POI项目的一部分,POI是一个开源的Java库,用于读取、创建和修改各种格式的Office文档。 poi-ooxml-5.2.2.jar提供了一系列类和方法,用于处理OOXML格式的文档,包括.xlsx电子表格文件和.docx文档文件。使用这个库,我们可以读取和提取文档中的数据,修改和创建新的文档,添加、删除或修改单元格、行、列、图表、图像等元素。它还支持文本格式设置、样式、公式计算等功能。 使用poi-ooxml-5.2.2.jar,我们可以通过编程方式对OOXML文档进行自动化处理。例如,我们可以读取电子表格中的数据,并进行各种计算和分析,或者将数据导出到其他格式。我们还可以创建自定义的模板文件,填充数据并生成新的文档。 poi-ooxml-5.2.2.jar是在Apache许可证下发布的,所以我们可以免费使用它,并集成到我们的Java应用程序中。它是一个功能强大且广泛使用的库,被许多开发人员和企业用于处理Office文档。无论是处理大量数据还是进行高级文档操作poi-ooxml-5.2.2.jar都可以提供方便和高效的解决方案。 总之,poi-ooxml-5.2.2.jar是一个处理Microsoft Office Open XML格式文档的Java库,它可以帮助我们读取、创建和修改xlsx和docx文档,提供了丰富的功能和灵活性,能够满足各种对于OOXML文档的处理需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值