Openxml sdk OOXML:将标题内容移动到正文后保持图像显示

Openxml sdk OOXML:将标题内容移动到正文后保持图像显示,openxml-sdk,openxml,word-2010,Openxml Sdk,Openxml,Word 2010,我正在使用OpenXMLSDK,我想将内容控件的内容(包含图像)从标题移动到正文,移动后图像不会显示这个问题。复制内容控制内容后,我以以下方式添加图像部分: foreach (var headerPart in wordDocument.MainDocumentPart.HeaderParts) { SdtBlock sdtToSave = this.FindSdtBlock(contentC

我正在使用OpenXMLSDK,我想将内容控件的内容(包含图像)从标题移动到正文,移动后图像不会显示这个问题。复制内容控制内容后,我以以下方式添加图像部分:

foreach (var headerPart in wordDocument.MainDocumentPart.HeaderParts)
                        {
                            SdtBlock sdtToSave = this.FindSdtBlock(contentControlTag, headerPart );
                            if (sdtToSave != null)
                            {
                                foreach (var imagePart in headerPart.ImageParts)
                                {
                                    ImagePart newPart = mainPart.AddImagePart(imagePart.ContentType);
                                    this.GenerateImagePartContent(newPart, imagePart.GetStream());                                                                }
                                 }
                        }
private void GenerateImagePartContent(ImagePart imagePart, Stream partStream)
        {
            imagePart.FeedData(partStream);
            partStream.Close();
        }
然后,如果我添加以下行:

Paragraph paragraph = sdtToSave.SdtContentBlock.GetFirstChild<Paragraph>();
                                    Run run = new Run();
                                    paragraph.Append(run);
                                    run.Append(this.GenerateDrawing(mainPart.GetIdOfPart(newPart)));


private Drawing GenerateDrawing(String relationshipID)
        {
            Drawing drawing1 = new Drawing();

            Inline inline1 = new Inline() { DistanceFromTop = (UInt32Value)0U, DistanceFromBottom = (UInt32Value)0U, DistanceFromLeft = (UInt32Value)0U, DistanceFromRight = (UInt32Value)0U };
            Extent extent1 = new Extent() { Cx = 152400L, Cy = 152400L };
            EffectExtent effectExtent1 = new EffectExtent() { LeftEdge = 0L, TopEdge = 0L, RightEdge = 0L, BottomEdge = 0L };
            DocProperties docProperties1 = new DocProperties() { Id = (UInt32Value)1U, Name = "Image 1" };

            NonVisualGraphicFrameDrawingProperties nonVisualGraphicFrameDrawingProperties1 = new NonVisualGraphicFrameDrawingProperties();

            A.GraphicFrameLocks graphicFrameLocks1 = new A.GraphicFrameLocks() { NoChangeAspect = true };
            graphicFrameLocks1.AddNamespaceDeclaration("a", "http://schemas.openxmlformats.org/drawingml/2006/main");

            nonVisualGraphicFrameDrawingProperties1.Append(graphicFrameLocks1);

            A.Graphic graphic1 = new A.Graphic();
            graphic1.AddNamespaceDeclaration("a", "http://schemas.openxmlformats.org/drawingml/2006/main");

            A.GraphicData graphicData1 = new A.GraphicData() { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" };

            Pic.Picture picture1 = new Pic.Picture();
            picture1.AddNamespaceDeclaration("pic", "http://schemas.openxmlformats.org/drawingml/2006/picture");

            Pic.NonVisualPictureProperties nonVisualPictureProperties1 = new Pic.NonVisualPictureProperties();
            Pic.NonVisualDrawingProperties nonVisualDrawingProperties1 = new Pic.NonVisualDrawingProperties() { Id = (UInt32Value)0U, Name = "AddTo_Blink.png" };
            Pic.NonVisualPictureDrawingProperties nonVisualPictureDrawingProperties1 = new Pic.NonVisualPictureDrawingProperties();

            nonVisualPictureProperties1.Append(nonVisualDrawingProperties1);
            nonVisualPictureProperties1.Append(nonVisualPictureDrawingProperties1);

            Pic.BlipFill blipFill1 = new Pic.BlipFill();

            A.Blip blip1 = new A.Blip() { Embed = relationshipID };

            A.BlipExtensionList blipExtensionList1 = new A.BlipExtensionList();

            A.BlipExtension blipExtension1 = new A.BlipExtension() { Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}" };

            A14.UseLocalDpi useLocalDpi1 = new A14.UseLocalDpi() { Val = false };
            useLocalDpi1.AddNamespaceDeclaration("a14", "http://schemas.microsoft.com/office/drawing/2010/main");

            blipExtension1.Append(useLocalDpi1);

            blipExtensionList1.Append(blipExtension1);

            blip1.Append(blipExtensionList1);

            A.Stretch stretch1 = new A.Stretch();
            A.FillRectangle fillRectangle1 = new A.FillRectangle();

            stretch1.Append(fillRectangle1);

            blipFill1.Append(blip1);
            blipFill1.Append(stretch1);

            Pic.ShapeProperties shapeProperties1 = new Pic.ShapeProperties();

            A.Transform2D transform2D1 = new A.Transform2D();
            A.Offset offset1 = new A.Offset() { X = 0L, Y = 0L };
            A.Extents extents1 = new A.Extents() { Cx = 152400L, Cy = 152400L };

            transform2D1.Append(offset1);
            transform2D1.Append(extents1);

            A.PresetGeometry presetGeometry1 = new A.PresetGeometry() { Preset = A.ShapeTypeValues.Rectangle };
            A.AdjustValueList adjustValueList1 = new A.AdjustValueList();

            presetGeometry1.Append(adjustValueList1);

            shapeProperties1.Append(transform2D1);
            shapeProperties1.Append(presetGeometry1);

            picture1.Append(nonVisualPictureProperties1);
            picture1.Append(blipFill1);
            picture1.Append(shapeProperties1);

            graphicData1.Append(picture1);

            graphic1.Append(graphicData1);

            inline1.Append(extent1);
            inline1.Append(effectExtent1);
            inline1.Append(docProperties1);
            inline1.Append(nonVisualGraphicFrameDrawingProperties1);
            inline1.Append(graphic1);

            drawing1.Append(inline1);
            return drawing1;

        }
段落段落=sdtToSave.SdtContentBlock.GetFirstChild();
运行=新运行();
附加(运行)段;
run.Append(this.GenerateDrawing(mainPart.GetIdOfPart(newPart));
专用图形生成绘图(字符串关系ID)
{
图纸drawing1=新图纸();
Inline inline1=new Inline(){DistanceFromTop=(uint32值)0U,distancefromtbottom=(uint32值)0U,distancefromtleft=(uint32值)0U,distancefromtright=(uint32值)0U};
区段extent1=新区段(){Cx=152400L,Cy=152400L};
EffectExtent effectExtent1=new EffectExtent(){LeftEdge=0L,TopEdge=0L,RightEdge=0L,BottomEdge=0L};
DocProperties docProperties1=newdocproperties(){Id=(UInt32Value)1U,Name=“Image 1”};
NonVisualGraphicFrameDrawingProperties NonVisualGraphicFrameDrawingProperties 1=新的NonVisualGraphicFrameDrawingProperties();
A.GraphicFrameLocks graphicFrameLocks1=新A.GraphicFrameLocks(){NoChangeAspect=true};
graphicFrameLocks1.AddNamespaceDeclaration(“a”)http://schemas.openxmlformats.org/drawingml/2006/main");
非可视FrameDrawing属性1.追加(graphicFrameLocks1);
A.图形1=新的A.图形();
图1.AddNamespaceDeclaration(“a”http://schemas.openxmlformats.org/drawingml/2006/main");
A.GraphicData graphicData1=新的A.GraphicData(){Uri=”http://schemas.openxmlformats.org/drawingml/2006/picture" };
Pic.Picture picture1=新Pic.Picture();
图1.AddNamespaceDeclaration(“pic”http://schemas.openxmlformats.org/drawingml/2006/picture");
Pic.NonVisualPictureProperties NonVisualPictureProperties 1=新Pic.NonVisualPictureProperties();
Pic.NonVisualDrawingProperties NonVisualDrawingProperties 1=新Pic.NonVisualDrawingProperties(){Id=(uint32值)0U,Name=“AddTo_Blink.png”};
Pic.NonVisualPictureDrawingProperties NonVisualPictureDrawingProperties 1=新Pic.NonVisualPictureDrawingProperties();
非可视图片属性1.追加(非可视绘图属性1);
非可视图片属性1.追加(非可视图片绘图属性1);
Pic.BlipFill blipFill1=新Pic.BlipFill();
A.Blip blip1=新的A.Blip(){Embed=relationshipID};
A.BlipExtensionList blipExtensionList1=新的A.BlipExtensionList();
A.BlipExtension blipExtension1=新的A.BlipExtension(){Uri=“{28A0092B-C50C-407E-A947-70E740481C}”;
A14.UseLocalDpi useLocalDpi1=new A14.UseLocalDpi(){Val=false};
useLocalDpi1.AddNamespaceDeclaration(“a14”http://schemas.microsoft.com/office/drawing/2010/main");
blipExtension1.Append(使用localdpi1);
追加(blipExtension1);
blip1.Append(blipExtensionList1);
A.拉伸拉伸1=新的A.拉伸();
A.FillRectangle fillRectangle1=新的A.FillRectangle();
stretch1.Append(fillRectangle1);
blipFill1.追加(blip1);
blipFill1.Append(stretch1);
Pic.ShapeProperties ShapeProperties 1=新Pic.ShapeProperties();
A.Transform2D transform2D1=新的A.Transform2D();
A.Offset offset1=新的A.Offset(){X=0L,Y=0L};
A.extents1=新的A.Extents(){Cx=152400L,Cy=152400L};
transform2D1.追加(抵销1);
transform2D1.Append(extents1);
A.PresetGeometry presetGeometry1=新A.PresetGeometry(){Preset=A.ShapeTypeValues.Rectangle};
A.AdjustValueList AdjustValueList 1=新的A.AdjustValueList();
预设几何1.追加(调整值列表1);
shapeProperties 1.Append(transform2D1);
ShapeProperties 1.追加(预设几何量1);
图1.附加(非可视图片属性1);
图1.追加(blipFill1);
图1.追加(ShapeProperties 1);
graphicData1.追加(图1);
graphic1.追加(graphicData1);
inline1.追加(extent1);
inline1.Append(effectExtent1);
inline1.Append(docProperties1);
inline1.Append(非可视化FrameDrawingProperties 1);
inline1.Append(图形1);
图1.追加(内联1);
回采1;
}
所有图像都显示在正文的末尾

从OXML SDK生产力工具中,我可以看到书签用于在段落中插入图像

总之,我想知道在将内容控件从标题移动到正文时如何保留图像


注意。

当您将图像部分添加到主部分时,将为其提供一个relId,该relId不太可能与标题部分中的relId相同。因此,您必须调整图形中的relId(Embed=relationshipID)以匹配。

这正是我需要做的:更改Blip的Embed属性以匹配添加的imagePart relationshipID。