页面格式化不适用于在Netbeans中使用Java打印页面



我正在尝试打印一个自定义大小的页面。但它不起作用。我已经使宽度和高度可变,我希望我的页面。

查看我的代码并建议一些更改

PrinterJob job = PrinterJob.getPrinterJob();
job.setJobName("Print Data");

job.setPrintable(new Printable(){
public int print(Graphics pg,PageFormat pf, int pageNum){
//Paper paper = pf.getPaper();
Paper paper = new Paper();
double width = 8d * 22d;
double height = 4d * 22d;
double margin = 0.2d * 22d;
paper.setSize(width, height);
paper.setImageableArea(
margin,
margin,
width - (margin * 2),
height - (margin * 2));
job.setPrintable(this, pf);

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

Graphics2D g2 = (Graphics2D)pg;
g2.translate(pf.getImageableX(), pf.getImageableY());

System.out.println("width1 = " + pf.getWidth());
System.out.println("height1 = " + pf.getHeight());
g2.setColor(Color.BLACK);
g2.draw(new Rectangle2D.Double(0, 0, pf.getWidth(), pf.getHeight()));

jPanel3.printAll(g2);

return Printable.PAGE_EXISTS; 
}
});

System.out.println("1");
boolean ok = job.printDialog();

if(ok){
try{
System.out.println("2");
job.print();
System.out.println("3");
}
catch (PrinterException ex){
ex.printStackTrace();
}
}

我被这个问题卡住了。不管我定什么尺寸。我打印的是ISO A4尺寸。我认为他们对我的代码有些错误。

有很多可能的问题,但我要解决一个大问题

这个。。。

job.setPrintable(new Printable(){
public int print(Graphics pg,PageFormat pf, int pageNum){
//Paper paper = pf.getPaper();
Paper paper = new Paper();
double width = 8d * 22d;
double height = 4d * 22d;
double margin = 0.2d * 22d;
paper.setSize(width, height);
paper.setImageableArea(
margin,
margin,
width - (margin * 2),
height - (margin * 2));
job.setPrintable(this, pf);

这是一个可怕的想法。就像绘制零部件时不修改状态一样,它可能会产生意想不到的后果。

相反,在这种情况下,您应该提前建立Paper大小。然后应将其应用于PageFormat,并通过setPrintable(Printable, PageFormat)方法传递给PrintJob

这意味着,它看起来可能更像。。。

PrinterJob job = PrinterJob.getPrinterJob();
job.setJobName("Print Data");
//Paper paper = pf.getPaper();
PageFormat pageFormat = job.defaultPage();
Paper paper = new Paper();
double width = 8d * 22d;
double height = 4d * 22d;
double margin = 0.2d * 22d;
paper.setSize(width, height);
paper.setImageableArea(
margin,
margin,
width - (margin * 2),
height - (margin * 2));
pageFormat.setPaper(paper);
job.setPrintable(new Printable() {
@Override
public int print(Graphics pg, PageFormat pf, int pageNum) {
if (pageNum > 0) {
return Printable.NO_SUCH_PAGE;
}
Graphics2D g2 = (Graphics2D) pg;
g2.translate(pf.getImageableX(), pf.getImageableY());
System.out.println("width1 = " + pf.getWidth());
System.out.println("height1 = " + pf.getHeight());
g2.setColor(Color.BLACK);
// Consider using pf.getImageableWidth() and pf.getImageableHeight() instead
g2.draw(new Rectangle2D.Double(0, 0, pf.getWidth(), pf.getHeight()));
// Maybe consider drawing your border first, as `printAll` 
// might fill in the whole page
jPanel3.printAll(g2);
return Printable.PAGE_EXISTS;
}
}, pageFormat);
System.out.println("1");
boolean ok = job.printDialog();
if (ok) {
try {
System.out.println("2");
job.print();
System.out.println("3");
} catch (PrinterException ex) {
ex.printStackTrace();
}
}

我说可能,因为有一堆验证和其他系统垃圾可能仍然存在,但最终并不是你想要的。

我建议你看看。。。

  • 用Java打印到标签打印机
  • 更改JTextPane上的打印页边距
  • 使PrinterJob对象适合BufferedImage的特定打印格式
  • 如何用java设计要在300 dpi打印机上打印的图像
  • java PrinterJob打印不适合纸张
  • 如何打印自定义纸张尺寸(支票8"x4"(
  • 使用Java在4 x 6张纸上打印1800 x 1200的图像

作为一些基本的例子,所有人都在做类似的事情-改变纸张大小:D

最新更新