2014-02-24 1 views
0

현재 사용자에게 항목 테이블을 보여주는 이클립스 플러그인을 작성 중입니다.인쇄를 위해 JFace 대화 상자의 스크린 샷을 만드는 방법은 무엇입니까?

사용자가 tablerow를 두 번 클릭하면 사용자가 대화 상자를 인쇄하거나 취소 할 수있는 사용자 정의 JFace-Dialog가 열립니다.

대화 상자의 스크린 샷을 이미지로 만들려면 어떻게해야합니까?

지금 내 attemp는 나에게 작은 사각형을 제공합니다.

PrintDialog dialog = new PrintDialog(this.getShell(), SWT.NONE); 
    PrinterData data = dialog.open(); 
    if(data == null) 
    { 
     return; 
    } 

    GC gc = new GC(this.getShell().getDisplay()); 
    final Image image = new Image(this.getShell().getDisplay(), this.getShell().getBounds()); 
    gc.copyArea(image, this.getShell().getBounds().x, this.getShell().getBounds().y); 
    gc.dispose(); 

    Printer printer = new Printer(data); 
    if(printer.startJob("Print")) 
    { 

     GC g = new GC(printer); 

     if(printer.startPage()) 
     { 
      g.drawImage(image, 0, 0); 
     } 

     g.dispose(); 
     printer.endPage(); 


    } 
    printer.endJob(); 
    printer.dispose(); 
+0

생성 된 '이미지'에 전체 영역이 포함되어 있습니까? – Baz

+0

이미지에 열려있는 PrinterDialog의 작은 영역이 있지만이 동작을 방지하기 전에 이미지를 만드는 것이 좋습니다. – ioboi

+0

내가 한 말은 : 당신이 만드는 ('image'라고 불리는) 실제'Image' 인스턴스는 전체 영역을 포함합니까? 프린터에서 그릴 때 사용하는 카드입니까? – Baz

답변

0

문제가있었습니다. 이미지가 먼저 만들어 져야합니다. 스크린 샷 크기가 적당하다는 것을 인식하지 못했지만 PrinterDialog로 덮여있었습니다.

GC gc = new GC(this.getShell().getDisplay()); 
final Image image = new Image(this.getShell().getDisplay(),this.getShell().getBounds()); 
gc.copyArea(image, this.getShell().getBounds().x, this.getShell().getBounds().y); 
gc.dispose();  

PrintDialog dialog = new PrintDialog(this.getShell(), SWT.NONE); 
PrinterData data = dialog.open(); 
if(data == null) 
{ 
    return; 
} 

Printer printer = new Printer(data); 
if(printer.startJob("Print")) 
{ 

    GC g = new GC(printer); 

    if(printer.startPage()) 
    { 
     g.drawImage(image, 0, 0); 
    } 

    g.dispose(); 
    printer.endPage(); 


} 
printer.endJob(); 
printer.dispose();