Spec-Zone .ru
спецификации, руководства, описания, API
След: 2-D Графика
Урок: Печать
Печать Многократного Документа Страницы
Домашняя страница > 2-D Графика > Печать

Печать Многократного Документа Страницы

Вы уже изучили, как использовать Printable взаимодействуйте через интерфейс, чтобы напечатать единственный документ страницы. Однако, документы обычно являются больше чем одной физической страницей в длине. Разбиение на страницы является процессом идентификации расположения в документе где разрывы страницы и печатающий соответственно.

В случае печати нескольких графических изображений, один на страницу, использование страница индексируют, чтобы выполнить итерации через эти страницы и напечатать один на каждой странице. Например, если несколько изображений представляются в следующем массиве:

BufferedImage[] images = new BufferedImage[10];

тогда используйте print() метод как показано в следующем фрагменте кода:

public int print(Graphics graphics,
           PageFormat pageFormat, int pageIndex)
           throws PrinterException {

    if (pageIndex < images.length) {
        graphics.drawImage(images[pageIndex], 100, 100, null);
        return PAGE_EXISTS;
    } else {
        return NO_SUCH_PAGE:
    }
}

Если документ непрерывен, приложение должно вычислить, сколько контента может соответствовать на каждой странице, и повредить страницу в той точке. Если текстовый документ состоит из многих строк, то приложение должно вычислить, сколько из этих строк может соответствовать полностью на странице. Point class создает точку, представляющую расположение в (x, y)

Чтобы вычислить height одной строки текста, используйте FontMetrics class.

Font font = new Font("Serif", Font.PLAIN, 10);
FontMetrics metrics = graphics.getFontMetrics(font);
int lineHeight = metrics.getHeight();

PageFormat параметр описывает печатаемую область страницы. В частности чтобы найти вертикальный промежуток страницы используют следующий фрагмент кода:

double pageHeight = pageFormat.getImageableHeight();

Используйте следующий фрагмент кода, чтобы вычислить число строк, которые соответствуют на странице и числе разрывов страницы:

int linesPerPage = ((int)pageHeight)/lineHeight);
int numBreaks = (textLines.length-1)/linesPerPage;
int[] pageBreaks = new int[numBreaks];
for (int b=0; b < numBreaks; b++) {
    pageBreaks[b] = (b+1)*linesPerPage; 
}

Используйте print() метод, чтобы вычислить печатаемую область по следующим причинам:

Позиции разрыва страницы используются как представлено в следующем фрагменте кода:

/* Draw each line that is on this page.
 * Increment 'y' position by lineHeight
 * for each line.
 */
int y = 0; 
int start = (pageIndex == 0) ? 0 : pageBreaks[pageIndex-1];
int end   = (pageIndex == pageBreaks.length)
                 ? textLines.length : pageBreaks[pageIndex];
for (int line=start; line<end; line++) {
    y += lineHeight;
    g.drawString(textLines[line], 0, y);
}

Если документ содержит 100 строк и только 48 подгонок строк на странице, то приложение печатает 3 страницы с разрывами страницы после 48 и 96 строк текста. Оставление 4 строками печатается на последней странице. Полный код для этого примера находится в PaginationExample.java.

Следующие факторы упрощения используются в PaginationExample код:


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Используя Диалоговые окна Установки Печати
Следующая страница: Работа со Службами печати и Атрибутами