OpenXML: проблема с добавлением изображений в документы - PullRequest
1 голос
/ 04 сентября 2011

До сих пор этот блок кода использовался для построения документов с текстом в течение нескольких месяцев без каких-либо препятствий. Я сейчас пытаюсь динамически добавлять изображения. Я потратил около двух дней, уставившись на код и исследуя, и сейчас все кончено. Я подозреваю, что проблема в том, что отношения не создаются (подробности ниже.)

   //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 () и использую ее как есть.

Когда я открываю получившийся документ, я вижу красные крестики, где изображения говорят: «Это изображение не может быть отображено в данный момент».

Когда я открываю zip, изображения будут отображаться в root / media, но не в root / word / media, как я ожидал. Я также не могу найти изображения, на которые есть ссылки ни в одном из файлов отношений. В идеале они должны быть в корне / word / _rels / document.xml.rels. Вы заметите, что я изменил настройку imageRelationshipID в надежде исправить это. Это не так.

Пожалуйста, помогите. Спасибо.

1 Ответ

2 голосов
/ 05 сентября 2011

Итак ... Похоже, OpenXML просто ненавидит меня. Я скопировал код AddImagePart примерно из 3-4 мест, пробуя другие вещи - ни одно из которых не длилось долго - и просто не мог получить отношения для формирования. Я вижу, что они автоматически происходят с функцией AddImagePart.

В итоге я сделал полный обходной путь, где я добавил все картинки, которые я мог бы хотеть поместить, и удалил родительские узлы рисования тех, которые мне не нужны (обычно запускаю узлы). Так как это очень маленькие картинки, это выполнимо и более элегантно, чем пытаться добавлять их по мере необходимости, поскольку мне не нужно отслеживать, где изображения хранятся на диске.

...