我有代碼,在各種不同的情況下,將圖像複製到文檔中的身體的時候,包括工作時收到損壞的文件。我與合併OpenXML的SDK兩個Word文檔,但複製的圖像放入頭
複製代碼時(添加)的頁眉和頁腳從一個文檔到另一個,只要頁眉/複製頁腳不包含圖像的工作原理。
當我複製其中包含圖像的標題時,結果文件已損壞,當我嘗試用OpenXML SDK打開它時,它會引發異常,說「壓縮的部分數據長度不一致」。 我知道必須在HeaderPart中創建圖像(在複製到主體時與MainDocumentPart相對)。
它執行圖像的合併看起來像的代碼:
private void AddSourceImagesToDestination(XElement sourceXml, OpenXmlPart sourcePart, OpenXmlPart destPart) {
foreach(XElement drawingElement in sourceXml.Descendants(_mswDrawingElementName)) {
XAttribute aBlipEmbedAttribute = drawingElement.Descendants(_ablipElementName).First().Attribute(_embedAttributeName);
string relationshipId = aBlipEmbedAttribute.Value;
ImagePart sourceImagePart = (ImagePart)sourcePart.GetPartById(relationshipId);
ImagePart destinationImagePart = ((HeaderPart)destPart).AddImagePart(sourceImagePart.ContentType);
string newRelationshipId = destPart.GetIdOfPart(destinationImagePart);
aBlipEmbedAttribute.SetValue(newRelationshipId);
destinationImagePart.FeedData(sourceImagePart.GetStream(FileMode.Open, FileAccess.Read));
}
}
上面被稱爲傳遞源和目的地HeaderParts,並且將在此之後被複制到所述源標題的XML目的地文件。調用上述過程之後,將調用destinationHeaderPart.Header.Save()。
正如我前面所說,如果有在源頭中沒有圖像,則所得到的文檔是細(即,當在foreach沒有找到源XML任何繪圖元素)。
我不知道,不過,在頭圖像的這種症狀是否可能是一個紅色的鯡魚和真正的問題是其他地方。
我有一點接近解決方案 - 我包含的上述代碼片段實際上正是需要的。問題似乎在於獲得正確的SDK調用以同步我在XML中所做的操作以及添加ImageParts,以便它們可以正確寫入輸出文檔。仍在工作... – Peter 2012-03-27 11:02:01