Java: установить диапазон страниц для диалога печати

Я только начинаю учиться печатать окна в Java/Swing . (изменить: только что нашел Java Printing Руководство)

Когда я делаю это:

protected void doPrint() {
    PrinterJob job = PrinterJob.getPrinterJob();
    job.setPrintable(this);
    boolean ok = job.printDialog();
    if (ok) {
        try {
            job.print();
        } 
        catch (PrinterException ex) {
            ex.printStackTrace();
        } 
        finally {

        }
    }
}

Я получаю этот диалог принтера (в Windows XP):

введите здесь описание изображения

Как изменить диапазон страниц, чтобы он не был 1-9999?

редактировать: использование Pageable/Book для установки диапазона страниц (как услужливо указывает @t_barbz) требует PageFormat, и в этом случае у меня есть ловушка-22, так как я хочу, чтобы диалоговое окно «Печать» выбрало это, и я, похоже, не получаю возвращаемое значение из диалогового окна печати.


person Jason S    schedule 02.06.2011    source источник
comment
Я думаю, что nt в конце Print, но по какой-то причине ваш значок перекрывает его.   -  person Abdullah Jibaly    schedule 02.06.2011
comment
Это не значок my, это стандартный значок Java.   -  person Jason S    schedule 02.06.2011
comment
@Абдулла -- О! Я только что сделал печать из другого приложения, и там нет значка.   -  person Jason S    schedule 02.06.2011


Ответы (2)


Я считаю, что для диапазона страниц вам нужно использовать метод setPageable (Pageable document) PrinterJob. Похоже, это должно сработать.

protected void doPrint() {
PrinterJob job = PrinterJob.getPrinterJob();
Book book = new Book();
book.append(this, job.defaultPage());
printJob.setPageable(book);

boolean ok = job.printDialog();
if (ok) {
    try {
        job.print();
    } 
    catch (PrinterException ex) {
        ex.printStackTrace();
    } 
    finally {

    }
}
}
person t_barbz    schedule 02.06.2011
comment
Хм. Не так просто. Хотя Pageable позволяет вам вернуть количество страниц, это также требует от вас создания документа PageFormat, а я не знаю, как это сделать. - person Jason S; 02.06.2011
comment
book.append(Printable) требует PageFormat, который не может быть нулевым, поэтому я вернулся к исходной точке. - person Jason S; 02.06.2011
comment
отредактировал мой фрагмент кода, есть вариант по умолчанию для формата страницы - job.defaultPage() - person t_barbz; 02.06.2011

Наконец, вот простой код:

PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
PrintRequestAttributeSet printAttribute = new HashPrintRequestAttributeSet();
printAttribute.add(new PageRanges(1, 100));        
boolean ok = job.printDialog(printAttribute);
if (ok) {
     try {
          job.print();
     } catch (PrinterException ex) {
      /* The job did not successfully complete */
     }
}
person Dani    schedule 07.08.2017