Объедините несколько стилей 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, от того, как обрабатывать конфликты форматирования. Основываясь на информации, которую вы предоставляете, трудно точно знать, какова ситуация с этими документами, но вот несколько практических правил:
Word сохранит прямое форматирование (например, нажатие полужирным шрифтом или курсивом)
Когда входящие документы имеют стили с тем же именем, что и стили, уже присутствующие в целевом документе, входящие стили будут принимать определения стилей в целевом документе. Это сделано специально, так как Word задумывался как инструмент для создания документов, а не как инструмент для архивирования.
Я предполагаю, что (2) это ситуация, с которой вы столкнулись. Единственный способ сохранить определения стилей - это сначала дать стилям разные имена / определить другой набор стилей и применить их к тексту вместо существующих стилей. Например, если стиль Normal двух документов определен по-разному, вам необходимо скопировать определение стиля в новый стиль (например, Normal1), а затем заменить идентификатор, используемый для Normal в различных частях, составляющих документ, на идентификатор используется для Normal1.
Я никогда не пытался переименовать идентификатор и имя в Normal, чтобы вам не понадобился последний шаг. Но вам может потребоваться создать стиль Normal с использованием "старого" идентификатора и имени, так как Word ожидает, что он будет в документе. (Но вы можете попробовать и без, так как Word может создать его автоматически, не думая, что документ недействителен).