2012-05-31 36 views
0

我使用JFreeChart內部的ChartPanelSWT_AWT橋接。我想要做的是使用SWT來處理圖表的打印。有沒有辦法將chartpanel從SWT上繪製到打印機GC上?JFreeChart和swt中的打印

JFreeChart chart = createXYChart(createDataset(v2, v1)); 

Composite comp = new Composite(parent, SWT.NONE | SWT.EMBEDDED); 
chart.removeLegend(); 

//ChartComposite c = new ChartComposite(parent, SWT.NONE | SWT.EMBEDDED, chart, true); 
Frame frame = SWT_AWT.new_Frame(comp); 
ChartPanel panel = new ChartPanel(chart); 
panel.setMaximumDrawHeight(10000); 
panel.setMinimumDrawHeight(0); 
panel.setMaximumDrawWidth(10000); 
panel.setMinimumDrawWidth(0); 
panel.setPopupMenu(null); 

frame.add(panel); 


Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); 
PrintDialog dialog = new PrintDialog(shell); 

try { 
    //PrinterData printerData = Printer.getDefaultPrinterData(); 
    PrinterData printerData = dialog.open(); 
    if (printerData != null) { 
     Printer printer = new Printer(printerData); 
     if (printer.startJob("Text")) { 
      GC gc = new GC(printer); 

      if (printer.startPage()) { 
       gc.drawString("HDSDFSDFSDFSDFDS", 0, 0); 
       //WANT TO PRINT CHART SOMEHOW HERE 
       printer.endPage(); 
      } 
      gc.dispose(); 
      printer.endJob(); 
     } 
     printer.dispose(); 
     System.out.println("Print job done."); 
    } 
} catch (Exception exception) { 
    exception.printStackTrace(); 
} 

回答

1

我從未使用過SWT_AWT但我使用的JFreeChart與SWT(使用ChartComposite)和I可以捕獲一個圖表與下面的代碼的圖像。它可以幫助你:

ChartComposite chartComposite = ...; 
Image image = new Image(chartComposite.getDisplay(), chartComposite.getBounds()); 
GC gc = new GC(image); 
chartComposite.print(gc); 
gc.dispose(); 
+0

我居然發現類似的東西較早,但有一件事我想要做的就是自動縮放圖表一整頁的無拉伸效果。我可以使用ChartPanel來做到這一點,但這是一個AWT解決方案,我需要一個SWT解決方案來集成到我的Eclipse RCP應用程序中。 理想情況下,我希望在幕後製作圖表,而不必將其展示給用戶,然後自動將其作爲完整頁面打印到打印機。這是一個無需用戶交互即可自動打印數據集的程序。 – CryptDemon

+0

@CryptDemon你可以用一個全尺寸的新殼體創建圖表,打印它,然後關閉Shell。缺點是用戶會在屏幕上短暫地看到圖表是全尺寸的: - / – Baldrick