2011-06-02 53 views
9

我刚刚开始to learn how to print a window in Java/Swing。 (编辑:刚发现the Java Printing Guidejava:为打印对话框设置页面范围

当我这样做:

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,在这种情况下,我有一个catch-22,因为我想在打印对话框选择,和我似乎没有从打印对话框中获得返回值。

+5

我认为,“NT”在“打印”的结束,但由于某种原因,你的图标将其覆盖。 – 2011-06-02 15:26:19

+0

它不是* my *图标,它是标准的Java图标。 – 2011-06-02 15:31:36

+0

@Abdullah - OH!我只是从另一个应用程序做了一个打印,那里没有图标。 – 2011-06-02 15:32:15

回答

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 { 

    } 
} 
} 
+0

嗯。不那么容易。虽然'Pageable'可以让你返回页面数量,但它也需要你提供一个PageFormat文档,我不知道该怎么做。 – 2011-06-02 15:36:49

+0

阿哈 - 你的编辑帮助。谢谢! – 2011-06-02 15:40:01

+0

book.append(可打印)需要一个PageFormat,它不能为null,所以我回到了原点。 – 2011-06-02 15:41:46

1

最后这里是一个简单的代码:

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