2个条件在发生时得到遵守
重现它的代码片段:
import java.awt.*;
import java.awt.print.*;
public class Printing implements Printable {
private static Paper paper;
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (Thread.interrupted())
{
throw new PrinterException("Current thread interrupted.");
}
Stroke oldstroke = ((Graphics2D)graphics).getStroke();
((Graphics2D)graphics).setStroke(new BasicStroke(10));
((Graphics2D)graphics).translate(15, 0);
graphics.drawLine(0,0,0,300); //LEFT margin line
((Graphics2D)graphics).translate(-15, 0);
((Graphics2D)graphics).translate(0, -15);
graphics.drawLine(0,(int)paper.getImageableWidth(),300,(int)paper.getImageableWidth());//BOTTOM margin line
((Graphics2D)graphics).translate(0, 15);
((Graphics2D)graphics).setStroke(oldstroke);
((Graphics2D)graphics).setPaint(new java.awt.Color(0,0,0,100));
((Graphics2D)graphics).fill(new Rectangle(0,0,200,200));
return Printable.PAGE_EXISTS;
}
public static void main(String[] argv) {
Printing printer = new Printing();
PrinterJob printJob = PrinterJob.getPrinterJob();
PageFormat pageFormat = printJob.defaultPage();
paper = pageFormat.getPaper();
paper.setImageableArea(0,0,paper.getWidth(),paper.getHeight());
pageFormat.setOrientation(PageFormat.LANDSCAPE);
pageFormat.setPaper(paper);
Book book = new Book();
book.append(printer, pageFormat,1);
printJob.setPageable(book);
try {
printJob.print();
} catch (PrinterException e) {
e.printStackTrace();
}
}
}
如果应用程序运行没有
((Graphics2D)graphics).setPaint(new java.awt.Color(0,0,0,100));
((Graphics2D)graphics).fill(new Rectangle(0,0,200,200));
左线和底线在纸上可见。
Java 打印服务似乎毫无理由地移动了原点。 是 JVM 的问题还是我在某处弄错了?