学习C#调用OpenXml操作word文档的基本用法(34:学习图形类-4)

  上一篇文章介绍了openxml中word文档相关的浮动式布局类Anchor的主要属性,但只配置这些属性并不能以浮动式布局向word文档中插入图片。Anchor类支持下图所示子类型,尤其是Graphic类、DocProperties类等,只有在Ahchor类中插入这些子类型实例,才能正确的向word文档中插入并显示图片。同时根据网上的说法,Anchor类的子类型的实例插入顺序也会影响图片插入效果。

  下图是手工设置word文档中的图片的浮动式布局后,document.xml文件中Anchor中的属性设置及子元素设置如下图所示:

  下面的代码用于向word文档的页面中间以浮动方式插入图片:

csharp 复制代码
    DW.Anchor element = new DW.Anchor(
        //简单定位,设为false表示使用复杂定位
        // 这句代码必须要有,注释掉之后word文档打不开
        new DW.SimplePosition() { X = 100000, Y = 100000 },

        //水平位置,使用绝对偏移量,相对于页面边缘
        new DW.HorizontalPosition(new DW.HorizontalAlignment("center")){ RelativeFrom = DW.HorizontalRelativePositionValues.Page },

        // 垂直位置:页面居中
        new DW.VerticalPosition(new DW.VerticalAlignment("center")){ RelativeFrom = DW.VerticalRelativePositionValues.Page },

        //图片的显示尺寸(宽度和高度,单位为EMU)
        new DW.Extent() { Cx = 500000L, Cy = 500000L },

        //效果范围(可选,通常设为0)
        new DW.EffectExtent() { LeftEdge = 0L, TopEdge = 0L, RightEdge = 0L, BottomEdge = 0L },

        // 四周型环绕
        new DW.WrapSquare() { WrapText = DW.WrapTextValues.BothSides },

        // 绘图对象的非可视属性,包括ID和名称
        new DW.DocProperties() { Id = 1U, Name = "Floating Image" },

        // 图形框架的非可视属性
        new DW.NonVisualGraphicFrameDrawingProperties(new A.GraphicFrameLocks() { NoChangeAspect = true }),

        // 包含实际图片数据的图形对象
        new A.Graphic(
            new A.GraphicData(
                new PIC.Picture(
                    new PIC.NonVisualPictureProperties(
                        new PIC.NonVisualDrawingProperties() { Id = 0U, Name = "Picture 1" },
                        new PIC.NonVisualPictureDrawingProperties()
                    ),
                    new PIC.BlipFill(
                        new A.Blip() { Embed = relationshipId, CompressionState = A.BlipCompressionValues.Print },
                        new A.Stretch(new A.FillRectangle())
                    ),
                    new PIC.ShapeProperties(
                        new A.Transform2D(
                            new A.Offset() { X = 0L, Y = 0L },
                            new A.Extents() { Cx = 500000L, Cy = 500000L }
                        ),
                        new A.PresetGeometry(new A.AdjustValueList()) { Preset = A.ShapeTypeValues.Rectangle }
                    )
                )
            )
            { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" }
        )
)
    {
        SimplePos = false,
        RelativeHeight = 251658240U,
        BehindDoc = false,
        Locked = false,
        LayoutInCell = true,
        AllowOverlap = true,
        DistanceFromTop = 0U,
        DistanceFromBottom = 0U,
        DistanceFromLeft = 0U,
        DistanceFromRight = 0U
    };
    
    return new Drawing(element);

  程序运行效果截图及word文档截图如下所示:

参考文献

1https://github.com/dotnet/Open-XML-SDK

2https://learn.microsoft.com/zh-cn/office/open-xml/open-xml-sdk

3https://learn.microsoft.com/zh-cn/dotnet/api/documentformat.openxml.wordprocessing.style?view=openxml-3.0.1

4https://blog.csdn.net/i042416/article/details/126228816

相关推荐
reasonsummer7 小时前
【办公类-109-12】20260901圆形挂牌(模版重制:文本框圆形重叠_word编辑单面_接送卡&被子卡&床卡&入园卡)
python·word
AI导出鸭10 小时前
怎么让Claude做表格?AI导出鸭苹果版将Claude输出的Markdown表格或结构化列表智能解析为二维数据,一键导出Excel/Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
AI刀刀11 小时前
Kimi 文档导出格式错乱、排版丢失、导出报错?AI 导出鸭一键智能适配,稳定输出规范 Word、PDF,高效解决各类导出难题
人工智能·pdf·word·ai导出鸭
Ai-_Man11 小时前
豆包智能体把对话批量导出为Word或PDF的正确顺序
人工智能·ai·小程序·pdf·word
yuhulkjv33512 小时前
告别“复制-粘贴-崩格式”:ChatGPT鸿蒙版导出word格式的底层技术重构
ai·chatgpt·word·harmonyos·ai导出鸭
AI导出鸭PC端1 天前
Gemini流程图怎么导出?AI导出鸭一键解决格式兼容难题
人工智能·ai·word·流程图·豆包·ai导出鸭
yuhulkjv3351 天前
Gemini鸿蒙版导出word格式的终极解法:AI 导出鸭如何重构AI内容落地链路
人工智能·ai·word·harmonyos·ai导出鸭
DS随心转APP1 天前
生成word文档的ChatGPT格式乱码终结者:AI导出鸭横向测评与工程化架构解析 摘要
人工智能·ai·chatgpt·word·deepseek·ai导出鸭
wujian83112 天前
怎么用文心生成word文档?从格式错乱到智能导出,AI导出鸭让创作再无后顾之忧
人工智能·ai·word·豆包·deepseek·ai导出鸭
ccino .3 天前
awvs_json_word.py 使用说明手册
json·word