网上流传的一个RCP Table Grid打印实现原理和局限性

package com.easyway.tbs.commons.ext.views.printer;
import org.ceclipse.reporting.IReport;
import org.ceclipse.reporting.IReportPage;
import org.ceclipse.reporting.Report;
import org.ceclipse.reporting.ReportData;
import org.ceclipse.reporting.ReportUtil;
import org.eclipse.nebula.widgets.grid.Grid;
import org.eclipse.swt.printing.PrintDialog;
import org.eclipse.swt.printing.Printer;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.PlatformUI;
/**
 * 采用网上流传的ceclipse.org的组件
 * 通用的表格打印组件,目前提供两个方法分别用于打印表格(Grid,Table)
 * 我封装了两个方法,一个方法处理SWT提供的Table的打印,另一个处理SWT-星云(Nebula)-Gird的打印,
 * 基本上满足我的需要了。贡献出了一个SWT表格打印的项目,可以做到不同表格的直接打印,而且还有跨行跨列的实现.
 * Jar下载:
 * http://www.blogjava.net/Files/leeguannan/org.ceclipse.printer_1.0.rar
 *
 * @author longgangbai
 *
 */
public class PrintTools {
    /**
     * 对SWT Table进行打印的操纵
     * @param table SWT Table 的对象 
     * @param title 表头文字描述
     */
 public static void printTable(Table table, String title) {
  IReportPage page = ReportUtil.convert(table, title);
  Report report = new Report();
  report.addPage(page);
  printToPrinter(report);
 }
  /**
     * 对SWT Gird进行打印的操纵
     * @param gird SWT Gird 的对象 
     * @param title 表头文字描述
     */
 public static void printGird(Grid grid, String title) {
  IReportPage page = ReportUtil.convert(grid, title);
  Report report = new Report();
  report.addPage(page);
  printToPrinter(report);
  printToPrinter(report);
 }
    /**
     * 处理打印以及调用Printer
     *@param report
     */
 private static void printToPrinter(IReport report) {
  ReportData reportData = report.getReportData();
  reportData.setJobName("printContent");
  reportData.setPrinter(new Printer(new PrintDialog(PlatformUI
    .getWorkbench().getActiveWorkbenchWindow().getShell()).open()));
  report.print();
 }
}

 

局限性:这个功能在打印的table或者Grid使用滚动条,但滚动条没有出现时打印正常。如果数据过多在表格中不能完全显示那么就不能满足了,最终采用报表工具实现打印报表功能。

你可能感兴趣的:(osgi,RCP,SWT,gef,draw2d)