Печать средствами Java 2D
Можно задать параметры страницы и из программы, но тогда следует сначала определить объект класса Paper конструктором по умолчанию:
Paper р = new Paper()
Затем методами:
p.setSize(double width, double height) p.setlmageableArea(double x, double y, double width, double height)
…задать размер страницы и области печати.
Потом определить объект класса pageFormat с параметрами по умолчанию:
PageFormat pf = new PageFormat()
…и задать новые параметры методом:
pf.setPaper(p)
Теперь вызывать на экран окно Параметры страницы методом pageDialogo уже не обязательно, и мы получим молчаливый (silent) процесс печати. Так делается в тех случаях, когда печать выполняется на фоне отдельным подпроцессом.
Итак, параметры страницы определены, метод print о – тоже. Теперь надо дать задание на печать (print job) – указать количество страниц, их номера, порядок печати страниц, количество копий. Все эти сведения собираются в классе Printer Job.
Система печати Java 2D различает два вида заданий. В более простых заданиях – Printable Job – есть только один класс, рисующий страницы, поэтому у всех страниц одни и те же параметры, страницы печатаются последовательно с первой по последнюю или с последней страницы по первую, это зависит от системы печати.
Второй, более сложный вид заданий – Pageable Job – определяет для печати каждой страницы свой класс, рисующий страницы, поэтому у каждой страницы могут быть собственные параметры. Кроме того, можно печатать не все, а только выбранные страницы, выводить их в обратном порядке, печатать на обеих сторонах листа. Для осуществления этих возможностей определяется экземпляр класса Book или создается класс, реализующий интерфейс Pageable.
В классе Book, опять-таки, один конструктор, создающий пустой объект:
Book b = new Book()
После создания в данный объект добавляются классы, рисующие страницы. Для этого в классе Book есть два метода:
- append (Printable p, PageFormat pf) – добавляет объект р в конец;
- append(Printable p, PageFormat pf, int numPages) – добавляет numPages экземпляров р в конец; если число страниц заранее неизвестно, то задается константа UNKNOWN_NUMBER_OF_PAGES.
При составлении задания на печать, т. е. после создания экземпляра класса PrinterJob, надо указать вид задания одним и только одним из трех методов этого класса setPrintable(Printable pr), setPrintable(Printable pr, PageFormat pf) или setPageble (Pageable pg). Заодно задаются один или несколько классов рг, рисующих страницы в этом задании.