2013-01-21 169 views
1

我開始用c#做我的第一張圖(jpg)。 我想直接插入到word文檔中。創建jpg並插入word文檔

我可以做到這一點,而不必將我的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。然後將該流傳遞給InsertAPicture而不是fileName參數。然後讀取流而不是創建FileStream

+0

以這種方式,我可以插入圖像,但它是腐敗的。如果我直接將memoryStream發送到文件中,這是正確的,但是如果我將它發送到InsertAPicture,它將不起作用。 – gorgonzola

+0

我已將MemoryStream轉換爲Byte []。它現在有效! – gorgonzola