2013-01-21 2 views
1

C#으로 첫 번째 그리기 (jpg)를 시작합니다. 워드 문서에 직접 삽입하고 싶습니다.jpg를 만들고 워드 문서에 삽입하십시오.

jpg를 임시 디렉토리에 저장하지 않고도 그렇게 할 수 있습니까? 이 순간에

, 내가 임시 디렉토리 만 이미지를로드 할 수 있습니다

 public void InsertAPicture(string document, string fileName, string bookmarkName) 
    { 
     Paragraph newParag = null; 

     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); 
      } 

      newParag = AddImageToBody(wordprocessingDocument, mainPart.GetIdOfPart(imagePart)); 

      replaceBookmarkText(wordprocessingDocument, bookmarkName, newParag); 
     } 
    } 

    private Paragraph 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" 
       }); 


     return new Paragraph(new Run(element));    
    }   

    private void replaceBookmarkText(WordprocessingDocument doc, string bookmarkName, Paragraph text) 
    { 
     var t = (from el in doc.MainDocumentPart.RootElement.Descendants<BookmarkStart>() 
       where (el.Name == bookmarkName) && 
       (el.NextSibling<Run>() != null) 
       select el).First(); 

     t.NextSibling<Run>().Append(text); 
    } 

이, 나는이 방법으로 그래픽 이미지 생성 :

Bitmap objBitmap; 
Graphics objGraphics; 

//Create object 
objBitmap = new Bitmap(200, 5); 
objGraphics = Graphics.FromImage(objBitmap); 
//Draw line 
objGraphics.DrawLine(new Pen(Color.Red), 0, 0, 200, 200); 
//Save 
objBitmap.Save(Response.OutputStream, ImageFormat.Jpeg); 

objGraphics.Dispose(); 
objBitmap.Dispose(); 

어떻게 내가 내 InsertAPicture 방법에 보낼 수 있습니다 내 이미지 경로 파일 대신 그래픽 객체가 필요합니까?

+0

문서에 삽입하는 방법은 무엇입니까? 또한, 지금까지 무엇을 시도 했습니까? – Th0rndike

+0

우리가 무엇을 시도했는지 보여 주시겠습니까? – Luv

답변

1

MemoryStream에 이미지를 저장해야합니다. 그런 다음 fileName 매개 변수 대신 해당 스트림을 InsertAPicture에 전달합니다. 그런 다음 스트림을 읽지 않고 FileStream

+0

그런 식으로 이미지를 삽입 할 수 있지만 손상되었습니다. memoryStream을 파일에 직접 보내면 올바르지 만 InsertPicture로 보내면 작동하지 않습니다. – gorgonzola

+0

Byte []에서 MemoryStream을 변환했습니다. 이제 작동합니다! – gorgonzola