2010-11-12 101 views
3

我試圖用openXML docx中的圖像替換文本元素佔位符。將XML字符串插入到openXML文檔中

我找到了一個教程here,它似乎在做我所需要的,但我並沒有完全按照他所做的來插入圖像。

基本上,我有一個存儲在字符串中的XML'圖像模板'。我可以在我的圖像存儲媒體文件夾,並插入圖片ID成XML字符串:

string imageNode 
     = _xml.Replace("##imageId##", documentMainPart.GetIdOfPart(newImage)); 

所以現在我有正確的XML作爲我需要插入到文檔中的字符串。

我能找到我想要用新的圖像XML

var placeholder = documentMainPart.Document.Body 
       .Descendants<DocumentFormat.OpenXml.Wordprocessing.Text>() 
       .Where(t => t.Text.Contains("##imagePlaceholder##")).First(); 

來代替我的佔位符文本節點但是,這是我卡住。我看不到如何做一個替換/插入將採取一個XML字符串。我已經成功地將我的XML輸出作爲文檔中的文本,但我以某種方式將其轉換爲XML元素。

回答

1

如果您問的是如何導入顯示圖像的XML,那麼它不應該是一個大問題。

如何存儲圖像雖然我不確定,但我想你必須在.docx裏的某個地方輸入一個合適的名稱,但我假設你通過閱讀你的文章知道這一點。

與圖像XML啄來替代佔位符容易

var parent = placeholder.Parent; 
parent.ReplaceChild(imageXML, placeholder); 

在這裏,你實際上是替換與文本標記圖像啄,但我不能確定,將如何工作。我知道一個圖像可能在運行標籤內,我認爲它是你的文本標籤的父母。

現在,如果您的XML命令是正確的,您應該可以。它應該是繪圖/內聯/圖形根我想。

請評論如果我誤解你的問題

1

要將字符串表示形式轉換到屬於XML文檔的XML節點,使用XmlDocument.CreateFragment:

XmlDocumentFragment docFrag = doc.CreateDocumentFragment(); 
docFrag.InnerXml = imageXML; 
placeholder.Parent.ReplaceChild(docFrag,placeholder);