До сих пор этот блок кода использовался для создания документов с текстом в течение нескольких месяцев без каких-либо проблем. Сейчас я пытаюсь динамически добавлять изображения. Я провел около двух дней, разглядывая код и исследуя его, и на этом я закончил. Я подозреваю, что проблема в том, что отношения не создаются (подробнее ниже). Может быть, нет?
//set stuff up...
WordprocessingDocument doc = WordprocessingDocument.Open(fsPat, true, new OpenSettings(){
AutoSave = true,
MarkupCompatibilityProcessSettings = new MarkupCompatibilityProcessSettings(MarkupCompatibilityProcessMode.ProcessAllParts,
DocumentFormat.OpenXml.FileFormatVersions.Office2007),
MaxCharactersInPart = long.MaxValue
});
MainDocumentPart mainPart = doc.MainDocumentPart;
.
.Other stuff goes here
.
//now the fun...
Run r2 = new Run();
// Add an ImagePart.
ImagePart ip = mainPart.AddImagePart(ImagePartType.Png);
string imageRelationshipID = mainPart.CreateRelationshipToPart(ip); //
using (Stream imgStream = ip.GetStream())
{
System.Drawing.Bitmap b = new System.Drawing.Bitmap("myfile.png");
b.Save(imgStream, System.Drawing.Imaging.ImageFormat.Png);
}
Drawing drawing = BuildImage(imageRelationshipID, "name"+imageRelationshipID.ToString(), 17, 17);
r2.Append(drawing);
p.Append(r2);
Часть изображения по существу скопирована с http://blog.stuartwhiteford.com/?p=33) и в настоящее время работает в цикле. Я также скопировал его функцию BuildImage() и использую ее как есть.
Когда я открываю полученный docx, я вижу красные крестики там, где изображения говорят: «В настоящее время это изображение не может быть отображено».
Когда я открою zip, изображения появятся в корне/носителе, но не в корне/слове/носителе, как я ожидал. Я также не могу найти изображения, на которые есть ссылки ни в одном из файлов отношений. В идеале они должны быть в root/word/_rels/document.xml.rels. Вы заметите, что я изменил способ установки imageRelationshipID в надежде исправить это. Это не так.
Пожалуйста помоги. Спасибо.