風人園

          弱水三千,只取一瓢,便能解渴;佛法無邊,奉行一法,便能得益。
          隨筆 - 99, 文章 - 181, 評論 - 56, 引用 - 0
          數據加載中……

          實現SWT打印表格與圖片功能(ZT)

          轉載自 http://hi.baidu.com/gridrender/blog/item/0fff0f335b52ef44ac4b5f43.html

          源代碼下載地址:
          參考網址:
          (1)http://club.xasoft.org/?uid-167-action-viewspace-itemid-346#xspace-itemreply
          (2)http://www.eclipseworld.org/bbs/read-cec-tid-5299-keyword-.html

          純SWT的報表庫: SWT Report,支持報表打印功能:
          1. 跨行和跨列功能
          2. 頁碼和頁數統計
          3. 邊距和間距調整
          4. 各邊框顏色設置
          5. 前景和背景顏色
          6. 自適應頁面大小
          其中,CustomReportTest 類生成的報表


          SWT提供的打印功能很簡單,特別是在做表格打印的時候,需要大家使用GC自己繪出來,才能打印,對于初級的開發人員和人力不足的公司來說是非常麻煩的事情。


          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;

          /**
          * 通用表格打印組件,目前提供兩個方法分別用于打印表格(Gird,Table);
          * 工作任務名:printContent
          * @author lign
          *
          */
          public class PrintContent   {

          /**
          * 對Gird進行打印操作
              * @param grid SWT 的nebula項目的Grid
          * @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);
                
              }
            
             /**
              * 對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);
              
          }

          /**
              * 處理打印以及調用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();
              }
          }

          參考網址:
          (1)http://club.xasoft.org/?uid-167-action-viewspace-itemid-346#xspace-itemreply
          (2)http://www.eclipseworld.org/bbs/read-cec-tid-5299-keyword-.html
          (3)http://www.aygfsteel.com/Javawind/articles/129899.html

          和打印文字不同。因為系統中的dpi(dot per inch)和打印機的dpi不同,所以要進行轉換。

          import org.eclipse.swt.*;
          import org.eclipse.swt.graphics.*;
          import org.eclipse.swt.printing.*;
          import org.eclipse.swt.widgets.*;

          /** *//**
          * This class demonstrates printing images
          */
          public class ImagePrinterExample {
          /** *//**
             * The application entry point
             * @param args the command line arguments
             */
          public static void main(String[] args) {
              Display display = new Display();
              Shell shell = new Shell(display, SWT.NONE);

              try {
                // Prompt the user for an image file
                FileDialog fileChooser = new FileDialog(shell, SWT.OPEN);
                String fileName = fileChooser.open();

                if (fileName == null) { return; }

                // Load the image
                ImageLoader loader = new ImageLoader();
                ImageData[] imageData = loader.load(fileName);

                if (imageData.length > 0) {
                  // Show the Choose Printer dialog
                  PrintDialog dialog = new PrintDialog(shell, SWT.NULL);
                  PrinterData printerData = dialog.open();

                  if (printerData != null) {
                    // Create the printer object
                    Printer printer = new Printer(printerData);

                    // Calculate the scale factor between the screen resolution and printer
                    // resolution in order to correctly size the image for the printer
                    Point screenDPI = display.getDPI();
                    Point printerDPI = printer.getDPI();
                    int scaleFactor = printerDPI.x / screenDPI.x;

                    // Determine the bounds of the entire area of the printer
                    Rectangle trim = printer.computeTrim(0, 0, 0, 0);

                    // Start the print job
                    if (printer.startJob(fileName)) {
                      if (printer.startPage()) {
                        GC gc = new GC(printer);
                        Image printerImage = new Image(printer, imageData[0]);
                       
                        // Draw the image
                        gc.drawImage(printerImage, 0, 0, imageData[0].width,
                          imageData[0].height, -trim.x, -trim.y,
                          scaleFactor * imageData[0].width,
                          scaleFactor * imageData[0].height);

                        // Clean up
                        printerImage.dispose();
                        gc.dispose();
                        printer.endPage();
                      }
                    }
                    // End the job and dispose the printer
                    printer.endJob();
                    printer.dispose();
                  }
                }
              } catch (Exception e) {
                MessageBox messageBox = new MessageBox(shell, SWT.ICON_ERROR);
                messageBox.setMessage("Error printing test image");
                messageBox.open();
              }
          }
          }

          posted on 2009-04-15 15:04 風人園 閱讀(1944) 評論(2)  編輯  收藏 所屬分類: SWT

          評論

          # re: 實現SWT打印表格與圖片功能(ZT)[未登錄]  回復  更多評論   

          saf
          2010-10-11 16:19 | wewe

          # re: 實現SWT打印表格與圖片功能(ZT)[未登錄]  回復  更多評論   

          博主你好,我調用了你的打印表格的方法,出現了如下錯誤:
          Exception in thread "main" java.lang.IllegalStateException: Workbench has not been created yet.
          at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:92)
          at com.ytkj.kq.print.PrintContent.printToPrinter(PrintContent.java:55)
          at com.ytkj.kq.print.PrintContent.printTable(PrintContent.java:44)
          at com.ytkj.kq.PersonnelData.PersonnelChange$6.widgetSelected(PersonnelChange.java:404)
          at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
          at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
          at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
          at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
          at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
          at com.ytkj.kq.PersonnelData.PersonnelChange.open(PersonnelChange.java:139)
          at com.ytkj.kq.Main$14.widgetSelected(Main.java:852)
          at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
          at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
          at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
          at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
          at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
          at com.ytkj.kq.Main.<init>(Main.java:278)
          at com.ytkj.kq.Main.main(Main.java:243)
          能幫忙解決一下嗎,希望能告之解決辦法,我的郵箱:lqmh18@163.com
          在此先謝過了
          2010-10-11 16:25 | zmh

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 湾仔区| 东莞市| 广汉市| 同德县| 武鸣县| 沙雅县| 漳浦县| 甘泉县| 阿拉善左旗| 通榆县| 永州市| 永顺县| 平南县| 德州市| 汉寿县| 商水县| 吉水县| 巴彦淖尔市| 呈贡县| 雷州市| 铁岭市| 弥勒县| 敖汉旗| 拜城县| 兰溪市| 西乡县| 鄱阳县| 曲松县| 明光市| 德江县| 赤峰市| 岑溪市| 岳普湖县| 淄博市| 龙门县| 蒙自县| 清涧县| 西青区| 朝阳区| 浑源县| 延吉市|