Работа с распечаткой билетов | .NET
Распечатать схему
Документы XPS и Объектная модель XPS могут использовать объекты билетов на печать, которые описаны в Спецификация схемы печати, чтобы указать настройки печати документа для принтеров и приложений просмотра.
Схема печати — это схема на основе XML, имеющая иерархическую структуру и используемая для организации и описания свойств принтера или задания печати. Он состоит из двух основных компонентов: Ключевые слова схемы печати и Структура схемы печати. Ключевые слова схемы печати — это экземпляры элементов, которые описывают атрибуты принтера и форматирование задания печати, а платформа схемы печати определяет коллекцию типов элементов XML в иерархической структуре и определяет, как эти типы элементов могут использоваться вместе.
Технология Print Schema, называемая PrintTicket, построена с использованием ключевых слов схемы печати, указанных в платформе Print Schema Framework. Спецификация схемы печати поддерживает расширения схемы третьих сторон, поэтому пользователи схемы печати не ограничены экземплярами Property, Feature, Option или ParameterInit, которые определяются ключевыми словами схемы печати. Экземпляры сторонних элементов можно добавлять к экземплярам элементов, которые определены ключевыми словами схемы печати; однако частные сторонние экземпляры Property должны принадлежать пространству имен, которое явно связано с третьей стороной, создавшей это пространство имен.
Поддержка билетов на печать в Aspose.Page для .NET
API Aspose.Page для .NET включает набор классов, инкапсулирующих элементы, определенные ключевыми словами схемы печати. Поскольку количество этих классов довольно велико, в этой статье рассматриваются лишь несколько наиболее распространенных методов управления билетами печати в документе XPS с использованием API Aspose.Page. Сначала мы обсудим создание каждого класса объектов, который мы хотим включить в заявку на печать. Затем мы увидим, как включить эти функции в печатный билет.
Как указать входной лоток
Функция JobInputBin описывает установленный входной лоток в устройстве или полный список поддерживаемых лотков для устройства. Это позволяет указать входной лоток для каждого задания. Существуют также функции DocumentInputBin и PageInputBin, которые позволяют указывать входной лоток для каждого документа и для каждой страницы соответственно. Любой документ распечатанного билета должен включать только один из трех. Все они наследуются от класса InputBin и имеют конструкторы с одинаковой сигнатурой, поэтому мы будем использовать JobInputBin для демонстрационных целей.
Следующий код
1new JobInputBin(InputBin.InputBinOption.AutoSelect);
создает функцию для билета на печать задания, которая дает печатающему устройству указание автоматически выбирать лучший вариант на основе конфигурации.
Класс InputBin.InputBinOption определяет статические поля, каждое из которых служит основой для различных параметров входного лотка. Каждый параметр может содержать дополнительные свойства, такие как InputBin.BinType, InputBin.FeedDirection, InputBin.FeedFace, InputBin.FeedType, InputBin.MediaCapacity, InputBin.MediaPath, InputBin.MediaSizeAutoSense, InputBin.MediaTypeAutoSense и InputBin.MediaSheetCapacity. Чтобы их указать, следует сначала клонировать базовое свойство, а затем вызвать метод Add() со списком нужных свойств:
1new JobInputBin(InputBin.InputBinOption.Manual.Clone().Add(
2 InputBin.FeedFace.FaceDown, InputBin.FeedDirection.LongEdgeFirst, new InputBin.MediaSheetCapacity(100)));
Полный список доступных значений свойств см. в спецификации схемы печати и соответствующем разделе Aspose.Page ссылка на API.
Как указать выходной лоток
Функция
JobOutputBin описывает установленный выходной лоток в устройстве или полный список поддерживаемых лотков для устройства. Ключевые слова JobOutputBin
,
DocumentOutputBin и
PageOutputBin являются взаимоисключающими; в одном печатном билете должен быть указан только один.
Каждый параметр может содержать следующие свойства: OutputBin.BinType и OutputBin.MediaSheetCapacity. Таким образом, функция JobOutputBin может быть создана следующим образом:
1new JobOutputBin(new OutputBin.OutputBinOption(OutputBin.BinType.Sorter),
2 new OutputBin.OutputBinOption(OutputBin.BinType.Stacker, new OutputBin.MediaSheetCapacity(100)));
Как указать ориентацию страницы
Функция PageOrientation описывает ориентацию физического листа носителя. Доступные параметры перечислены в разделе класса PageOrientation.PageOrientationOption справочника по API. Ниже приведен пример построения функции:
1new PageOrientation(PageOrientation.PageOrientationOption.Landscape);
Как указать дуплексный режим для вывода
Функция JobDuplexAllDocumentsContiguous описывает дуплексные характеристики вывода. Функция двусторонней печати позволяет печатать на обеих сторонах носителя. Все документы в задании дублируются друг за другом.
JobDuplexAllDocumentsContiguous
и
DocumentDuplex являются взаимоисключающими. Драйвер должен определить обработку ограничений между этими ключевыми словами. Последнее ключевое слово означает, что каждый документ в задании дублируется отдельно.
Для этой функции есть три варианта — «OneSided», «TwoSidedLongEdge» и «TwoSidedShortEdge». Первый из них не имеет свойств, а два других параметризуются с помощью Duplex.DuplexMode.
Например, если вы хотите указать двустороннюю печать для вашего файла XPS, чтобы страница переворачивалась параллельно MediaSizeHeight, вы можете сделать это следующим образом:
1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.TwoSidedLongEdge(Duplex.DuplexMode.Automatic));
Если вы не хотите, чтобы ваш файл был двусторонним, вы можете добавить в билет печати следующую функцию:
1new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.OneSided);
Как указать настройки цвета для вывода
Функция PageOutputColor описывает характеристики настроек цвета для вывода. Для этой функции есть три варианта: «Цвет», «Оттенки серого» и «Монохромный», каждый из которых имеет два целочисленных свойства — «DeviceBitsPerPixel» и «DriverBitsPerPixel».
Например, если вы хотите, чтобы цветной принтер печатал файл XPS в оттенках серого, вы можете добавить в билет на печать следующую функцию:
1new PageOutputColor(PageOutputColor.PageOutputColorOption.Grayscale(0, 8));
Как работать с распечатанными билетами разного уровня
Если вы работаете с файлом XPS, созданным кем-то другим, вы можете изменить его билет на печать, если он присутствует. Чтобы получить билет на печать на уровне задания, вы можете просто использовать свойство JobPrintTicket объекта XpsDocument:
1JobPrintTicket pt = document.JobPrintTicket;
Чтобы получить билет на печать для конкретного документа в файле XPS, вам следует использовать метод GetDocumentPrintTicket():
1DocumentPrintTicket pt = document.GetDocumentPrintTicket(<n>);
где <n>
— номер документа в файле XPS.
Чтобы получить билет на печать для конкретной страницы в файле XPS, вам следует использовать метод GetPagePrintTicket():
1PagePrintTicket pt = document.GetPagePrintTicket(<m>, <n>);
где <m>
— номер документа в файле XPS, а <n>
— номер страницы в m-м документе.
После получения экземпляра билета на печать, если он не равен «null», вы можете добавить свои функции, созданные, как показано в разделах выше:
1pt.Add(<features>);
где <features>
— это массив функций переменной длины, соответствующий билету на печать определенного уровня. Если в старом билете печати уже были некоторые функции, которые вы пытаетесь добавить, они будут перезаписаны новыми экземплярами.
Если вы не хотите изменять существующие билеты на печать, а хотите назначить совершенно новый экземпляр (что также относится к новому файлу XPS), то для билета на печать на уровне задания вам следует снова использовать свойство JobPrintTicket. :
1document.JobPrintTicket = new JobPrintTicket(<features>);
где <features>
— это массив функций переменной длины, соответствующий билету на печать задания.
Если вы хотите назначить билет на печать для определенного документа в файле XPS, следует использовать метод
SetDocumentPrintTicket():
1document.SetDocumentPrintTicket(<n>, new DocumentPrintTicket(<features>));
где <n>
— это номер документа в файле XPS, а <features>
— это массив функций переменной длины, соответствующий билету на печать на уровне документа.
Наконец, если вы хотите назначить билет на печать для определенной страницы в файле XPS, вам следует использовать метод SetPagePrintTicket():
1document.SetPagePrintTicket(<m>, <n>, new PagePrintTicket(<features>));
где <m>
— это номер документа в файле XPS, <n>
— это номер страницы в m-м документе, а <features>
— это массив переменных длины соответствующих функций. для билета печати на уровне страницы.
Ниже приведен полный пример кода для билета на печать на уровне задания из примера проекта Aspose.Page для .NET:
1// For complete examples and data files, please go to https://github.com/aspose-page/Aspose.Page-for-.NET
2// The path to the documents directory.
3string dir = RunExamples.GetDataDir_WorkingWithPrintTickets();
4
5// Create new XPS document
6using (XpsDocument document = new XpsDocument())
7{
8 // Set a custom job-level print ticket
9 document.JobPrintTicket = new JobPrintTicket(
10 // Specify input bin.
11 new JobInputBin(InputBin.InputBinOption.Manual.Clone().Add(
12 InputBin.FeedFace.FaceDown, InputBin.FeedDirection.LongEdgeFirst, new InputBin.MediaSheetCapacity(100))),
13 // Specify output bin.
14 new JobOutputBin(new OutputBin.OutputBinOption(OutputBin.BinType.Sorter),
15 new OutputBin.OutputBinOption(OutputBin.BinType.Stacker, new OutputBin.MediaSheetCapacity(100))),
16 // Specify page orientation.
17 new PageOrientation(PageOrientation.PageOrientationOption.Landscape),
18 // Specify duplex mode fof the output.
19 new JobDuplexAllDocumentsContiguously(Duplex.DuplexOption.TwoSidedLongEdge(Duplex.DuplexMode.Automatic)),
20 // Specify the color settings for the output.
21 new PageOutputColor(PageOutputColor.PageOutputColorOption.Grayscale(0, 8)));
22
23 // Save the document with the custom job-level print ticket.
24 document.Save(dir + "output1.xps");
25}