Документы в WPF

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

Типы документов

WPF разделяет документы на две основные категории на основе их предполагаемого использования; эти категории документов называются "документы фиксированного формата" и "документы нефиксированного формата".

Документы фиксированного формата предназначены для сфер применения, требующих точного представления (WYSIWYG) независимо от используемого дисплея или принтера. Документы фиксированного формата используются в компьютерной верстке, текстовой обработке и макетах форм, где строгое соответствие дизайну исходной страницы имеет критическое значение. При использовании такого макета документ фиксированного формата сохраняет точное расположение элементов содержимого независимо от используемого устройства изображения или печати. Так, страница документа фиксированного формата, отображаемая на дисплее 96 точек на дюйм, будет совершенно одинаково отображаться на лазерном принтере 600 точек на дюйм и фотонаборной машине 4800 точек на дюйм. Макет страницы остается неизменным во всех случаях, хотя качество документа повышается с учетом возможностей устройства.

Для сравнения: документы нефиксированного формата предназначены для повышения удобства просмотра и чтения; их лучше всего использовать, когда в работе с документом важнее всего удобство чтения. Вместо того чтобы использовать какой-либо определенный макет, документы нефиксированного формата динамически корректируют и перемещают содержимое с учетом переменных времени выполнения, таких как размер окна, разрешение устройства и дополнительные пользовательские настройки. Веб-страница — это простой пример документа нефиксированного формата, содержимое на которой динамически форматируется, чтобы уместиться в окне. Документы нефиксированного формата оптимизируют просмотр и чтение для пользователя в зависимости от среды выполнения. Например, один и тот же документ нефиксированного формата будет динамически переформатирован, чтобы обеспечить оптимальную читаемость на дисплее высокого разрешения 19 дюймов или небольшом экране PDA размером 2 x 3 дюйма. Кроме того, документы нефиксированного формата имеют несколько встроенных возможностей, включая поиск, режимы просмотра, оптимизирующие читаемость, и возможность менять размер и внешний вид шрифта. См. иллюстрации, примеры и подробное описание документов нефиксированного формата в разделе Общие сведения о документах нефиксированного формата.

Элементы управления документами и макеты текста

Платформа .NET предоставляет набор готовых элементов управления, упрощающих использование документов фиксированного и нефиксированного форматов и работу с текстом в приложении в принципе. Отображение содержимого документа фиксированного формата обеспечивается элементом управления DocumentViewer. Отображение содержимого документа нефиксированного формата обеспечивается тремя элементами управления: FlowDocumentReader, FlowDocumentPageViewer и FlowDocumentScrollViewer, которые соответствуют разным пользовательским сценариям (см. разделы ниже). Другие элементы управления WPF предоставляют упрощенную разметку для стандартных способов использования текста (см. раздел Текст в пользовательском интерфейсе ниже).

Элемент управления документом фиксированного формата DocumentViewer

Элемент управления DocumentViewer предназначен для отображения содержимого FixedDocument. Элемент управления DocumentViewer предоставляет интуитивный интерфейс пользователя со встроенной поддержкой стандартных операций, включая вывод на печать, копирование в буфер обмена, масштабирование и функции текстового поиска. Элемент управления предоставляет доступ к страницам содержимого через знакомый механизм прокрутки. Как и все элементы управления WPF, DocumentViewer поддерживает полное или частичное изменение стиля, благодаря чему этот элемент управления можно интегрировать практически в любое приложение или среду.

DocumentViewer предназначен для отображения содержимого в режиме "только чтение"; редактирование и изменение содержимого недоступно и не поддерживается.

Элементы управления документа нефиксированного формата

Примечание.

Дополнительные сведения о функциях документов нефиксированного формата и создании таких документов см. в разделе Общие сведения о документах нефиксированного формата.

Отображение содержимого документа нефиксированного формата обеспечивается тремя элементами управления: FlowDocumentReader, FlowDocumentPageViewer и FlowDocumentScrollViewer.

FlowDocumentReader

Элемент управления FlowDocumentReader включает функции, которые позволяют пользователю динамически переключаться между разными режимами просмотра, в том числе постраничным режимом (одна страница), двухстраничным режимом (книжный формат чтения) и непрерывной прокруткой (без нижней границы). Дополнительные сведения о таких режимах просмотра см. в разделе FlowDocumentReaderViewingMode. Если возможность динамически переключаться между разными режимами просмотра не требуется, элементы управления FlowDocumentPageViewer и FlowDocumentScrollViewer предоставляют облегченные средства просмотра содержимого документов нефиксированного формата, которые зафиксированы в определенном режиме просмотра.

FlowDocumentPageViewer и FlowDocumentScrollViewer

FlowDocumentPageViewer отображает содержимое в постраничном режиме просмотра, а FlowDocumentScrollViewer — в режиме непрерывной прокрутки. Средства FlowDocumentPageViewer и FlowDocumentScrollViewer зафиксированы в определенном режиме просмотра. Сравните со средством просмотра FlowDocumentReader, которое включает функции для динамического переключения между разными режимами просмотра (как перечисление FlowDocumentReaderViewingMode), однако является более ресурсоемким, чем FlowDocumentPageViewer или FlowDocumentScrollViewer.

По умолчанию вертикальная полоса прокрутки отображается всегда, а горизонтальная полоса прокрутки становится видимой при необходимости. Пользовательский интерфейс по умолчанию для FlowDocumentScrollViewer не включает панель инструментов; однако свойство IsToolBarVisible можно использовать для включения встроенной панели инструментов.

Текст в пользовательском интерфейсе

Текст можно добавлять не только в документы, но и использовать в интерфейсе приложений, например в формах. В WPF имеется множество элементов управления для рисования текста на экране. Каждый элемент управления предназначен для своего сценария и имеет собственный список функций и ограничений. Как правило, элемент TextBlock следует использовать, если требуется ограниченная поддержка текста, например короткого предложения в пользовательском интерфейсе. Label можно использовать, если требуется минимальная поддержка текста. Дополнительные сведения см. в разделе Общие сведения о классе TextBlock.

Упаковка документов

API System.IO.Packaging предоставляет эффективные средства упорядочивания данных приложения, содержимого документов и сопутствующих ресурсов в одном портативном контейнере с возможностью удобного доступа и распространения. ZIP-файл — это пример типа Package, который может удерживать несколько объектов как единый блок. API упаковки предоставляет реализацию ZipPackage по умолчанию, спроектированную с использованием стандарта Open Packaging Conventions с архитектурой файлов XML и ZIP. API упаковки WPF упрощает создание пакетов, хранение в них объектов и осуществление доступа к таким объектам. Объект, хранящийся в пакете Package, называется PackagePart ("частью"). Пакеты также могут включать подписанные цифровые сертификаты, с помощью которых можно идентифицировать создателя части и убедиться, что содержимое пакета не было изменено. Пакеты также включают функцию PackageRelationship, позволяющую добавлять в пакет дополнительную информацию или связывать ее с определенными частями, не меняя содержимое существующих частей. Службы пакета также поддерживают Microsoft Windows Rights Management (RM).

Архитектура пакета WPF лежит в основе ряда ключевых технологий:

  • Документы XPS, соответствующие стандарту XML Paper Specification (XPS).

  • Документы открытого XML-формата Microsoft Office "12" (.docx).

  • Пользовательские форматы хранения для собственного приложения.

В зависимости от API упаковки документ XpsDocument предназначен для хранения документов с фиксированным содержимым WPF. Документ XpsDocument — это самостоятельный документ, который можно открыть в средстве просмотра, отобразить в элементе управления DocumentViewer, перенаправить в очередь печати или вывести непосредственно на совместимый с XPS принтер.

В следующих разделах представлены дополнительные сведения о API Package и XpsDocument, предоставляемых WPF.

Компоненты пакета

Интерфейсы API упаковки WPF позволяют упорядочить данные и документы приложения в единый портативный блок. ZIP-файл является одним из наиболее распространенных типов пакетов и типом пакета по умолчанию, предоставляемым WPF. Package является абстрактным классом, на основе которого с использованием соответствующей открытым стандартам архитектуры файлов XML и ZIP реализован класс ZipPackage. Метод Open использует класс ZipPackage для создания и использования ZIP-файлов по умолчанию. Пакет может содержать три основных типа элементов:

Элемент Description
PackagePart Содержимое приложения, данные, документы и файлы ресурсов.
PackageDigitalSignature [Сертификат X.509] для идентификации, аутентификации и проверки.
PackageRelationship Добавленные сведения о пакете или определенной части.

PackageParts

PackagePart ("часть") — это абстрактный класс, который относится к объекту, хранимому в классе Package. В ZIP-файле части пакета соответствуют отдельным файлам, хранящимся в ZIP-файле. ZipPackagePart предоставляет реализацию по умолчанию для сериализуемых объектов, хранящихся в классе ZipPackage. Как и в файловой системе, части, которые содержатся в пакете, хранятся в иерархическом каталоге или организованы по папкам. С помощью API упаковки WPF приложения могут записывать, хранить и считывать несколько объектов PackagePart, используя один контейнер в виде ZIP-файла.

PackageDigitalSignatures

В целях безопасности класс PackageDigitalSignature ("цифровая подпись") можно связать с частями в составе пакета. Класс PackageDigitalSignature включает сертификат [509], который выполняет две функции:

  1. Идентификация и проверка подлинности создателя части.

  2. Проверка, не была ли часть изменена.

Цифровая подпись не защищает часть от изменения, но проверка цифровой подписи завершится ошибкой, если часть изменяется каким-либо образом. В таком случае приложение может предпринять соответствующие действия, например не допустить открытия части или уведомить пользователя об изменении (и, следовательно, ненадежности) части.

PackageRelationships

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

  • Фактический тип части и схема содержимого неизвестны.

  • Даже если эти параметры известны, схема содержимого может не обеспечивать средства для добавления новых данных.

  • Часть может быть защищена от изменений цифровой подписью или шифрованием.

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

  1. Определение отношений зависимости между частями.

  2. Определение информационных отношений, добавляющих примечания или другие данные, связанные с частью.

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

Отношения зависимости

Отношения зависимости используются для описания зависимостей между частями. Например, пакет может содержать HTML-часть, которая включает один или несколько тегов изображений <img>. Теги изображений относятся к изображениям, которые хранятся как части внутри пакета или вне его (например, части, доступные через Интернет). Создание класса PackageRelationship, связанного с HTML-файлом, ускоряет и упрощает обнаружение зависимых ресурсов и доступ к ним. Браузер или приложение средства просмотра может осуществлять прямой доступ к отношениям частей и сразу приступать к сборке зависимых ресурсов, даже не зная схемы и не выполняя синтаксического анализа документа.

Информационные отношения

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

XPS-документы

Документ XML Paper Specification (XPS) — это пакет, который содержит один или несколько фиксированных документов и все ресурсы и сведения, необходимые для отображения. XPS также является собственным форматом файлов в очереди на печать Windows Vista. Класс XpsDocument хранится в стандартном наборе данных ZIP и может включать комбинацию из XML-компонентов и двоичных компонентов, таких как файлы изображений и шрифтов. PackageRelationships используются для определения зависимостей между содержимым и ресурсами, необходимыми для полного отображения документа. Структура XpsDocument предоставляет единое многофункциональное решение высокой надежности для работы с документами:

  • Чтение, запись и хранение содержимого и ресурсов документов фиксированного формата в одном портативном документе с возможностью удобного распространения.

  • Отображение документов в приложении средства просмотра XPS.

  • Вывод документов в собственном формате вывода в очередь на печать Windows Vista.

  • Перенаправление документов непосредственно на совместимый с XPS принтер.

См. также