2

I want to print the contents of a SWT Browser Widget. but it prints the only the visible part of the browser not the full content of it.

Please help.

Baz
  • 36,440
  • 11
  • 68
  • 94
Sumant
  • 496
  • 1
  • 6
  • 20

1 Answers1

4

I've modified the SWT Browser snippet to selected code, and it work for me like a charm..

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();
    }
}

Is your browser properly sized? If you don't see scrollbars for long pages, your browser component area is trimmed and you'll probably get only visible area after printing then..

Sorceror
  • 4,835
  • 2
  • 21
  • 35