Using a PrintDialog



我有一个实现Printable的类。在那个类中,我有一个公共方法,它创建一个BufferedImages列表,每个BufferedImages打印在一个页面上。现在我想添加一个PrintDialog,以允许用户选择要打印的页面和要打印的副本数量。

我在网上做了一些研究,发现我可能必须使用Book类,但我不知道如何在我的情况下使用它。

谁能举个例子?谢谢你的帮助……

ok。下面是我使用的代码:

/**
 * Starts the print job
 * Allows variable scaling
 */
public void startPrint(float scale, JTable rowHeader, JTable mainTable, boolean includeRowHeaders, boolean includeColumnHeaders) throws PrinterException{
    //getPages returns a List<BufferedImage
    this.pages = getPages(scale, rowHeader, mainTable, includeRowHeaders, includeColumnHeaders);
    this.numberOfPages = this.pages.size();
    HashPrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
    attr.add(new MediaPrintableArea(0f, 0f, 612/72f, 792/72f, MediaPrintableArea.INCH));
    PrinterJob job = PrinterJob.getPrinterJob();
    job.setPrintable(this);
    job.print(attr);
}

编辑好的。我已经取得了一些进展。现在有新问题了。我现在可以选择页面范围,但是PrintDialog复制JSpinner没有响应,而且无论JSpinner文本字段包含什么,打印方法总是为每个页面调用两次。这是我的代码…

/**
 * Starts the print job
 * Allows variable scaling
 */
public void startPrint(float scale, JTable rowHeader, JTable mainTable, boolean includeRowHeaders, boolean includeColumnHeaders) throws PrinterException{
    //getPages returns a List<BufferedImage>
    this.pages = getPages(scale, rowHeader, mainTable, includeRowHeaders, includeColumnHeaders);
    this.numberOfPages = this.pages.size();
    HashPrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
    attr.add(new JobName("Test Print", null));
    attr.add(new MediaPrintableArea(0f, 0f, 612/72f, 792/72f, MediaPrintableArea.INCH));
    attr.add(new PageRanges(1, this.numberOfPages));
    attr.add(new Copies(1));
    PrinterJob job = PrinterJob.getPrinterJob();
    job.setPrintable(this);
    if(job.printDialog(attr)){
        job.print(attr);
    }
}
/**
 * The actual print routine
 * Prints the class level List<BufferedImage>
 * one after another
 */
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException
{
    if (pageIndex > this.numberOfPages - 1){
        return NO_SUCH_PAGE;
    }
    else{
        graphics.drawImage(this.pages.get(pageIndex), 0, 0, null);
        JOptionPane.showMessageDialog(null, pageIndex);
        return PAGE_EXISTS;
    }
}

我编辑错了问题。我在微软XPS文档编写器上进行测试。当我把这个项目转移到另一台有真正物理打印机的电脑上时,它工作得很好。

相关内容

  • 没有找到相关文章

最新更新