学习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文档截图如下所示:

参考文献

1\]https://github.com/dotnet/Open-XML-SDK \[2\]https://learn.microsoft.com/zh-cn/office/open-xml/open-xml-sdk \[3\]https://learn.microsoft.com/zh-cn/dotnet/api/documentformat.openxml.wordprocessing.style?view=openxml-3.0.1 \[4\]https://blog.csdn.net/i042416/article/details/126228816

相关推荐
yuhulkjv3352 小时前
腾讯元宝公式粘贴word乱码
人工智能·chatgpt·word·deepseek·ai导出鸭
hef28819 小时前
Java读取Word图片坐标的两种方法
java·开发语言·word
OEC小胖胖1 天前
ChatGPT导出Word怎么做?Chat2File 安装与使用教程
chatgpt·word·效率工具·ai工具·浏览器扩展
庖丁AI1 天前
合同比对工具怎么选?Word、PDF 和扫描件差异对比思路
pdf·word
你挚爱的强哥1 天前
【样式问题】将当前word所有文字样式、字体、字号大小 全局设置为以后任何一个新的空白文档都共享使用
word
luoyayun3611 天前
基于 DOCX 模板书签替换的 Word 文档生成方案,解决跨平台Word输出问题
word·qt word·linux word
包子源1 天前
PDF 转 Word/Excel 全链路实战:Next.js + 阿里云文档智能
pdf·word·excel
tedcloud1232 天前
academic-research-skills部署教程:构建AI辅助科研环境
服务器·人工智能·word·excel·dreamweaver
AI一天,人间一年2 天前
word删除指定页面
word