上一篇文章介绍了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