2014-02-24 65 views
0

我目前正在研究一個eclipse插件,它向用戶顯示一個條目表。如何爲打印創建JFace對話框的屏幕截圖?

如果用戶雙擊一個表格,將打開一個自定義JFace對話框,用戶可以在其中打印或取消對話框。

如何創建對話框的截圖作爲圖像?

我現在的嘗試只給了我一個小矩形。

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

創建的Image是否包含整個區域? – 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(); 
相關問題