2011-07-20 20 views
0

我使用的是開放式XML SDK,我想將標題內容控件(包含圖像)的內容從標題移動到正文,圖像沒有移動後顯示。複製內容控制的內容後,我以這種方式將圖像部分:OOXML:在將標題內容移動到正文後保留圖像

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; 

     } 

所有圖像都在身體的最後面。

從OXML SDK生產力工具中,我可以看到書籤用於在段落內插入圖像。總結一下,我想知道如何在將內容控件從標題移動到主體時保留圖像。

問候。

回答

1

當您將圖像部件添加到mainPart時,它會得到一個relId,它不可能與它在headerPart中的relId相同。因此,您必須調整圖形中的relId(Embed = relationshipID)以匹配。

+0

這正是我需要做的:更改Blip的嵌入屬性以匹配添加的imagePart relationShipId。 – DevTun

相關問題