Документ Word, не отображающий верхний и нижний колонтитулы и изображения при использовании WordProcessingDocument - PullRequest
0 голосов
/ 19 февраля 2020

Я использую WordprocessingDocument для чтения и записи содержимого в текстовый документ, но когда я открываю документ с использованием MemoryStream, он не показывает мне изображения и верхний / нижний колонтитулы, которые уже есть в текстовом документе. Ниже приведен код для того же.

private void AddReport(MainDocumentPart parent, MemoryStream report)
        {
            using (MemoryStream editingMemoryStream = new MemoryStream())
            {
                report.Position = 0;
                report.CopyTo(editingMemoryStream);
                editingMemoryStream.Position = 0;
                using (WordprocessingDocument newDoc = WordprocessingDocument.Open(editingMemoryStream, true))
                {
                    WP.Body Template = newDoc.MainDocumentPart.Document.Body;
                    var Main = newDoc.MainDocumentPart;
                    var cloneTemplate = Template.CloneNode(true);

                    parent.Document.Body.PrependChild(new WP.Paragraph(new WP.Run(cloneTemplate)));
                    parent.Document.Save();
                }
            }
        }

Снимок экрана для документа word: введите описание изображения здесь В этом родительском документе находится документ, в котором я ожидаю выше документ. Любая помощь будет оценена. Заранее спасибо.

1 Ответ

0 голосов
/ 19 февраля 2020

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

Вся эта информация хранится в отдельных частях "xml msgstr "содержится в" пакете zip "файла Word. Часть Body содержит только ссылки (идентификаторы отношений, перечисленные в части "rel", указывают / ссылаются на соответствующую часть xml, содержащуюся в пакете).

Это может быть это можно увидеть, открыв документ в Инструменте повышения производительности Open XML SDK и проверив базовый текст Word Open XML.

. Чтобы скопировать такой контент в другой документ, необходимо клонировать не только тело, но и каждая соответствующая xml часть с содержимым, которое вы хотите иметь, в то же время динамически генерируя необходимые отношения - не тривиальное обязательство. Здесь и в других местах в Inte rnet (включая мой блог WordMeister) есть сообщения, демонстрирующие основы того, как это делается, которые вы можете использовать в качестве отправной точки для понимания требуемого подхода.

Или, в зависимости от того, что является родительским документом, может иметь смысл начинать с копии «нового» документа и редактировать его с другим содержимым.

FWIW и упомянутое здесь для полноты: объектная модель COM будет делать то, что описано - копировать тело документа и вставлять в другой документ переносит всю эту информацию. Но приложение Word выполняет всю «тяжелую работу», которую разработчик должен кодировать при использовании Open XML SDK.

...