- java.lang.Object
-
- javafx.print.PrinterJob
-
public final class PrinterJob extends Object
PrinterJob — это отправная точка для печати в JavaFX scenegraph.Он включает в себя
- Обнаружение принтера
- Создание задания
- Настройка задания на основе поддерживаемых возможностей принтера
- Настройка страницы
- Отображение иерархии узлов на странице.
Вот очень простой пример, который печатает один узел.
Node node = new Circle(100, 200, 200); PrinterJob job = PrinterJob.createPrinterJob(); if (job != null) { boolean success = job.printPage(node); if (success) { job.endJob(); } }Важные моментыВ примере выше узел не был добавлен в сцену. Поскольку большинство сценариев печати — это печать содержимого, которое либо вообще не отображается, либо должно быть подготовлено и отформатировано по-другому, это вполне допустимо.
Если содержимое, которое в настоящее время является частью сцены и отображается, печатается, то, поскольку печать задания или даже одной страницы задания может охватывать несколько «импульсов» или кадров экрана, важно, чтобы приложение гарантировало, что узел, который печатается, не обновлялся во время процесса печати, иначе вероятна частичная или размытая отрисовка.
Следует понимать, что это относится и к узлам, которые не отображаются — одновременное обновление их с печатью — не лучшая идея.
Нет требования печатать на потоке FX-приложения. Узел может быть подготовлен к печати в любом потоке, задание может быть вызвано в любом потоке. Однако, как правило, желательно свести к минимуму количество работы, выполняемой в потоке FX-приложения, чтобы не влиять на отзывчивость пользовательского интерфейса приложения. Поэтому рекомендуется выполнять печать в новом потоке и позволить реализации внутренне планировать любые задачи, которые необходимо выполнить в потоке FX, для выполнения в этом потоке.
- С тех пор:
- JavaFX 8.0
-
Краткое описание свойств
Свойства Тип Свойство Описание ReadOnlyObjectProperty<PrinterJob.JobStatus>jobStatusТолько для чтения свойство объекта, представляющее текущийJobStatusObjectProperty<Printer>printerСвойство, представляющееPrinterдля этого задания.
-
Краткое описание вложенных классов
Вложенные классы Модификатор и тип Класс Описание static classPrinterJob.JobStatusПеречисление, используемое для сообщения о состоянии задания печати.
-
Краткое описание методов
Все методыСтатические методыМетоды экземпляраКонкретные методы Модификатор и тип Метод Описание voidcancelJob()Отмена базового задания печати в кратчайшие сроки.static PrinterJobcreatePrinterJob()Метод-фабрика для создания задания.static PrinterJobcreatePrinterJob(Printer printer)Метод-фабрика для создания задания для указанного принтера.booleanendJob()Если задание можно успешно поместить в очередь принтера, возвращает true.JobSettingsgetJobSettings()JobSettingsописывает все поддерживаемые API параметры конфигурации задания, такие как количество копий, опцию сортировки, опцию дуплексной печати и т. д.PrinterJob.JobStatusgetJobStatus()Получение текущего состояния задания.PrintergetPrinter()Возвращает принтер, в настоящее время связанный с этим заданием.ReadOnlyObjectProperty<PrinterJob.JobStatus>jobStatusProperty()Только для чтения свойство объекта, представляющее текущийJobStatusObjectProperty<Printer>printerProperty()Свойство, представляющееPrinterдля этого задания.booleanprintPage(PageLayout pageLayout, Node node)Печать указанного узла с использованием указанной компоновки страницы.booleanprintPage(Node node)Печать указанного узла.voidsetPrinter(Printer printer)Изменение принтера для этого задания.booleanshowPageSetupDialog(Window owner)Отображение диалога «Настройка страницы».booleanshowPrintDialog(Window owner)Отображение диалога «Печать».StringtoString()
-
Подробное описание свойств
-
printer
public final ObjectProperty<Printer> printerProperty
Свойство, представляющееPrinterдля этого задания.- См. также:
-
getPrinter(),setPrinter(Printer)
-
jobStatus
public ReadOnlyObjectProperty<PrinterJob.JobStatus> jobStatusProperty
Только для чтения свойство объекта, представляющее текущее состояние заданияJobStatus- См. также:
getJobStatus()
-
-
Методы
-
createPrinterJob
public static final PrinterJob createPrinterJob()
Метод-фабрика для создания задания. Если доступных принтеров нет, метод вернёт null. Некоторые платформы могут предоставлять псевдопринтер, который создаёт документ. Такие принтеры будут перечислены, если платформа также перечисляет их как принтеры.- Возвращает:
- новый экземпляр PrinterJob или null.
- Исключение:
-
SecurityException- если у задания нет разрешения на инициализацию задания печати.
-
createPrinterJob
public static final PrinterJob createPrinterJob(Printer printer)
Метод-фабрика для создания задания для указанного принтера.Аргумент
printerопределяет начальный принтер- Параметры:
-
printer- для использования в задании. Если принтер недоступен (например, оффлайн), метод может вернуть null. - Возвращает:
- новый PrinterJob или null.
- Исключение:
-
SecurityException- если у задания нет разрешения на инициализацию задания печати.
-
printerProperty
public final ObjectProperty<Printer> printerProperty()
Свойство, представляющееPrinterдля этого задания.- См. также:
-
getPrinter(),setPrinter(Printer)
-
getPrinter
public Printer getPrinter()
Получает принтер, текуще связанный с этим заданием.- Возвращает:
- принтер для задания.
-
setPrinter
public void setPrinter(Printer printer)
Изменить принтер для этого задания. Если новый принтер не поддерживает текущие параметры задания (например, если запрошена печать на оборотной стороне, но новый принтер не поддерживает это), значения сбрасываются до значений по умолчанию для нового принтера или, в некоторых случаях, до сходного значения. Например, это может означать, что REVERSE_LANDSCAPE обновляется до LANDSCAPE, однако эта оптимизация реализации разрешена, но не обязательна.Вышесказанное относится как к непосредственному вызову этого метода для изменения принтера, так и к побочному эффекту взаимодействия пользователя с диалогом печати.
Установка null в качестве принтера установит принтер по умолчанию. Установка текущего принтера не имеет эффекта.
- Параметры:
-
printer- для использования в этом задании печати.
-
getJobSettings
public JobSettings getJobSettings()
JobSettingsсодержит все поддерживаемые API параметры конфигурации задания, такие как количество копий, выборка, двусторонняя печать и т. д. Начальные значения основаны на текущих параметрах исходного принтера.- Возвращает:
- текущие параметры задания.
-
showPrintDialog
public boolean showPrintDialog(Window owner)
Отображает диалог печати. Позволяет пользователю обновлять состояние задания, такие как принтер и настройки. Эти изменения будут доступны в соответствующих свойствах после возвращения диалога печати. Диалог печати также обычно используется для подтверждения желания пользователя продолжить печать. Это не обязательно для приложения, но, как правило, должно соблюдаться.В случае отсутствия пользовательского интерфейса этот метод возвращает true без изменения параметров, как если бы пользователь подтвердил продолжение печати.
Если задание не находится в состоянии отображения диалога (например, уже печатается, отменено или завершено), диалог не будет отображён, а метод вернёт false.
Окно
ownerможет быть null, но если это видимое окно, оно будет использовано в качестве родительского.Этот метод может вызываться из любого потока. Если он вызывается из потока приложения JavaFX, то его необходимо вызывать либо из обработчика события ввода, либо из метода run Runnable, переданного в
Platform.runLater. Его нельзя вызывать во время анимации или обработки макета.- Параметры:
-
owner- для блокировки ввода, или null. - Возвращает:
- false, если пользователь выбирает отмену печати или задание не в новом состоянии. То есть если оно уже началось, завершилось ошибкой или было отменено или завершено.
- Исключение:
-
IllegalStateException- если этот метод вызывается во время анимации или обработки макета.
-
showPageSetupDialog
public boolean showPageSetupDialog(Window owner)
Отображает диалог настройки страницы. Диалог настройки страницы в первую очередь предназначен для настройки макета страницы пользователем. Размер бумаги и ориентация являются наиболее распространёнными и важными компонентами.Будет отображён наиболее подходящий доступный диалог для этой цели. Однако может быть доступен и к другим параметрам, включая изменение текущего принтера. Следовательно, побочным эффектом вызова этого метода может быть обновление этого и любых других текущих параметров задания. Метод возвращает true, если пользователь подтвердил диалог, вне зависимости от внесения изменений.
Если задание не находится в состоянии отображения диалога (например, уже печатается, отменено или завершено), диалог не будет отображён, а метод вернёт false.
Окно
ownerможет быть null, но если это видимое окно, оно будет использовано в качестве родительского.Этот метод может вызываться из любого потока. Если он вызывается из потока приложения FX, то его необходимо вызывать либо из обработчика события ввода, либо из метода run Runnable, переданного в
Platform.runLater. Его нельзя вызывать во время анимации или обработки макета.- Параметры:
-
owner- для блокировки ввода, или null. - Возвращает:
- false, если пользователь отменяет диалог или задание не в новом состоянии. То есть если оно уже началось, завершилось ошибкой или было отменено или завершено.
- Исключение:
-
IllegalStateException- если этот метод вызывается во время анимации или обработки макета.
-
printPage
public boolean printPage(PageLayout pageLayout, Node node)
Печать указанного узла с использованием указанной раскладки страницы. Раскладка страницы переопределит значения задания по умолчанию только для этой страницы. Если состояние задания CANCELED, ERROR или DONE, этот метод вернёт false.Этот метод может вызываться из любого потока. Если он вызывается из потока приложения FX, то его необходимо вызывать либо из обработчика события ввода, либо из метода run Runnable, переданного в
Platform.runLater. Его нельзя вызывать во время анимации или обработки макета.- Параметры:
-
pageLayout- Раскладка для этой страницы. -
node- Узел, подлежащий печати. - Возвращает:
- была ли успешной отрисовка.
- Исключение:
-
NullPointerException- если любой из параметров null. -
IllegalStateException- если этот метод вызывается во время анимации или обработки макета.
-
printPage
public boolean printPage(Node node)
Печать указанного узла. Раскладка страницы - значение по умолчанию для задания. Если состояние задания CANCELED, ERROR или DONE, этот метод вернёт false.- Параметры:
-
node- Узел, подлежащий печати. - Возвращает:
- была ли успешной отрисовка.
- Исключение:
-
NullPointerException- если параметр node равен null.
-
jobStatusProperty
public ReadOnlyObjectProperty<PrinterJob.JobStatus> jobStatusProperty()
Только для чтения, свойство, представляющее текущееJobStatus- См. также:
getJobStatus()
-
getJobStatus
public PrinterJob.JobStatus getJobStatus()
Получить текущий статус задания.- Возвращает:
- текущий
JobStatus
-
cancelJob
public void cancelJob()
Отменить задание печати в ближайшее время. Метод может вернуть немедленно, не дожидаясь завершения отмены задания, если это не заблокирует поток FX-пользователя на какое-либо время. Если печать выполняется в данный момент, это, как правило, означает отмену после отрисовки текущей страницы. Состояние задания обновляется до CANCELED только после этого. Таким образом, определение того, что задание CANCELED, требует отслеживания состояния задания.Вызов не имеет эффекта, если задание уже было запрошено для отмены, или находится в состоянии ERROR или DONE. Например, он не удалит задание из очереди принтера, если оно уже отправлено на печать. После отмены задания нельзя вызывать методы, которые отображают новый контент или изменяют состояние задания.
-
endJob
public boolean endJob()
Если задание может быть успешно отправлено в очередь принтера, метод вернёт true. Примечание: это не означает, что задание уже напечатано, так как это может занять минуты или дольше, даже в тех случаях, где это возможно.Возвращаемое значение false означает, что задание не могло быть отправлено в очередь или уже завершено.
При успешном завершении статус задания также будет обновлён до
DONE, после чего задание больше нельзя использовать.Вызов endJob() для задания, для которого не было напечатано ни одной страницы, эквивалентен вызову {code cancelJob()}.
- Возвращает:
- true, если задание отправлено, false, если нет, или задание уже было в завершённом состоянии.
-
© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.