logo search
файлы

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;

}

}