2017-11-23 2 views
0

로컬 드라이브의 이미지를 워드 문서에 추가 할 수있는 방법을 찾았습니다. 내 문제는 내 서버에 업로드 된 온라인 이미지를 추가해야한다는 것입니다. 현재 응용 프로그램은 다음과 같습니다.OpenXml을 사용하여 Word 문서에 온라인 이미지 추가 C#

static void Main(string[] args) 
    { 

     string document = @"C:\Users\User\Desktop\hello.docx"; 
     string fileName = @"C:\Users\User\Desktop\img.PNG"; 
     InsertAPicture(document, fileName); 
    } 

    public static void InsertAPicture(string document, string fileName) 
    { 
     using (WordprocessingDocument wordprocessingDocument = 
      WordprocessingDocument.Open(document, true)) 
     { 
      MainDocumentPart mainPart = wordprocessingDocument.MainDocumentPart; 

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

      using (FileStream stream = new FileStream(fileName, FileMode.Open)) 
      { 
       imagePart.FeedData(stream); 
      } 

      AddImageToBody(wordprocessingDocument, mainPart.GetIdOfPart(imagePart)); 
     } 
    } 

    private static void AddImageToBody(WordprocessingDocument wordDoc, string relationshipId) 
    { 
     // Define the reference of the image. 
     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" 
       }); 

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

이 코드 또는 다른 코드를 사용하여 컴퓨터에있는 이미지 대신 온라인 이미지를 추가하려면 어떻게해야합니까? 코드 참조 : https://msdn.microsoft.com/en-us/library/bb497430.aspx

답변

0

로컬 임시 폴더에 이미지를 다운로드하고 로컬 이미지로 사용하고 더 이상 필요하지 않으면 제거하십시오. 이 솔루션을 사용할 수없는 경우이 문서를 검토 할 것을 권장합니다 (테스트하지 않았 음) in memory image load. 희망이 도움이됩니다.

관련 문제