스윙 UI에 인쇄 기능을 추가하려고합니다.스윙 창을 인쇄하여 한 페이지에 멋지게 인쇄하는 방법
protected void print() {
PrinterJob job = PrinterJob.getPrinterJob();
if(job.printDialog()){
try {
job.setPrintable(new Printable() {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
if(pageIndex == 0){
Graphics2D g2d = (Graphics2D)graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
// BufferedImage snapshot = AnimUtilities.createSnapshotOfFrame(ApplicationFrame.this, Transparency.TRANSLUCENT);
// double scaleX = pageFormat.getWidth()/snapshot.getWidth();
// double scaleY = pageFormat.getHeight()/snapshot.getHeight();
//
// double scaleValue = Math.min(scaleX, scaleY);
// g2d.scale(scaleValue, scaleValue);
// g2d.drawImage(snapshot, 0, 0, snapshot.getWidth(), snapshot.getHeight(), ApplicationFrame.this);
// ApplicationFrame.this.print(g2d);
ApplicationFrame.this.printAll(g2d);
return PAGE_EXISTS;
}
return NO_SUCH_PAGE;
}
});
job.print();
} catch (PrinterException e) {
e.printStackTrace();
}
} else {
System.err.println("Error printing");
}
}
무엇을 인쇄하는 종이에 아주 좋은 보인다는 점에서 정말 잘 작동 주석되지 않은 코드 : 나는 다음 시도했다. 그러나 JFrame은 용지보다 크기 때문에 그냥 잘라냅니다. 나는 또한 JFrame의 이미지를 생성하고 이미지를 적절하게 스케일링하여 페이지에 맞추고 같은 종횡비를 유지하는 주석 처리 된 코드를 시도했지만 스케일링으로 인해 화면상의 텍스트가 끔찍하게 보입니다. 이 advanced tutorial from Oracle을 찾았지만 화면을 여러 페이지로 나누는 방법을 알려줍니다. JFrame의 멋진 스크린 샷을 인쇄하고 싶습니다. JFrame을 자르지 않거나 스케일링으로 인해 아티팩트가 발생하지 않으면 어떻게 인쇄 할 수 있습니까?
g2d.setRenderingHint (RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC)를 추가하고 앤티 앨리어싱을 켜고 크기 조정 문제를 수정했습니다. 감사. 나는 여전히 다른 문제를 가지고있다. 그러나 그것을 이해할 수 없다면 다른 문제를 위해 그것을 구제 할 것이다. –
우수! ['AffineTransformOp'] (http://download.oracle.com/javase/6/docs/api/java/awt/image/AffineTransformOp.html)도 바이 큐빅 보간법을 얻는 또 다른 방법입니다. – trashgod