如何使用Pageable Interface来避免打印范围1-9999

0 java printing swing netbeans

我正在尝试打印一个JPanel名为.print_p它包含一个表和一些标签.

该错误在打印对话框中,范围为1-9999

我该如何解决这个问题?

private void printCard(){

    PrinterJob printjob = PrinterJob.getPrinterJob();
    printjob.setJobName(" Test Report ");        

    printjob.setPrintable (new Printable() {      

        @Override             
        public int print(Graphics pg, PageFormat pf, int pageNum){               
            pf.setOrientation(PageFormat.LANDSCAPE);

            if (pageNum > 0){
               return Printable.NO_SUCH_PAGE;
            }

            Graphics2D g2 = (Graphics2D) pg;
            g2.translate(pf.getImageableX(), pf.getImageableY());
            g2.translate(0f, 0f);
            print_p.paint(g2);

            return Printable.PAGE_EXISTS;
        }
    });        

    if (printjob.printDialog() == false)
       return;

    try {
       printjob.print();
    } catch (PrinterException ex) {
       System.out.println("NO PAGE FOUND."+ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mad*_*mer 5

使用时Printable,这是预期的行为,因为对话框不知道可能打印了多少页,因为没有处理任何打印作业.

您需要使用Pagable界面.这允许您收集一系列Printables,每个s代表虚拟书籍中的单个页面.

对于现成的实现,您可以查看 java.awt.print.Book

更新了示例

打印对话框

import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.util.logging.Level;
import java.util.logging.Logger;

public class PrintTest {

    public static void main(String[] args) {
        PrinterJob pj = PrinterJob.getPrinterJob();
        pj.setJobName("Book 'em Danno");

        PageFormat pf = pj.defaultPage();
        pf.setOrientation(PageFormat.LANDSCAPE);
        Book book = new Book();
        for (int index = 0; index < 10; index++) {
            book.append(new Page(index + 1), pf);
        }
        pj.setPageable(book);
        if (pj.printDialog()) {
            try {
                pj.print();
            } catch (PrinterException ex) {
                ex.printStackTrace();
            }
        }
    }

    public static class Page implements Printable {

        private int page;

        public Page(int page) {

            this.page = page;

        }

        @Override
        public int print(Graphics graphics, PageFormat pf, int pageIndex) throws PrinterException {

            Graphics2D g2 = (Graphics2D) graphics;
            g2.translate(pf.getImageableX(), pf.getImageableY());
            g2.translate(0f, 0f);
            FontMetrics fm = g2.getFontMetrics();
            String text = Integer.toString(page);

            double y = (pf.getImageableHeight() - fm.getHeight()) + fm.getAscent();
            double x = (pf.getImageableWidth() - fm.stringWidth(text)) / 2d;

            g2.drawString(text, (float)x, (float)y);

            System.out.println(pageIndex);

            return PAGE_EXISTS;
        }

    }

}
Run Code Online (Sandbox Code Playgroud)