на главную обучение сертификация статьи литература ссылки гостевая книга
  Список статей Оглавление Текст статьи  

Печать документов на принтере в Java

Автор:Качалов Михаил Викторович
Создан:07.05.2002


5. Печать многостраничных документов с помощью Java 1.2 API

   Подход к печати документов с помощью класса реализующего интерфейс Printable, описаный выше, вполне подходит для печати многостраничных документов, так как методу print() передается в качестве аргумента номер страницы, которую собирается печатать принтер. При этом, в зависимости от номера печатаемой страницы можно формировать на графическом контексте принтера различное изображение. Однако все печатаемые страницы будут иметь одинаковый размер, поля и ориентацию, в соответствии с настройками формата страницы хранящимися в объекте типа PageFormat. Для многостраничных документов это не всегда удобно. Кроме того, иногда при печати может возникнуть задача пропустить при выводе на принтер ту или иную страницу. В вышеописаном подходе это невозможно, так как при этом завершается и сам процесс печати.
   Для решения задач связаных с печатью многостраничных документов в Java 1.2 API существует специальный класс java.awt.print.Book, реализующий интерфейс java.awt.print.Pageable. Использование этого класса позволяет создавать многостраничные документы, в которых формат листа определяется отдельно для каждой страницы, и также отдельно задается класс "отрисовщик" страницы, т. е. класс реализующий интерфейс Printable и формирующий в методе print() изображение, выводимое на принтер при печати соответствующей страницы.
   Формирование многостраничного документа начинается с создания объекта типа Book, который образует "пустой" документ - документ без страниц. Затем к этому документу добавляются страницы при помощи метода public void append(Printable painter,PageFormat page) класса Book. Этот метод добавляет в конец "книги" новую страницу - объект типа Printable. Причем для каждой добавляемой страницы указывается формат страницы (размер и ориентация области печати), с помощью объекта типа PageFormat. После того как книга сформирована в нее можно внести изменения заменив любую из существующих в книге страниц, указав ее номер (нумерация страниц ведется от 0). Для внесения изменений в сформированную книгу используется метод public void setPage(int pageIndex,Printable painter,PageFormat page) класса Book.
   Распечатывать сформированную книгу надо с помощью класса PrinterJob, при этом выполняется следующая последовательность действий:
  1. К существующему объекту типа PrinterJob с помощью метода public void setPageable(Pageable document) добавляется объект типа Book, представляющий собой заранее подготовленный многостраничный документ;

  2. Документ распечатывается с помощью метода print() класса PrinterJob.
   Ниже представлен пример кода, реализующего печать многостраничного документа:
	PrinterJob printerJob=PrinterJob.getPrinterJob();
	Book book=new Book();
	book.append(объект типа Printable,объект типа PageFormat);
	...
	book.append(объект типа Printable,объект типа PageFormat);
	/*
		при необходимости можно добавить 
		несколько однотипных страниц
	*/
	book.append(объект типа Printable,
			объект типа PageFormat,
			количество однотипных страниц);
	printerJob.setPageable(book);
	try {
		printerJob.print();
	}catch(PrinterException e){
		...
	}
   В вышеприведенном коде есть пример использования метода append() для добавления нескольких однотипных страниц, формируемых с помощью объекта типа Printable. При этом при вызове метода append() указывается сколько именно страниц добавляется таким образом в книгу. В случае, если программисту заранее не известно количество добавляемых в книгу страниц, например объект типа Printable читает данные из текстового файла, можно указать в качестве количества специально предусмотренную для этого случая константу Pagable.UNKNOWN_NUMBER_OF_PAGES.


назад оглавление дальше