Повторно используемые методы для управления абзацами в WordprocessingML

В своей предыдущей записи я показал вам, друзья, простейший способ объединения нескольких документов Word в один итоговый документ с помощью возможностей класса altChunks. Однако при использовании altChunks возникает одна проблема: чтобы просмотреть итоговый документ, вам потребуется приложение (например, Microsoft Word), которое способно распознать altChunks и выполнить сложные задачи объединения. А что произойдет, если вы лишены счастливой возможности использовать Word или любое другое приложение, распознающее altChunks? В таком случае вам придется вручную объединять документы.

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

  • Стили
    • Определены ли для содержимого какие-либо стили?
    • В целевом документе есть ссылки на эти стили?
    • Не возникает ли конфликтов стилей между исходным и целевым документами? Такие конфликты могут возникать, например, если в исходном документе для стиля "Foo" определено полужирное начертание, а в целевом документе для стиля с тем же именем определен курсив.
    • Не отличаются ли в исходном и целевом файлах определения стилей по умолчанию и стиля "Обычный"?
  • Нумерация
    • Определена ли для содержимого какая-либо нумерация?
    • Имеется ли в исходном документе определение нумерации, которое уже содержится в целевом документе?
    • Как требуется поступить с нумерацией копируемого содержимого: продолжить ее или начать сначала?
  • Ссылки
    • Имеются ли в содержимом ссылки на другие элементы, такие как изображения, примечания, верхние и нижние колонтитулы и пр.?
  • Элементы на основе диапазонов
    • Имеются ли в содержимом элементы на основе диапазонов, такие как закладки, элементы управления содержимым, настраиваемые XML-элементы и пр.?

Проблемы, которые необходимо решить в процессе объединения документов вручную, далеко не ограничиваются перечисленными выше сложностями. Похоже, вам предстоит большая работа, однако у меня есть хорошая новость.

Не так давно Эрик Уайт (Eric White) опубликовал запись, в которой он рассказал о расширении средств Power Tools для Open XML с целью реализации таких функций, как управление абзацами, а также их вставка и удаление в текстовых документах. Одно из великолепных преимуществ средств Power Tools состоит в том, что их исходный код полностью открыт в соответствии с общедоступной лицензией Майкрософт (Ms-PL). Это означает, что вы можете свободно развертывать решения, в которых используется любой код Power Tools. Другим удобством этих средств является то, что они построены на основе пакета SDK версии 1, который предоставляет лицензию на распространение. Другими словами, ничто не мешает вам повторно использовать любой код средств Power Tools в собственных решениях. Возможно, в одной из будущих записей я рассмотрю использование этих библиотек для реализации многофункционального комплексного сценария.

Планы на будущее

В своей прошлой записи я получил просьбу от Энтони Рубалькаба (Anthony Rubalcaba) опубликовать запись, посвященную копированию электронных таблиц внутри книги. Поэтому на следующей неделе я продемонстрирую, как можно реализовать этот сценарий.

Зияд Раджаби (Zeyad Rajabi)

Это локализованная запись блога. Исходную статью можно найти по адресу https://blogs.msdn.com/brian_jones/archive/2009/02/13/reusable-methods-for-manipulating-paragraphs-in-wordprocessingml.