gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:04:51 25 4
gpt4 key购买 nike

我正在尝试打印一个名为 print_pJPanel。它包含一个表格和一些标签。

错误出现在打印对话框中,其范围为 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);
}
}

最佳答案

当使用Printable时,这是预期的行为,因为对话框不知道可以打印多少页,因为没有处理任何有关打印作业的信息。

您需要使用 Pagable界面。这允许您收集一系列Printable,每个都代表虚拟书中的一个页面。

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

已更新示例

Print Dialog

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;
}

}

}

关于java - 如何使用Pageable Interface避免打印范围1-9999,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26131405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com