使用open xml和C#将图像插入到word文档中

时间:2012-02-06 05:38:48

标签: c# image ms-word openxml

我有以下代码尝试使用open xml:

将图像插入到word文档中
private void AddImageToBody(ImagePart imagePart)
{
    // Define the reference of the image.
    var element =
         new Drawing(
             new Inline(
                 new Extent() { Cx = ConvertToEmu(640), Cy = ConvertToEmu(480) },
                 new EffectExtent()
                 {
                     LeftEdge = 0L,
                     TopEdge = 0L,
                     RightEdge = 0L,
                     BottomEdge = 0L
                 },
                 new DocProperties()
                 {
                     Id = (UInt32Value)1U,
                     Name = "Picture 1"
                 },
                 new NonVisualGraphicFrameDrawingProperties(
                     new GraphicFrameLocks() { NoChangeAspect = true }
                 ),
                 new Graphic(
                     new GraphicData(
                         new Picture(
                             new NonVisualPictureProperties(
                                 new NonVisualDrawingProperties()
                                 {
                                     Id = (UInt32Value)0U,
                                     Name = "New Bitmap Image.jpg"
                                 },
                                 new NonVisualPictureDrawingProperties()),
                             new BlipFill(
                                 new Blip(
                                     new BlipExtensionList(
                                         new BlipExtension()
                                         {
                                             Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}"
                                         }
                                     )
                                 )
                                 {
                                     Embed = mainpart.GetIdOfPart(imagePart),
                                     CompressionState = BlipCompressionValues.Print
                                 },
                                 new Stretch(
                                     new FillRectangle()
                                 )
                             ),
                             new ShapeProperties(
                                 new Transform2D(
                                     new Offset() { X = 0L, Y = 0L },
                                     new Extents() { Cx = ConvertToEmu(640), Cy = ConvertToEmu(480) }
                                 ),
                                 new PresetGeometry(
                                     new AdjustValueList()
                                 ) { Preset = ShapeTypeValues.Rectangle }
                             )
                         )
                     ) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" }
                 )
             )
             {
                 DistanceFromTop = (UInt32Value)0U,
                 DistanceFromBottom = (UInt32Value)0U,
                 DistanceFromLeft = (UInt32Value)0U,
                 DistanceFromRight = (UInt32Value)0U
             });

            // Append the reference to body, the element should be in a Run.
            body.AppendChild(new Paragraph(new Run(element)));
        }

虽然我正在插入图像,但插入的图像显示为空白,而不是正确的宽度和高度。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

http://msdn.microsoft.com/en-us/library/bb497430.aspx尝试msdn“如何:将图片插入Word处理文档”。我可以使用此代码添加图像。

答案 1 :(得分:1)

我没有对任何值进行硬编码,但我将它们传递给添加图像的方法,如下面的代码所示。

private static void AddImageToRun(Run run, string imageFileName, long imageWidthEMU, long imageHeightEMU, string imageID)
        {
            try
            {
                string GraphicDataUri =http://schemas.openxmlformats.org/drawingml/2006/picture";

                var element =
                     new Drawing(
                         new DW.Inline(
                             new DW.Extent() { Cx = imageWidthEMU, Cy = imageHeightEMU },

                             new DW.EffectExtent()
                             {
                                 LeftEdge = 0L,
                                 TopEdge = 0L,
                                 RightEdge = 0L,
                                 BottomEdge = 0L
                             },
                             new DW.DocProperties()
                             {
                                 Id = (UInt32Value)1U,
                                 Name = imageFileName,
                                 Description = imageFileName
                             },
                             new DW.NonVisualGraphicFrameDrawingProperties(
                                 new A.GraphicFrameLocks() { NoChangeAspect = true }),

                             new A.Graphic(
                                 new A.GraphicData(
                                     new PIC.Picture(

                                         new PIC.NonVisualPictureProperties(
                                             new PIC.NonVisualDrawingProperties()
                                             {
                                                 Id = (UInt32Value)0U,

                                                 Name = imageFileName
                                             },
                                             new PIC.NonVisualPictureDrawingProperties()),

                                         new PIC.BlipFill(
                                             new A.Blip()
                                             {
                                                 Embed = imageID
                                             },
                                             new A.Stretch(
                                                 new A.FillRectangle())),
                                         new PIC.ShapeProperties(
                                             new A.Transform2D(
                                                 new A.Offset() { X = 0L, Y = 0L },

                                                 new A.Extents()
                                                 {
                                                     Cx = imageWidthEMU,
                                                     Cy = imageHeightEMU
                                                 }),

                                             new A.PresetGeometry(
                                                 new A.AdjustValueList()
                                             ) { Preset = A.ShapeTypeValues.Rectangle }))
                                 ) { Uri = GraphicDataUri })
                         )
                         {
                             DistanceFromTop = (UInt32Value)0U,
                             DistanceFromBottom = (UInt32Value)0U,
                             DistanceFromLeft = (UInt32Value)0U,
                             DistanceFromRight = (UInt32Value)0U,
                         });

                // Append the reference to body, the element should be in a Run.
                run.AppendChild(element);
            }
            catch (Exception ex)
            {
                throw;
            }
        }