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)
使用时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)