Печать средствами Java 2D
Остальные параметры задания можно задать в стандартном диалоговом окне Печать (Print) операционной системы, которое открывается на экране при выполнении логического метода printdialog (). Указанный метод не имеет аргументов. Он возвратит true, когда пользователь щелкнет по кнопке ОК, и false после нажатия кнопки Отмена.
Остается задать число копий, если оно больше 1, методом setcopies(int n) и задание сформировано.
Еще один полезный метод defaultPage() класса PrinterJob возвращает объект класса PageFormat по умолчанию. Этот метод можно использовать вместо конструктора класса PageFormat.
Осталось сказать, как создается экземпляр класса PrinterJob. Поскольку этот класс тесно связан с системой печати компьютера, его объекты создаются не конструктором, а статическим методом getPrinterJob(), Имеющимся в том же самом классе Printer Job.
Начало печати задается методом print () класса PrinterJob. Этот метод не имеет аргументов. Он последовательно вызывает методы print (g, pf, ind) классов, рисующих страницы, для каждой страницы.
Соберем все это вместе в листинге 18.8. В нем средствами JavaJ2D печатается то же, что и в листинге 18.7. Обратите внимание на п. 6. После окончания печати программа не заканчивается автоматически, для ее завершения мы обращаемся к методу System.exit (0).
Листинг 18.8. Простая печать методами Java 2D.
import java.awt.*; import java.awt.geom.*; import java.awt.print.*; class Print2Test implements Printable{ public int print(Graphics g, PageFormat pf, int ind) throws PrinterException{ // Печатаем не более 5 страниц if (ind > 4) return Printable.NO_SUCH_PAGE; Graphics2D g2 = (Graphics2D)g; g2.setFont(new Font("Serif", Font.ITALIC, 30)); g2.setColor (Color.black); g2.drawstring("Page " + (ind + I), 100, 100); g2.draw(new Ellipse2D.Double(100, 100, 200, 200)); return Printable.PAGE_EXISTS; } public static void main(String[] args){ // 1. Создаем экземпляр задания PrinterJob pj = Printer Job.getPrinter Job(); // 2, Открываем диалоговое окно Параметры страницы PageFormat pf = pj.pageDialog (pj.defaultPaige()); // 3. Задаем вид задания, объект класса, рисующего страницу, // и выбранные параметры страницы pj.setPrintable(new Print2Test(), pf}; // 4. Если нужно напечатать несколько копий, то: pj.setCopies(2); // По умолчанию печатается одна копия // 5. Открываем диалоговое окно Печать (необязательно) if (pj.printDialog())(// Если OK… try{ pj.print(); // Обращается к print(g, pf, ind) }catch(Exception e){ System.err.println(e); } } // 6. Завершаем задание System.exit(0); } }