1.16Печать страниц с разными параметрами
Печать вида Printable Job не совсем удобна — у всех страниц должны быть одинаковые параметры, нельзя задать число страниц и порядок их печати, в окне Параметры страницы не видно число страниц, выводимых на печать.
Все эти возможности предоставляет печать вида Pageable Job с помощью класса Book.
Сначала создается пустой объект класса Book , затем к нему добавляются разные или одинаковые классы, рисующие страницы. При этом определяются объекты класса pageFormat , задающие параметры этих страниц, и число страниц. Если число страниц заранее неизвестно, то вместо него указывается константа UNKNOWN_NUMBER_OF_PAGES . В таком случае страницы будут печататься в порядке возрастания их номеров до тех пор, пока метод print () не возвратит NO_SUCH_PAGE .
Метод setPage(int pagelndex, Printable p, PageFormat pf)
заменяет объект в позиции pageIndex на новый объект р.
Например:
import java.awt.*;
import java.awt.print.*;
public class Print2Book{
public static void main(String[] args){
PrinterJob pj = PrinterJob.getPrinterJob();
// Для титульного листа выбирается альбомная ориентация
PageFormat pfl = pj.defaultPage();
pfl.setOrientation(PageFormat.LANDSCAPE);
// Параметры других страниц задаются в диалоговом окне
PageFormat pf2 = pj.pageDialog (new PageFormat());
Book bk = new Book();
// Первая страница — титульный лист
bk.append(new Cover(), pfl);
// Две другие страницы
bk.append(new Content(), pf2, 2);
// Определяется вид печати — Pageable Job
pj.setPageable(bk);
if (pj.printDialog()){
try{
pj.print() ;
}catch (Exception e){}
}
System.exit(0);
}
}
class Cover implements Printable{
public int print(Graphics g, PageFormat pf, int ind)
throws PrinterException{
g.setFont (new Font ("Helvetica-Bold", Font.PLAIN, 40)) ;
g.setColor(Color.black) ;
int у = (int) (pf.getImageableY() +
pf.getImageableHeight() /2);
g.drawString("Это заголовок,", 72, у);
g.drawString("Он печатается вдоль длинной", 72, у+60);
g.drawString("стороны листа бумаги.", 72, у+120);
return Printable.PAGE_EXISTS;
}
}
class Content implements Printable{
public int print(Graphics g, PageFormat pf, int ind)
throws PrinterException{
Graphics2D g2 = (Graphics2D)g;
g2.setFont(new Font("Serif", Font.PLAIN, 12));
g2.setColor(Color.black);
int x = (int)pf .getImageableX() + 30;
int у = (int)pf.getImageableY();
g2.drawString("Это строки обычного текста.", x, у += 16);
g2.drawString("Они печатаются с параметрами,", x, у += 16);
g2.drawString("выбранными в диалоговом окне.", x, у += 16);
return Printable.PAGE_EXISTS;
}
}
- 1Потоки ввода/вывода
- 1.1Потоки в Java
- 1.2Иерархия классов
- 1.3Потоковые классы
- 1.4Консольный ввод/вывод
- 1.5Файловый ввод/вывод
- 1.6Получение свойств файла
- 1.7Буферизованный ввод/вывод
- 1.8Поток простых типов Java
- 1.9Кодировка utf-8
- 1.10Прямой доступ к файлу
- 1.11Каналы обмена информацией
- 1.12Сериализация объектов
- 1.13Печать в Java
- 1.14Печать средствами Java 2d
- 1.15Печать файла
- 1.16Печать страниц с разными параметрами