2016-01-20 15 views
0

當我使用Aspose.Word將帶有多個圖像的.docx導出爲html時,我可以將這些圖像保存到MemoryStream中,例如,我可以.Save執行後,使用IImageSavingCallback作爲在Aspose中,將文檔導出爲html時,如何訪問流中的多個圖像

var imagesStream = new MemoryStream(); 
    var handleImageSaving = new HandleImageSaving(imagesStream);  
    options.ImageSavingCallback = handleImageSaving;   
    document.Save(stream, options); 


    public class HandleImageSaving : IImageSavingCallback 
    { 
     private MemoryStream m_images; 

     public HandleImageSaving(
      MemoryStream i_images) 
     { 
      m_images = i_images; 
     } 
     void IImageSavingCallback.ImageSaving(ImageSavingArgs args) 
     { 
      args.ImageStream = m_images; 
      args.KeepImageStreamOpen = true; 
     } 
    } 

,多個圖像存儲在imagesStream,現在我需要檢索圖像逐一從imagesStream,我該怎麼辦呢?

回答

0

請嘗試使用下面的示例:

Document doc = new Document(MyDir + @"input.docx"); 

MemoryStream htmlStream = new MemoryStream(); 
MemoryStream imagesStream = new MemoryStream(); 

HtmlSaveOptions options = new HtmlSaveOptions(SaveFormat.Html); 
var handleImageSaving = new HandleImageSaving(imagesStream); 
options.ImageSavingCallback = handleImageSaving; 

doc.Save(htmlStream, options); 

DocumentBuilder builder = new DocumentBuilder(); 
foreach (Stream imgStream in handleImageSaving.ImageStreams) 
{ 
    builder.InsertImage(imgStream); 
    builder.Writeln(); 
} 

builder.Document.Save(MyDir + @"15.12.0.docx"); 

而且HandleImageSaving類的定義如下

public class HandleImageSaving : IImageSavingCallback 
{ 
    public ArrayList ImageStreams; 
    private MemoryStream m_images; 

    public HandleImageSaving(MemoryStream i_images) 
    { 
     ImageStreams = new ArrayList(); 
     m_images = i_images; 
    } 
    void IImageSavingCallback.ImageSaving(ImageSavingArgs args) 
    { 
     Shape shape = (Shape)args.CurrentShape; 
     m_images = new MemoryStream(shape.ImageData.ImageBytes); 
     ImageStreams.Add(m_images); 

     args.ImageStream = m_images; 
     args.KeepImageStreamOpen = true; 
    } 
} 

希望,這會有所幫助。我以開發者傳播者的身份與Aspose合作。

+0

這個想法很有效,但由於某些原因,即使是圖像,shape.ImageData也是null,所以只需使用m_images = new MemoryStream()就可以工作,謝謝Awais! –

相關問題