Объедините несколько стилей Word Document в один Open Xml

В настоящее время я работаю над проектом, в котором объединяю 3 документа в один новый. Чтобы добавить их, я создаю метод AltChunk для хранения документов.

Мой вопрос заключается в том, что между этими тремя стилями существует конфликт. Под этим я подразумеваю, что я сохраняю один с таблицей, которая имеет красный текст внизу. Однако после того, как эти три слились воедино в новый, стиль этого документа будет сброшен в простой черный текст. Есть ли способ объединить стилизацию всех трех в этот новый документ?

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

using (WordprocessingDocument package = WordprocessingDocument.Create(fileName, DocumentFormat.OpenXml.WordprocessingDocumentType.Document))
{
    ...
    #region Append Non-Standard Section Template
    var nssAltChunkId = "AltChunkIdNSS" + this.AopPlanId.Value.ToString();
    var nssChunk = package.MainDocumentPart.AddAlternativeFormatImportPart(
                     AlternativeFormatImportPartType.WordprocessingML, nssAltChunkId);
    using (var fileStream = new MemoryStream(nssBuffer))
    {
        nssChunk.FeedData(fileStream);
    }

    var nssAltChunk = new DocumentFormat.OpenXml.Wordprocessing.AltChunk();
    nssAltChunk.Id = nssAltChunkId;
    package.MainDocumentPart.Document.Body.InsertAfter(nssAltChunk, package.MainDocumentPart.Document.Body.Elements<Paragraph>().Last());
    #endregion

    ... //Next 2 documents are the same way

    package.MainDocumentPart.Document.Save();
}

Любая помощь будет оценена. Благодарю.

Изменить: я перешел на использование DocumentBuilder из PowerTools, однако, это по-прежнему не решает проблему слияния стилей. Мы ценим любые предложения.

1 ответ

Решение

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

  1. Word сохранит прямое форматирование (например, нажатие полужирным шрифтом или курсивом)

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

Я предполагаю, что (2) это ситуация, с которой вы столкнулись. Единственный способ сохранить определения стилей - это сначала дать стилям разные имена / определить другой набор стилей и применить их к тексту вместо существующих стилей. Например, если стиль Normal двух документов определен по-разному, вам необходимо скопировать определение стиля в новый стиль (например, Normal1), а затем заменить идентификатор, используемый для Normal в различных частях, составляющих документ, на идентификатор используется для Normal1.

Я никогда не пытался переименовать идентификатор и имя в Normal, чтобы вам не понадобился последний шаг. Но вам может потребоваться создать стиль Normal с использованием "старого" идентификатора и имени, так как Word ожидает, что он будет в документе. (Но вы можете попробовать и без, так как Word может создать его автоматически, не думая, что документ недействителен).

Другие вопросы по тегам