我們系統需要產生 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:從零開始的軟體開發生活」
請大家繼續支持 ^_^