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

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

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

    kooyee ‘s blog

    開源軟件, 眾人努力的結晶, 全人類的共同財富
    posts - 103, comments - 55, trackbacks - 0, articles - 66
       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    [SWT] Print & Print Preview

    Posted on 2007-07-24 23:43 kooyee 閱讀(1053) 評論(0)  編輯  收藏 所屬分類: GUI骨衣

    從SWT中建立"print dialog", 當call print()時彈出print dialog
    public void print(){
            PrintDialog dialog 
    = new PrintDialog(da.sShell, SWT.NONE);
            PrinterData data 
    = dialog.open();
            
    if (data == nullreturn;
            
    if (data.printToFile) {
                data.fileName 
    = "print.out"// you probably want to ask the user for a filename
            }

            printer 
    = new Printer(data);
            print(printer);
            printer.dispose();
        }

    緊接著建立print(Printer printer)
    private void print(Printer printer) {
            
    if (printer.startJob("Text")) {   // the string is the job name - shows up in the printer's job list
                Rectangle trim = printer.computeTrim(0000);
                
    //Calculate the scale factor between the screen resolution and printer
                
    // resolution in order to correctly size the image for the printer
                Point screenDPI = da.sShell.getDisplay().getDPI();
                Point printerDPI 
    = printer.getDPI();
                
    int scaleFactor = printerDPI.x / screenDPI.x;
                
    //int width = image.getImageData().width;
                
    //int height = image.getImageData().height;
                /* Create printer GC, and create and set the printer font */
                gc 
    = new GC(printer); 
                gc.drawText("some text here", scaleFactor 
    * 20, scaleFactor * 20);
                
                printer.endJob();
                gc.dispose();
            }

        }



    完成"print" 之后添加"print preview"。只需要讓"print" method 帶入 2 個arguments:Device 和 GC
    當打印時帶入Printer device 和 包含打印信息的GC。當要預覽時帶入 Display device 和GC(
    drawing on canvas),就是相當于把要打印的東西顯示在canvans里。

    create all colors, fonts, and images using the correct device,之后運行gc.dispose()

    對于打印的字體的設置
    gc.setFont(new Font())


    對于打印的字體的設置可以參考:
    org.eclipse.swt.custom.StyledText
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.custom.StyleRange;
    import org.eclipse.swt.custom.StyledText;
    import org.eclipse.swt.graphics.Font;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;

    public class SampleStyledText {
      Display display 
    = new Display();
      Shell shell 
    = new Shell(display);
      
      StyledText styledText;

      
    public SampleStyledText() {
        init();
        
        shell.setLayout(
    new GridLayout());
        
        styledText 
    = new StyledText(shell, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
        
        styledText.setLayoutData(
    new GridData(GridData.FILL_BOTH));
        
        Font font 
    = new Font(shell.getDisplay(), "Courier New"12, SWT.NORMAL);
        styledText.setFont(font);
        
        styledText.setText(
    "123456789\r\nABCDEFGHI");
        
        StyleRange styleRange1 
    = new StyleRange();
        styleRange1.start 
    = 2;
        styleRange1.length 
    = 16;
        styleRange1.foreground 
    = shell.getDisplay().getSystemColor(SWT.COLOR_BLUE);
        styleRange1.background 
    = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW);
        styleRange1.fontStyle 
    = SWT.BOLD;
        
        StyleRange styleRange2 
    = new StyleRange();
        styleRange2.start 
    = 14;
        styleRange2.length 
    = 3;
        styleRange2.fontStyle 
    = SWT.NORMAL;
        styleRange2.foreground 
    = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW);
        styleRange2.background 
    = shell.getDisplay().getSystemColor(SWT.COLOR_BLUE);
        
    //    styledText.setStyleRange(styleRange1);
    //    styledText.setStyleRange(styleRange2);
        
        
    //styledText.setStyleRanges(new StyleRange[]{styleRange1, styleRange2});
        
    //styledText.setStyleRanges(new StyleRange[]{styleRange2, styleRange1});
        
        
    //styledText.setLineBackground(1, 1, shell.getDisplay().getSystemColor(SWT.COLOR_GRAY));
        
    //    styledText.setSelection(4);
    //    System.out.println(printStyleRanges(styledText.getStyleRanges()) );
    //    styledText.insert("000");
        
        
        System.out.println(printStyleRanges(styledText.getStyleRanges()) );
        
    //    styledText.setStyleRanges(new StyleRange[]{styleRange1});
    //    System.out.println(printStyleRanges(styledText.getStyleRanges()) );
        
        
    //shell.pack();
        shell.setSize(300120);
        shell.open();
        
    //textUser.forceFocus();

        
    // Set up the event loop.
        while (!shell.isDisposed()) {
          
    if (!display.readAndDispatch()) {
            
    // If no more entries in event queue
            display.sleep();
          }

        }


        display.dispose();
      }

      
      
    private String printStyleRanges(StyleRange[] styleRanges) {
        
        
    if(styleRanges == null)
          
    return "null";
        
    else if(styleRanges.length == 0)
          
    return "[]";
        
        StringBuffer sb 
    = new StringBuffer();
        
    for(int i=0; i<styleRanges.length; i++{
          sb.append(styleRanges[i] 
    + "\n");
        }

        
        
    return sb.toString();
      }

      
    public static void main(String[] args) {
        
    new SampleStyledText();
      }

    }





    參考:

    You will have to think about margins, page breaks, and scaling, and you
    may want to think about whether or not the chosen fonts exist on the printer.
    For an optimization, you might want to use a set of background images, one
    per page, for the display drawing so that your user can flip between the 'pages'
    without you having to render them again.

    Printing is a lot of work. The widgets don't do it for you - you have to do
    all the drawing yourself. Once you have done the work, however, it is a
    relatively simple thing to add a "print preview" feature.

    The closest thing in SWT to an example of this is the StyledText widget -
    have a look at the code in org.eclipse.swt.custom.StyledText. It doesn't do
    a print preview specifically, but it does know how to draw itself to the
    screen, and to print itself to a printer. Print preview would just be a bit
    of a twist on drawing to the screen.

    主站蜘蛛池模板: 免费永久看黄在线观看app| 在线观看免费人成视频色9| 吃奶摸下高潮60分钟免费视频| 久久夜色精品国产噜噜亚洲a| 美女内射无套日韩免费播放| 亚洲欧洲国产精品你懂的| a级男女仿爱免费视频| 亚洲香蕉网久久综合影视| 国产精品免费久久久久久久久| 亚洲第一页日韩专区| 一区二区免费电影| 亚洲精品无码久久久久sm| a毛片视频免费观看影院| 亚洲国产精品婷婷久久| 蜜臀AV免费一区二区三区| 亚洲国产精品久久网午夜| 毛片免费视频播放| 久久亚洲精品无码av| 国产精品亚洲精品日韩已方| 日韩精品无码免费专区午夜| 久久99亚洲网美利坚合众国| 四虎最新永久免费视频| 中文字幕精品三区无码亚洲 | 国产精品hd免费观看| 亚洲人成伊人成综合网久久久 | **真实毛片免费观看| 亚洲日本中文字幕天天更新| 国产成人精品免费视频大全五级| 男女男精品网站免费观看| 亚洲女人被黑人巨大进入| 久久美女网站免费| 亚洲免费在线观看视频| 免费少妇a级毛片| 国产在线观看无码免费视频| 久久久亚洲欧洲日产国码aⅴ| 最近的中文字幕大全免费版| 久香草视频在线观看免费| 91亚洲导航深夜福利| 国产精品免费看久久久久| 插鸡网站在线播放免费观看| 亚洲乱码日产精品BD在线观看|