Java:设置打印对话框的页面范围

9
我只是开始学习如何在Java/Swing中打印窗口。 (编辑:刚刚发现了Java打印指南)
当我这样做时:
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上得到了这个打印机对话框:

enter image description here

如何更改页面范围,使其不是1-9999?
编辑:使用 Pageable / Book 设置页面范围(正如@t_barbz有用地指出),需要PageFormat,在这种情况下,我陷入了一个进退两难的境地,因为我希望打印对话框选择它,但我似乎没有从打印对话框中获得返回值。

5
我认为“Print”末尾的“nt”,但出于某些原因,你的图标与其重叠了。 - Abdullah Jibaly
这不是“我的”图标,而是标准的Java图标。 - Jason S
@Abdullah -- 哦!我刚刚从另一个应用程序中打印了一份文件,但是那里没有图标。 - Jason S
2个回答

4
我认为您需要使用PrinterJob的setPageable(Pageable document)方法来设置页面范围。看起来它应该可以解决问题。
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 {

    }
}
}

嗯,不太容易。虽然 Pageable 允许您返回页面数,但它还要求您提供一个 PageFormat 文档,而我不知道如何做到这一点。 - Jason S
book.append(Printable)需要一个PageFormat,它不能为null,所以我又回到了原点。 - Jason S
我编辑了我的代码片段,其中有一个页面格式的默认选项 - "job.defaultPage()"。 - t_barbz

2

最后,这里有一段简单的代码:

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 */
     }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接