이미지를 문서 본문에 복사 할 때를 포함하여 모든 상황에서 작동하는 코드가 있습니다.두 개의 Word 문서를 OpenXML SDK와 병합 중이지만 이미지를 머리글에 복사 할 때 손상된 문서가 표시됩니다.
코드는 복사되는 머리글/바닥 글에 이미지가없는 한 한 문서에서 다른 문서로 머리글과 바닥 글을 복사 (추가) 할 때 작동합니다.
이미지가있는 헤더를 복사하면 결과 파일이 손상되고 OpenXML SDK로 열려고하면 "압축 된 부분의 데이터 길이가 일치하지 않습니다."라는 예외가 발생합니다. 본문으로 복사 할 때 MainDocumentPart에 대한 것과 같이 이미지가 HeaderPart에서 만들어 져야한다는 것을 알고 있습니다.
이미지의 병합은 같은 모양을 수행하는 코드 : 소스 및 대상 HeaderParts을 통과라고 위의
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에서 드로잉 요소를 찾지 못한 경우).
머리글에있는 이미지의 증상이 아마도 빨간 청어인지 진짜 문제인지는 궁금합니다. 나는이 질문에 대한 코멘트에 말했듯이
솔루션에 조금 더 가깝습니다. 위의 코드 스 니펫은 실제로 필요한 것입니다. 문제는 올바른 SDK 호출을 가져 와서 XML에서 수행 한 작업과 ImageParts를 추가하여 출력 문서에 올바르게 기록되도록하는 것입니다. 아직 일하고 ... – Peter