[.NET]透過 Aspose.Words 置換Word中的圖片

我們系統需要產生 Word 文件,並在 表格中 放入跨 Cell 的圖片(文繞圖)。如下圖所示,

本來想設定 bookmark 再動態加入,但這樣要由程式來調整圖片文繞圖所在位置實在不容易。

而且那個文繞圖的 Anchor 又會亂跑去擾亂別的 Cell 中的文字。

所以就建議一開始就將該圖加入到範本檔中,這樣就可以不用理會這麼麻煩的文繞圖了。

但是,因為客戶要需要的是,在測試機上產生出來的是一種圖,在正式機產生出來的又是另一個圖,

這樣才知道報表是正式還是測試機產生出來的 ... 

有看到 Aspose.Words 有提供取出 Word 檔中的圖片,並加以置換的方式(Shape.ImageData.SetImage),

詳細可以參考:Replace Image in Word document

但問題是,我的範本中有2個不同的圖要換,

我要如何知道取出的圖是那一個圖呢?

這時發現, Shape 有一個 AlternativeText 屬性,

所以我們可以在範本上,設定圖片「替代文字」屬性的「描述」內容,如下,

這樣我就可以依 Shape.AlternativeText 來置換不同的圖了,如下,

程式如下,先開啟套好的Word檔,然後將圖片給換掉,

Aspose.Words.License license = new Aspose.Words.License();
license.SetLicense("Aspose.Words.lic");
Document doc = new Document(@"d:\test.docx");
DocumentBuilder builder = new DocumentBuilder(doc);
NodeCollection shapes = doc.GetChildNodes(NodeType.Shape, true);
foreach (Aspose.Words.Drawing.Shape nshape in shapes)
{
	//Console.WriteLine(nshape.AlternativeText); 
	switch( nshape.AlternativeText)
	{
		case "img1":
			nshape.ImageData.SetImage(@"d:\img3.png");
			break;
		case "img2":
			nshape.ImageData.SetImage(@"d:\img4.png");
			break;
	}
}
doc.Save(@"d:\testResult.docx");

參考資料

Replace Image in Word document

DocumentBuilder.InsertImage Method (String)

 

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^