C# 使用OpenXML向word文档添加图像

C# 使用OpenXML向word文档添加图像,c#,openxml,C#,Openxml,我开发了一个应用程序,可以在word文档中添加图像。它从word文档中获取一个副本,并将图片添加到副本中。我尝试添加文本,但效果很好,但通过添加图像,word文档希望打开一个文件,并给出了一个错误(由于内容存在问题,无法打开文件名) 我的代码如下所示: File.Copy(file, newFile, true); WordprocessingDocument wordFile = WordprocessingDocument.Open(newFile, true); Bod

我开发了一个应用程序,可以在word文档中添加图像。它从word文档中获取一个副本,并将图片添加到副本中。我尝试添加文本,但效果很好,但通过添加图像,word文档希望打开一个文件,并给出了一个错误(由于内容存在问题,无法打开文件名)

我的代码如下所示:

File.Copy(file, newFile, true);
     WordprocessingDocument wordFile = WordprocessingDocument.Open(newFile, true);
     Body body = wordFile.MainDocumentPart.Document.Body;

     var picture = new Picture();
     var shape = new Shape() { Style = "width: 20px; height: 20px" };
     var imageData = new ImageData() { RelationshipId = "img" };

     shape.Append(imageData);
     picture.Append(shape);
     wordFile.MainDocumentPart.AddExternalRelationship(
          "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
           new Uri(link_of_image, UriKind.Absolute),"img");

     Paragraph para = body.AppendChild(new Paragraph());
     Run run = para.AppendChild(new Run());
     run.AppendChild(new Picture(picture));

     wordFile.Close();

有什么问题吗?

此解决方案用于在本地驱动器上添加映像,但我不知道如何从在线服务器添加映像 解决方案: 首先添加这些程序集:

using System.IO;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using A = DocumentFormat.OpenXml.Drawing;
using DW = DocumentFormat.OpenXml.Drawing.Wordprocessing;
using PIC = DocumentFormat.OpenXml.Drawing.Pictures;
然后打开文件

        WordprocessingDocument wordprocessingDocument =
        WordprocessingDocument.Open(newFile, true);

        MainDocumentPart mainPart = wordprocessingDocument.MainDocumentPart;
        ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Jpeg);

        using (FileStream stream = new FileStream(@"C:\Users\User\Desktop\img.PNG", FileMode.Open))
        {
            imagePart.FeedData(stream);
        }
        AddImageToBody(wordprocessingDocument, mainPart.GetIdOfPart(imagePart));

        wordprocessingDocument.Close();
然后定义图像的引用并将引用附加到主体

var element =
     new Drawing(
         new DW.Inline(
             new DW.Extent() { Cx = 990000L, Cy = 792000L },
             new DW.EffectExtent()
             {
                 LeftEdge = 0L,
                 TopEdge = 0L,
                 RightEdge = 0L,
                 BottomEdge = 0L
             },
             new DW.DocProperties()
             {
                 Id = (UInt32Value)1U,
                 Name = "Picture 1"
             },
             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 = "New Bitmap Image.jpg"
                             },
                             new PIC.NonVisualPictureDrawingProperties()),
                         new PIC.BlipFill(
                             new A.Blip(
                                 new A.BlipExtensionList(
                                     new A.BlipExtension()
                                     {
                                         Uri =
                                           "{28A0092B-C50C-407E-A947-70E740481C1C}"
                                     })
                             )
                             {
                                 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 = 990000L, Cy = 792000L }),
                             new A.PresetGeometry(
                                 new A.AdjustValueList()
                             ) { Preset = A.ShapeTypeValues.Rectangle }))
                 ) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" })
         )
         {
             DistanceFromTop = (UInt32Value)0U,
             DistanceFromBottom = (UInt32Value)0U,
             DistanceFromLeft = (UInt32Value)0U,
             DistanceFromRight = (UInt32Value)0U,
             EditId = "50D07946"
         });

wordDoc.MainDocumentPart.Document.Body.AppendChild(new Paragraph(new Run(element)));

参考

这里的“图像链接”是什么?它应该是有效的文件路径吗?该图像是否存在?@KerriBrown该图像在计算机上不存在。例如,它是一个指向上传到服务器的图像的链接(“something.com/Images/image.png”),您还可以进行其他调查。例如,尝试存储在本地计算机上的图像,删除“wordFile.MainDocumentPart.AddExternalRelationship”并查看是否仍然出现错误等。