2013-03-01 70 views

回答

4

我已經修改了SWT瀏覽器片段到選擇的代碼,這對我的工作就像一個魅力..

import org.eclipse.swt.*; 
import org.eclipse.swt.layout.*; 
import org.eclipse.swt.widgets.*; 
import org.eclipse.swt.browser.*; 

public class BrowserPrintTest { 
    public static void main(String [] args) { 
     Display display = new Display(); 
     final Shell shell = new Shell(display); 
     GridLayout gridLayout = new GridLayout(); 
     gridLayout.numColumns = 3; 
     shell.setLayout(gridLayout); 
     ToolBar toolbar = new ToolBar(shell, SWT.NONE); 
     ToolItem itemPrint = new ToolItem(toolbar, SWT.PUSH); 
     itemPrint.setText("Print"); 

     GridData data = new GridData(); 
     data.horizontalSpan = 3; 
     toolbar.setLayoutData(data); 

     Label labelAddress = new Label(shell, SWT.NONE); 
     labelAddress.setText("Address"); 

     final Text location = new Text(shell, SWT.BORDER); 
     data = new GridData(); 
     data.horizontalAlignment = GridData.FILL; 
     data.horizontalSpan = 2; 
     data.grabExcessHorizontalSpace = true; 
     location.setLayoutData(data); 

     final Browser browser; 
     try { 
      browser = new Browser(shell, SWT.NONE); 
     } catch (SWTError e) { 
      System.out.println("Could not instantiate Browser: " + e.getMessage()); 
      display.dispose(); 
      return; 
     } 
     data = new GridData(); 
     data.horizontalAlignment = GridData.FILL; 
     data.verticalAlignment = GridData.FILL; 
     data.horizontalSpan = 3; 
     data.grabExcessHorizontalSpace = true; 
     data.grabExcessVerticalSpace = true; 
     browser.setLayoutData(data); 

     final Label status = new Label(shell, SWT.NONE); 
     data = new GridData(GridData.FILL_HORIZONTAL); 
     data.horizontalSpan = 2; 
     status.setLayoutData(data); 

     final ProgressBar progressBar = new ProgressBar(shell, SWT.NONE); 
     data = new GridData(); 
     data.horizontalAlignment = GridData.END; 
     progressBar.setLayoutData(data); 

     /* event handling */ 
     Listener listener = new Listener() { 
      public void handleEvent(Event event) { 
       ToolItem item = (ToolItem)event.widget; 
       String string = item.getText(); 
       if (string.equals("Print")) browser.execute("javascript:window.print();"); 
      } 
     }; 
     browser.addProgressListener(new ProgressListener() { 
      public void changed(ProgressEvent event) { 
        if (event.total == 0) return;        
        int ratio = event.current * 100/event.total; 
        progressBar.setSelection(ratio); 
      } 
      public void completed(ProgressEvent event) { 
       progressBar.setSelection(0); 
      } 
     }); 
     browser.addStatusTextListener(new StatusTextListener() { 
      public void changed(StatusTextEvent event) { 
       status.setText(event.text); 
      } 
     }); 
     browser.addLocationListener(new LocationListener() { 
      public void changed(LocationEvent event) { 
       if (event.top) location.setText(event.location); 
      } 
      public void changing(LocationEvent event) { 
      } 
     }); 
     itemPrint.addListener(SWT.Selection, listener); 
     location.addListener(SWT.DefaultSelection, new Listener() { 
      public void handleEvent(Event e) { 
       browser.setUrl(location.getText()); 
      } 
     }); 

     shell.open(); 
     browser.setUrl("http://eclipse.org"); 

     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
     display.dispose(); 
    } 
} 

是您的瀏覽器尺寸合適?如果您沒有看到長頁面的滾動條,那麼您的瀏覽器組件區域會被修剪,並且打印後您可能只會看到可見區域。然後..