У меня есть код, который работает в самых разных ситуациях, в том числе при копировании изображений в текст документа.
Код работает при копировании (добавлении) верхних и нижних колонтитулов из одного документа в другой,до тех пор, пока копируемые верхние / нижние колонтитулы не содержат изображений.
Когда я копирую заголовок с изображением, полученный файл поврежден, и когда я пытаюсь открыть его с помощью 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));
}
}
Вышеуказанное называется передачей заголовка источника и получателя, а также XML заголовка источника, который после этого будет скопирован в целевой документ.После вызова описанной выше процедуры вызывается destinationHeaderPart.Header.Save ().
Как я уже говорил выше, если в исходном заголовке нет изображений, то с результирующим документом все в порядке (т. Е. Когда foreach не 'я не могу найти какие-либо элементы рисования в исходном XML).
Интересно, однако, является ли этот признак изображений в заголовке, возможно, красной сельдью, и настоящая проблема где-то еще.