<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://m.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无码成人精品区在线播放 | 亚洲国模精品一区| 精品国产日韩亚洲一区91| 国产精品国产午夜免费福利看| 亚洲日产乱码一二三区别| 永久免费看bbb| 美女免费精品高清毛片在线视| 亚洲成A人片77777国产| 免费无码又爽又黄又刺激网站| 久久亚洲色一区二区三区| 最近免费字幕中文大全| 亚洲一区精品中文字幕| 啦啦啦高清视频在线观看免费 | 国产亚洲精品AA片在线观看不加载 | 亚洲精品日韩专区silk| 91手机看片国产永久免费| 亚洲精品午夜国产va久久| 免费看男女下面日出水视频| 好猛好深好爽好硬免费视频| 亚洲国产成人久久综合一| 69堂人成无码免费视频果冻传媒| 亚洲欧美国产国产综合一区| 免费中文字幕一级毛片| 久久99热精品免费观看动漫| 亚洲乱码卡三乱码新区| 免费在线观看亚洲| 国产成人精品无码免费看| 亚洲色无码专区一区| 亚洲一本大道无码av天堂| 99久久免费精品视频| 亚洲欧好州第一的日产suv| 久久精品夜色噜噜亚洲A∨| 日韩精品内射视频免费观看 | 日本一区二区三区免费高清在线| 亚洲乱色熟女一区二区三区丝袜| 999国内精品永久免费观看| 四虎成人精品国产永久免费无码| 亚洲高清视频免费|