问题描述
我正在尝试使用自定义尺寸打印页面。但它不起作用。 我已经为我希望我的页面的宽度和高度设置了变量。
查看我的代码并建议一些更改
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,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
并通过 PrintJob
方法传递给 setPrintable(Printable,PageFormat)
。
这意味着,它可能看起来更像……
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,height - (margin * 2));
pageFormat.setPaper(paper);
job.setPrintable(new Printable() {
@Override
public int print(Graphics pg,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,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();
}
}
我说可能,因为有一堆验证和其他系统垃圾,它们最终可能仍然不是你想要的。
我确实建议看看...
- Printing in Java to Label Printer
- Changing print margins on JTextPane
- fitting PrinterJob Object to specific print format of BufferedImage
- How to design an image in java to be printed on a 300 dpi printer
- java PrinterJob not printing to fit paper
- How can I print a custom paper size (cheques 8" x 4")?
- Printing a 1800 x 1200 image on 4 x 6 paper using Java
作为一些基本的例子,都做类似的事情 - 改变纸张大小:D