Управление печатью билетов | Java
Введение в схему печати
Документы XPS и Объектная модель XPS могут использовать объекты билетов на печать, представленные в Спецификация схемы печати, для определения параметров печати документа для принтеров и приложений просмотра.
Схема печати — это иерархическая схема на основе XML, используемая для организации и описания свойств принтера или задания печати. Он состоит из двух основных частей: Ключевые слова схемы печати и Структура схемы печати. Ключевые слова схемы печати — это экземпляры элементов, которые описывают атрибуты принтера и форматирование задания печати, а платформа схемы печати определяет набор типов элементов XML в иерархической структуре и определяет, как эти типы элементов могут использоваться вместе.
Технология Print Schema, известная как PrintTicket, построена с использованием ключевых слов схемы печати, указанных в платформе Print Schema Framework. Спецификация схемы печати позволяет третьим сторонам расширять схему, позволяя пользователям схемы печати выходить за рамки экземпляров Property, Feature, Option или ParameterInit, определенных ключевыми словами схемы печати. Экземпляры сторонних элементов могут быть добавлены к тем, которые определены ключевыми словами схемы печати; однако частные сторонние экземпляры Property должны принадлежать пространству имен, которое явно связано с третьей стороной, создавшей это пространство имен.
Поддержка билета на печать в Aspose.Page для Java
API Aspose.Page для Java содержит набор классов, инкапсулирующих элементы, определенные ключевыми словами схемы печати. Из-за значительного количества этих классов в этой статье мы обсудим только несколько наиболее распространенных методов управления билетами печати в документе XPS с использованием API Aspose.Page. Мы начнем с обсуждения создания каждого класса функций, который мы хотим включить в билет на печать, а затем продемонстрируем, как включить эти функции в билет на печать.
Указание входного лотка
Функция JobInputBin идентифицирует установленный входной лоток в устройстве или полный список поддерживаемых лотков для устройства. Это позволяет указать входной лоток для каждого задания. Существуют также функции DocumentInputBin и PageInputBin, которые позволяют указывать входной лоток для каждого документа и для каждой страницы соответственно. Любой документ распечатанного билета должен включать только одну из трех функций. Все они являются производными от класса InputBin и имеют конструкторы с одинаковой сигнатурой, поэтому мы будем использовать JobInputBin для демонстрационных целей.
Строка Java-кода
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, созданным кем-то другим, вам может потребоваться настроить его билет на печать, если он присутствует. Чтобы получить билет на печать на уровне задания, вы можете просто вызвать метод getJobPrintTicket() объекта XpsDocument:
1JobPrintTicket pt = document.getJobPrintTicket();
Чтобы получить билет на печать для определенного документа в файле 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, то для билета печати уровня задания вам следует использовать метод setJobPrintTicket():
1document.setJobPrintTicket(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 для Java:
1// For complete examples and data files, please go to https://github.com/aspose-page/Aspose.Page-for-Java
2// The path to the documents directory.
3String dataDir = Utils.getDataDir();
4
5// Create new XPS document
6final XpsDocument document = new XpsDocument();
7try {
8 // Set a custom job-level print ticket
9 document.setJobPrintTicket(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(dataDir + "output1.xps");
25} finally {
26 if (document != null)
27 document.close();
28}