<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    風人園

    弱水三千,只取一瓢,便能解渴;佛法無邊,奉行一法,便能得益。
    隨筆 - 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.tkk7.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 風人園 閱讀(1940) 評論(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

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


    網站導航:
     
    主站蜘蛛池模板: 青青青免费国产在线视频小草| 秋霞人成在线观看免费视频| 在线看片韩国免费人成视频| 久久精品蜜芽亚洲国产AV| 精品在线免费观看| 亚洲一本综合久久| **一级一级毛片免费观看| 97久久精品亚洲中文字幕无码 | 69天堂人成无码麻豆免费视频| 久久久亚洲精品视频| 99视频免费播放| 精品亚洲AV无码一区二区三区| 免费国产黄线在线观看| 亚洲精品无码mⅴ在线观看| 永久免费无码网站在线观看| 美女露隐私全部免费直播| 国产日韩成人亚洲丁香婷婷| 最近2019中文免费字幕在线观看 | 精品国产亚洲一区二区在线观看| 久久久免费观成人影院| 久久久久亚洲Av片无码v| 97碰公开在线观看免费视频| 中文字幕乱码亚洲精品一区| 免费一级做a爰片久久毛片潮喷| 乱淫片免费影院观看| 亚洲av无码不卡| 青春禁区视频在线观看直播免费| 国产精品亚洲а∨无码播放麻豆| 久久国产成人亚洲精品影院| 亚洲精品免费在线观看| 亚洲人成无码网站在线观看 | 最近的中文字幕大全免费8| 亚洲一线产区二线产区区| 免费一级毛片在级播放| 国产精品免费AV片在线观看| 亚洲一区二区观看播放| 自拍偷自拍亚洲精品被多人伦好爽| **毛片免费观看久久精品| 边摸边脱吃奶边高潮视频免费| 亚洲VA成无码人在线观看天堂| 爽爽日本在线视频免费|