学习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

相关推荐
(Charon)1 天前
【C++ 面试高频:内存管理、RAII 和智能指针详解】
java·开发语言·word
江畔柳前堤1 天前
github实战指南03-Pull Request 全流程实战
开发语言·人工智能·python·深度学习·github·word
2603_954138392 天前
PDF 转 Word 工具深度评测:从参数解析到实战避坑
pdf·word
知南x2 天前
【DPDK例程学习】(4) l2fwd
学习·word
江畔柳前堤2 天前
github实战指南00-命令在哪里执行?
人工智能·线性代数·oracle·数据挖掘·github·word
江畔柳前堤3 天前
github实战指南05-Fork与开源协作
人工智能·线性代数·oracle·开源·github·word
yivifu3 天前
怎样将Word文档中脚注引用后面的空格轻松删除
word·vba
Sour3 天前
Word 文档翻译后保留格式的检查清单:标题、表格、图片、目录和批注
pdf·word·办公软件·office·文档翻译
qq_422152574 天前
Word 文件太大怎么压缩?2026 年文档瘦身方案对比
开发语言·c#·word
子非衣5 天前
Java使用Aspose进行Word转PDF时异常卡主问题
java·pdf·word