Поделиться через


Общие сведения о печати

Обновлен: Ноябрь 2007

С Microsoft .NET Framework разработчики приложений с помощью WPF (Windows Presentation Foundation) имеют новый богатый набор для печати и API-интерфейсы системного управления печатью. С Windows Vista некоторые из этих системных возможностей печати также доступны для разработчиков, создающих приложения Windows Forms, и разработчиков, использующих неуправляемый код. Основой этих новых функциональных возможности является новый формат файла Формат XPS (XML Paper Specification) и способ печати XPS.

В этом разделе содержатся следующие подразделы.

  • Об инструкции XPS

  • Процесс печати с использованием XPS

  • Процесс печати с использованием GDI

  • Драйверная модель XPSDrv

  • Связанные темы

Об инструкции XPS

XPS является форматом электронного документа, форматом файла спулинга и языком описания страниц. Это формат открытого документа, который использует XML, Спецификации OPC (Open Packaging Conventions) и другие отраслевые стандарты для создания кроссплатформенных документов. XPS упрощает процесс создания цифровых документов, совместное использование, печать, просмотр и архивацию. Дополнительные сведения о XPS содержатся на Веб-узле XPS.

Несколько методов печати содержимого на основе XPS с использованием WPF, продемонстрированы в примере Печать документа XPS и в разделе Как печатать файлы XPS программным способом. Ссылки этих примеров могут пригодиться во время просмотра содержимого в этом разделе. (Разработчикам неуправляемого кода следует смотреть справку для escape-функции вызова преобразователя документов XPS (Майкрософт). Разработчики Windows Forms должны использовать API-интерфейс в пространстве имен System.Drawing.Printing, которое не поддерживает полный способ печати XPS, но поддерживает гибридный способ печати GDI-в-XPS. См. Архитектура способов печати ниже.)

Процесс печати с использованием XPS

Способ печати Формат XPS (XML Paper Specification) является новым средством Windows, которое переопределяет, как печать обрабатывается в приложениях Windows. Поскольку XPS может заменить языка презентации документа (например RTF), диспетчером очереди печати (например WMF) и языком описания страницы (например PCL или PostScript); новый способ печати поддерживает формат XPS из публикации приложения для последней обработки в драйвере принтера или устройства.

Способ печати XPS построен с использованием модели драйвера принтера XPS (XPSDrv), которая предоставляет несколько преимуществ для разработчиков, например печать Режим WYSIWYG (режим точного отображения), улучшенную поддержку цвета и значительно улучшенную производительность печати. (Дополнительные сведения о XPSDrv см. в статье Windows Driver Development Kit.)

Операция диспетчера очереди печати для документов XPS является, по существу, такой же, как и в предыдущих версиях Windows. Однако она была усовершенствована для поддержки способа печати XPS в дополнение к существующему способу печати Интерфейс GDI. Новый способ печати использует файл спуллинга XPS. Во то время как драйвер принтера пользовательского режима, написанный для предыдущих версий Windows, будет продолжать работать, драйвер принтера XPS (XPSDrv) необходим, чтобы использовать способ печати XPS.

Преимущества способа печати XPS являются существенными и включают:

  • Поддержка печати Режим WYSIWYG

  • Встроенная поддержка дополнительных цветовых профилей, включая 32 битный канал (bpc), CMYK, именованные цвета, n-inks и собственную поддержку прозрачности и градиентов.

  • Улучшенная производительность печати для .NET Framework и приложений на базе Win32.

  • Отраслевой стандартный формат XPS.

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

Формат XPS был разработан с целью расширения. С помощью расширения среды .NET Framework, функции и возможности могут быть добавлены к XPS модульным способом. Функции расширения включают:

  • Схема печати. Общая схема обновляется регулярно и позволяет быстро расширять возможности устройства. (См. PrintTicket и PrintCapabilities ниже.)

  • Расширенный фильтр-конвейер. Фильтр-конвейер драйвера принтера XPS (XPSDrv) был разработан для печати исходных и масштабируемых документов XPS. (Просмотрите содержание "XPSDrv" в статье Windows Driver Development Kit.)

Архитектура способа печати

В то время как приложения Win32 и .NET Framework поддерживают XPS, приложения Win32 и Windows Forms используют Интерфейс GDI для преобразования XPS, чтобы создать форматированное содержимое XPS для драйвера принтера XPS (XPSDrv). Эти приложения не являются необходимыми для использования способа печати XPS и могут продолжать использовать печать на базе EMF (Enhanced Metafile —расширенный метафайл). Однако большинство возможностей и улучшений XPS доступны только для приложений, которые используют способ печати XPS. 

Чтобы включить использование принтеров XPSDrv в приложениях Win32 и Windows Forms, драйвер принтера XPS (XPSDrv) поддерживает преобразование Интерфейс GDI в формат XPS. Модель XPSDrv также обеспечивает преобразование XPS в формат Интерфейс GDI, позволяющий приложениям Win32 печатать документы XPS. Для приложений WPF преобразование XPS в формат Интерфейс GDI выполняется автоматически методами Write и WriteAsync класса XpsDocumentWriter всякий раз, когда целевая очередь печати операции записи не имеет драйвера XPSDrv. (Приложения Windows Forms не могут печатать документы XPS.)

На следующем рисунке изображена подсистема печати и определены части, предоставляемые Microsoft, и части ,определенные поставщиками программного обеспечения и оборудования.

Система печати XPS

Базовая печать XPS

WPF определяет основные и дополнительные API-интерфейс. Для этих приложений, которые не требуют расширенной настройки печати или доступа к полному набору возможностей XPS, доступна базовая поддержка печати. Базовая поддержка печати предоставляется с помощью элемента управления диалогового окна печати, который требует минимальной конфигурации и возможностей Пользовательский интерфейс. Многие возможности XPS доступны с помощью этой упрощенной модели печати.

PrintDialog

Элемент управления System.Windows.Controls.PrintDialog обеспечивает одну точку входа для Пользовательский интерфейс, конфигурацию и отправку задания XPS. Сведения о том, как создать экземпляр и использовать элемент управления, см. в разделе Практическое руководство. Вызов диалогового окна печати.

Дополнительная печать XPS

Для доступа к полному набору возможностей XPS необходимо использовать дополнительную печать API-интерфейс. Несколько соответствующих API-интерфейс более подробно описаны ниже. Полный список XPS способов печати API-интерфейсы, см. по ссылкам пространства имен System.Windows.Xps и System.Printing.

PrintTicket и PrintCapabilities

Классы PrintTicket и PrintCapabilities являются основой дополнительных возможностей XPS. Оба типа объектов являются форматированными структурами возможностей печати XML, такими как сортировка, двусторонняя печать, сшивание и т.д. Эти структуры определяются Схемой печати. PrintTicket инструктирует принтер о способе обработки задания печати. Класс PrintCapabilities определяет возможности принтера. Запрашивая возможности принтера, PrintTicket может быть создан, используя полное преимущества поддерживаемых возможностей принтера. Аналогичным образом можно избежать неподдерживаемых функций.

В следующем примере демонстрируется порядок запроса PrintCapabilities принтера и создание PrintTicket с помощью кода.

// ---------------------- GetPrintTicketFromPrinter -----------------------
/// <summary>
///   Returns a PrintTicket based on the current default printer.</summary>
/// <returns>
///   A PrintTicket for the current local default printer.</returns>
private PrintTicket GetPrintTicketFromPrinter()
{
    PrintQueue printQueue = null;

    LocalPrintServer localPrintServer = new LocalPrintServer();

    // Retrieving collection of local printer on user machine
    PrintQueueCollection localPrinterCollection =
        localPrintServer.GetPrintQueues();

    System.Collections.IEnumerator localPrinterEnumerator =
        localPrinterCollection.GetEnumerator();

    if (localPrinterEnumerator.MoveNext())
    {
        // Get PrintQueue from first available printer
        printQueue = (PrintQueue)localPrinterEnumerator.Current;
    }
    else
    {
        // No printer exist, return null PrintTicket
        return null;
    }

    // Get default PrintTicket from printer
    PrintTicket printTicket = printQueue.DefaultPrintTicket;

    PrintCapabilities printCapabilites = printQueue.GetPrintCapabilities();

    // Modify PrintTicket
    if (printCapabilites.CollationCapability.Contains(Collation.Collated))
    {
        printTicket.Collation = Collation.Collated;
    }

    if ( printCapabilites.DuplexingCapability.Contains(
            Duplexing.TwoSidedLongEdge) )
    {
        printTicket.Duplexing = Duplexing.TwoSidedLongEdge;
    }

    if (printCapabilites.StaplingCapability.Contains(Stapling.StapleDualLeft))
    {
        printTicket.Stapling = Stapling.StapleDualLeft;
    }

    return printTicket;
}// end:GetPrintTicketFromPrinter()

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

PrintServer и PrintQueue

Класс PrintServer представляет сетевой сервер печати, а класс PrintQueue представляет принтер и связанную очередью задания вывода. Вместе эти API-интерфейсы обеспечивают дополнительное управление заданиями печати сервера. Класс PrintServer или один из его производных классов используется для управления объектом PrintQueue. Метод AddJob используется для вставки нового задания печати в очередь.

В следующем примере демонстрируется, как создать LocalPrintServer и получить доступ к его PrintQueue по умолчанию с помощью кода.

// -------------------- GetPrintXpsDocumentWriter() -------------------
/// <summary>
///   Returns an XpsDocumentWriter for the default print queue.</summary>
/// <returns>
///   An XpsDocumentWriter for the default print queue.</returns>
private XpsDocumentWriter GetPrintXpsDocumentWriter()
{
    // Create a local print server
    LocalPrintServer ps = new LocalPrintServer();

    // Get the default print queue
    PrintQueue pq = ps.DefaultPrintQueue;

    // Get an XpsDocumentWriter for the default print queue
    XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
    return xpsdw;
}// end:GetPrintXpsDocumentWriter()

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

XpsDocumentWriter

XpsDocumentWriter с его несколькими методами Write и WriteAsync используется для записи документов XPS в PrintQueue. Например, метод Write(FixedPage, PrintTicket) используется для вывода документа XPS и PrintTicket синхронно. Метод WriteAsync(FixedDocument, PrintTicket) используется для вывода документа XPS и PrintTicket асинхронно.

В следующем примере демонстрируется создание XpsDocumentWriter с помощью кода.

// -------------------- GetPrintXpsDocumentWriter() -------------------
/// <summary>
///   Returns an XpsDocumentWriter for the default print queue.</summary>
/// <returns>
///   An XpsDocumentWriter for the default print queue.</returns>
private XpsDocumentWriter GetPrintXpsDocumentWriter()
{
    // Create a local print server
    LocalPrintServer ps = new LocalPrintServer();

    // Get the default print queue
    PrintQueue pq = ps.DefaultPrintQueue;

    // Get an XpsDocumentWriter for the default print queue
    XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
    return xpsdw;
}// end:GetPrintXpsDocumentWriter()

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

Методы AddJob также предоставляют способы печати. Более подробные сведения см. в разделе Как печатать файлы XPS программным способом.

Печать с использованием GDI

Во то время как приложения WPF изначально поддерживают способ печати XPS, приложения Win32 и Windows Forms могут также воспользоваться преимуществами некоторых возможностей XPS. Драйвер принтера XPS (XPSDrv) может преобразовать базовый вывод Интерфейс GDI в формат XPS. Для расширенных сценариев поддерживается настраиваемое преобразование содержимого с помощью escape-функции вызова преобразователя документов XPS (Майкрософт). Подобным образом, приложения WPF могут также выполнить вывод способом печати Интерфейс GDI, путем вызова одного из методов Write или WriteAsync класса XpsDocumentWriter и назначения не XpsDrv принтера в качестве целевой очереди печати.

Для приложений, которые не требуют функциональных возможностей или поддержки XPS, текущий способ печати Интерфейс GDI остается неизменным.

Драйверная модель XPSDrv

Способ печати XPS повышает эффективность диспетчера очереди печати с помощью XPS как собственного формата диспетчера очереди печати при печати с использованием принтера или драйвера с включенной поддержкой XPS. Упрощенная обработка очереди избавляет от необходимости создания промежуточных файлов очередей, таких как файл данных EMF, перед тем, как документ помещен в очередь. Благодаря меньшему размеру файла очереди, способ печати XPS может уменьшить сетевой трафик и повысить производительность печати.

EMF является закрытым форматом, представляющим вывод приложения как последовательность вызовов в Интерфейс GDI для служб отрисовки. В отличие от EMF, формат очереди XPS представляет фактический документ без требования дальнейшей интерпретации при выводе на драйвер принтера на основе XPS (XPSDrv). Драйверы могут работать непосредственно с данными в формате. Эта возможность исключает требования преобразования данных и цветового пространства, когда используются файлы EMF и драйверы принтера на основе Интерфейс GDI.

Размер файла очереди обычно уменьшается при использовании документов XPS, предназначенных для драйвера принтера XPS (XPSDrv) по сравнению с его эквивалентами EMF; однако бывают исключения:

  • Векторный рисунок, который является очень сложным, многослойным или неэффективно записанным, может быть больше точечного рисунка того же графика.

  • В целях экранного отображения XPS файлы внедряют шрифты устройства, также как компьютерные шрифты; тогда как файлы очереди GDI не внедряет шрифты устройства. Но оба типа шрифтов представлены (см. ниже), и драйверы принтера могут удалить шрифты устройства до передачи файла на принтер.

Уменьшение размера очереди выполняется посредством несколько механизмов:

  • Разбиение шрифта. Только символы, используемые в документе, хранятся в файле XPS.

  • Дополнительная поддержка графики. Встроенная поддержка прозрачности и градиента примитивов позволяет избежать растеризации содержимого в документе XPS.

  • Идентификация общих ресурсов. Ресурсы, которые используются несколько раз (например изображение, представляющее эмблему организации), рассматриваются как общие ресурсы и загружаются только один раз.

  • Сжатие ZIP. Все документы XPS используют ZIP-сжатие.

См. также

Задачи

Печать документа XPS

Основные понятия

Документы в Windows Presentation Foundation

Сериализация и хранение документов

Ссылки

PrintDialog

XpsDocumentWriter

XpsDocument

PrintTicket

PrintCapabilities

PrintServer

PrintQueue

Escape-функция вызова преобразователя документов XPS (Майкрософт)

Другие ресурсы

Разделы руководства по печати

Схема печати

XPS

Печать и диспетчер очереди печати