Re: nsIWebBrowserPrint
"krithika" <[email protected]>
| Newsgroups | gmane.comp.mozilla.devel.java |
|---|---|
| Organization | http://groups.google.com |
| Message-ID | <1173080877.495554.147090__13376.0305856869$1173081032$gmane$org@v33g2000cwv.googlegroups.com> |
Hi, Iam trying to do a printPreview and then getPrintPreviewNumPages() , but it throws Execption.Did you succeed? regards, Krith On Feb 2, 6:58 pm, [email protected] wrote: > Hi! > I use JavaXPCOM to embed gecko into an awt canvas. A print button > should print the content. > If I compile and run the java class found below, wait for mozilla.org > to be rendered inside the canvas and then press the print button, > nothing is printed. > Sometimes (not always), a print dialog opens (but nothing happens > after pressing "ok") > Sometimes (not always) an exception is thrown: > org.mozilla.xpcom.XPCOMException: The function "print" returned an > error condition (0x80040111) > > Can anyone tell me what's wrong? > Thanks in advance! > hs > ------------------------------------------- > package bugs; > > import java.awt.BorderLayout; > import java.awt.Button; > import java.awt.Canvas; > import java.awt.Frame; > import java.awt.event.ActionEvent; > import java.awt.event.ActionListener; > import java.io.File; > > import org.mozilla.xpcom.GREVersionRange; > import org.mozilla.xpcom.IAppFileLocProvider; > import org.mozilla.xpcom.Mozilla; > import org.mozilla.xpcom.nsIAppStartup; > import org.mozilla.xpcom.nsIBaseWindow; > import org.mozilla.xpcom.nsIEventQueue; > import org.mozilla.xpcom.nsIEventQueueService; > import org.mozilla.xpcom.nsIInterfaceRequestor; > import org.mozilla.xpcom.nsIProxyObjectManager; > import org.mozilla.xpcom.nsIServiceManager; > import org.mozilla.xpcom.nsIWebBrowser; > import org.mozilla.xpcom.nsIWebBrowserPrint; > import org.mozilla.xpcom.nsIWebNavigation; > > public class PrintTest extends Canvas { > > private nsIWebBrowser webBrowser; > > // used if no gre can be located automatically > public static String FALLBACK_GRE_PATH = "/path/to/xulrunner"; > > public static void main(String[] args) throws Exception { > // init gtk > // this line removes the warnings, but not the crash > // sun.awt.X11.XToolkit.checkGTK(); > > final PrintTest pt = new PrintTest(); > Button bt = new Button("print"); > bt.addActionListener(new ActionListener() { > public void actionPerformed(ActionEvent e) { > pt.print(); > } > }); > Frame frame = new Frame("PrintTest"); > frame.setLayout(new BorderLayout()); > frame.add(bt, BorderLayout.NORTH); > frame.add(pt, BorderLayout.CENTER); > frame.setBounds(100, 100, 400, 400); > frame.setVisible(true); > Thread.sleep(2000); > System.out.println("starting test..."); > pt.test(); > } > > public void test() throws Exception { > > Mozilla mozilla = Mozilla.getInstance(); > GREVersionRange[] range = new GREVersionRange[1]; > range[0] = new GREVersionRange("1.8.0", true, "1.9", false); > > File grePath = Mozilla.getGREPathWithProperties(range, null); > if (null == grePath) grePath = new File(FALLBACK_GRE_PATH); > LocationProvider locProvider = new LocationProvider(grePath); > mozilla.initEmbedding(grePath, grePath, locProvider); > > Mozilla moz = Mozilla.getInstance(); > > nsIServiceManager serviceManager = moz.getServiceManager(); > nsIAppStartup appStartup = (nsIAppStartup) > serviceManager.getServiceByContractID( > "@mozilla.org/toolkit/app-startup;1", > nsIAppStartup.NS_IAPPSTARTUP_IID); > > String NS_IWEBBROWSER_CID = "F1EAC761-87E9-11d3- > AF80-00A024FFC08C"; //$NON-NLS-1$ > this.webBrowser = (nsIWebBrowser) > moz.getComponentManager().createInstance(NS_IWEBBROWSER_CID, null, > nsIWebBrowser.NS_IWEBBROWSER_IID); > > nsIBaseWindow baseWindow = (nsIBaseWindow) > webBrowser.queryInterface(nsIBaseWindow.NS_IBASEWINDOW_IID); > > // long windowHandle = ((sun.awt.X11.XComponentPeer) > getPeer()).getWindow(); > long windowHandle = ((sun.awt.windows.WComponentPeer) > getPeer()).getHWnd(); > > System.out.println("windowHandle " + windowHandle); > baseWindow.initWindow(windowHandle, 0, 0, 0, getWidth(), > getHeight()); > System.out.println("inited"); > baseWindow.create(); > System.out.println("created"); > baseWindow.setVisibility(true); > nsIWebNavigation webNavigation = (nsIWebNavigation) webBrowser > .queryInterface(nsIWebNavigation.NS_IWEBNAVIGATION_IID); > webNavigation.loadURI("http://www.mozilla.org", > nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE, null, null, > null); > > appStartup.run(); > > } > > public void print() { > Mozilla moz = Mozilla.getInstance(); > nsIInterfaceRequestor ir = (nsIInterfaceRequestor) webBrowser > .queryInterface(nsIInterfaceRequestor.NS_IINTERFACEREQUESTOR_IID); > nsIWebBrowserPrint print = (nsIWebBrowserPrint) ir > .getInterface(nsIWebBrowserPrint.NS_IWEBBROWSERPRINT_IID); > > nsIEventQueueService eventQueueServive = (nsIEventQueueService) > moz.getServiceManager() > .getServiceByContractID("@mozilla.org/event-queue-service;1", > nsIEventQueueService.NS_IEVENTQUEUESERVICE_IID); > nsIEventQueue eventQueue = eventQueueServive > .getSpecialEventQueue(nsIEventQueueService.UI_THREAD_EVENT_QUEUE); > nsIProxyObjectManager proxyManager = (nsIProxyObjectManager) > moz.getComponentManager() > .createInstanceByContractID("@mozilla.org/xpcomproxy;1", null, > nsIProxyObjectManager.NS_IPROXYOBJECTMANAGER_IID); > nsIWebBrowserPrint printProxy = (nsIWebBrowserPrint) > proxyManager.getProxyForObject(eventQueue, > nsIWebBrowserPrint.NS_IWEBBROWSERPRINT_IID, print, > nsIProxyObjectManager.INVOKE_SYNC); > printProxy.print(null, null); > } > > public static class LocationProvider implements IAppFileLocProvider > { > private final File libXULPath; > int counter = 0; > > public LocationProvider(File grePath) { > this.libXULPath = grePath; > } > > public File getFile(String aProp, boolean[] aPersistent) { > File file = null; > if (aProp.equals("GreD") || aProp.equals("GreComsD")) { > file = libXULPath; > if (aProp.equals("GreComsD")) { > file = new File(file, "components"); > } > } else if (aProp.equals("MozBinD") || aProp.equals("CurProcD") > || aProp.equals("ComsD") > || aProp.equals("ProfD")) { > file = libXULPath; > if (aProp.equals("ComsD")) { > file = new File(file, "components"); > } > } > return file; > } > > public File[] getFiles(String aProp) { > File[] files = null; > if (aProp.equals("APluginsDL")) { > files = new File[1]; > files[0] = new File(libXULPath, "plugins"); > } > return files; > } > } > > }