2012-05-31 3 views
0

Я использую JFreeChart внутри ChartPanel с SWT_AWT мостом. Я хочу использовать SWT для обработки печати диаграммы. Есть ли способ взять chartpanel и нарисовать его на принтере GC от SWT?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 с УВТ (с использованием ChartComposite), и я могу захватить диаграмму в изображение с приведенным ниже кодом. Это может вам помочь:

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

Я действительно нашел что-то подобное раньше, но одна вещь, которую я хочу сделать, - это автоматически масштабировать диаграмму на полную страницу без эффекта растяжения. Я могу сделать это с помощью ChartPanel, но это решение AWT, и мне нужно, чтобы SWT-решение интегрировалось в мое приложение RCP Eclipse. В идеале я хотел бы сделать диаграмму за кулисами, не отображая ее пользователю, а затем автоматически распечатывать ее как полную страницу на принтере. Это программа, которая автоматически печатает наборы данных без взаимодействия с пользователем. – CryptDemon

+0

@CryptDemon Вы можете создать диаграмму в новой «оболочке» с полным размером, напечатать ее и закрыть «оболочку». Недостатком является то, что пользователь вкратце увидит, что на экране отображается полный размер графика: - / – Baldrick

Смежные вопросы