java.awt.Component
.
Для этого в классе Component
был предусмотрен специальный метод
public void print(Graphics g)
предназначенный для печати внешнего вида компонента.
При этом, что именно будет выводиться печать программист должен описать самостоятельно, переопределив этот метод.
Переопределение метода print()
очень похоже на переопределение метода public void paint(Graphics g)
,
использующегося для отрисовки внешнего вида компонента на экране.
В обоих методах используется понятие графического контекста, только в одном случае это контекст принтера, а в другом экрана.
print()
, необходимо
создать класс наследник от класса Component
или одного из
его наследников (обычно используется создание наследников от класса java.awt.Frame
) и преопределить унаследованный метод print()
,
описав внутри него действия по "рисованию" на графическом
контексте принтера, получаемом в качестве аргумента в методе print()
.
При этом компонент как бы "отрисовывается",
но не на экране, а на принтере. Для "рисования" компонента
на принтере необходимо использовать методы класса java.awt.Graphics
, ссылку на экземпляр которого метод print()
получает как аргумент.
Единственным отличием такой отрисовки компонента на принтере от отрисовки его на экране
является то, что метод print()
получает в
качестве аргумента ссылку на графический контекст принтера,
а не экрана.
print()
распечатываемого компонента (например окна).
В этом случае необходимо передать методу print()
ссылку на графический контекст принтера, также явным образом.
Для получения ссылки на графический контекст принтера необходимо проделать следующие действия:
java.awt.Toolkit
java.awt.PrintJob
,
связывающий Java-приложение с системным принтером, установленым
по умолчанию. Toolkit toolkit=Toolkit.getDefaultToolkit();
PrintJob printJob=toolkit.getPrintJob(...);
Graphics graphics=printJob.getGraphics();
Метод public PrintJob getPrintJob(Frame, String, Properties)
класса
Toolkit
предназначен для получения ссылки на системный принтер установленный
по умолчанию. При вызове этого метода запускается стандартное для ОС
диалоговое окно принтера.getPrintJob()
передаются в качестве аргументов:
java.awt.Frame
или его наследника), породившее принтерный диалог (т. е. печать на принтере таким способом возможна только из предварительно созданного окна!)null
, что эквивалентно имени задания: ""java.util.Prperties
.
В качестве значения этого аргумента допускается использование значения null
.
checkPrintJobAccess
.
В случае ограничения доступа к системным ресурсам, например в апплете, возникает исключительная ситуация типа java.lang.SecurityException
.
getPrintJob()
вернет значение null
, а вслучае подтверждения печати вернет ссылку на объект типа PrintJob
.
После получения ссылки на объект типа PrintJob
, связывающий приложение с системным принтером, необходимо использовать метод public Graphics getGraphics()
класса PrintJob
, возвращающий ссылку на графический контекст принтера. Этот графический контекст можно использовать также, как и графический контекст экрана, для формирования изображения выводимого на печать,
при этом можно использовать все методы класса java.awt.Graphics
применяемые для рисования (например: drawString(), drawImage(), drawRect(), setFont(), setColor()
и т. д.).
public void end()
класса PrintJob
, в результате чего завершается работа с принтером, освобождаются все ресурсы, связанные с принтером и происходит печать подготовленного изображения на принтере.
graphics.drawString("Test printing in Java",10,50);
printJob.end();
Как результат принтер отпечатает одну страницу и очистит очередь печати от этого задания.end()
ссылка на объект типа PrintJob
не уничтожается, однако воспользоваться ей для дальнейшей печати документов уже нельзя и для того, чтобы осуществить печать следующего документа необходимо повторно вызывать метод getPrintJob()
класса Toolkit
.
Это довольно неудобно, так как в этом случае повторно появляется принтерный диалог операционной системы. Еще одно замечание к описаному примеру печати: если сформированное изображение не умещается в область печати, то не уместившаяся часть изображения обрезается.