I'm writing an add-on that opens a dialog and I need to access the currently opened text document but I don't know how get it.
I'm using the OpenOffice plug-in in NetBeans and I started from an Add-on project. It created a class that gives me a XComponentContext instance but I don't know how to use it to get a OfficeDocument instance of the current document.
I've been googling for some time and I can't find any example that uses an existing, opened, document. They all start from a new document or a document that is loaded first so they have an URL for it.
Can you help me? Or ath least point me in the right direction?
How to get the opened document?
-
- Posts: 3
- Joined: Tue Sep 15, 2015 10:03 am
How to get the opened document?
OpenOffice 3.4.1 on Windows 7
Re: How to get the opened document?
Is it not in
https://wiki.openoffice.org/wiki/API/Sa ... ntHandling
Surely
https://wiki.openoffice.org/wiki/API/Sa ... ntHandling
Surely
does what you ned?Getting a remote office component context
The com.sun.star.comp.helper.Bootstrap.bootstrap() method initializes UNO and returns the remote component context of a runing OpenOffice.org process.
com.sun.star.uno.XComponentContext xContext = null;
xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
Apache OpenOffice 4.1.15 on Xubuntu 22.04.4 LTS
-
- Posts: 3
- Joined: Tue Sep 15, 2015 10:03 am
Re: How to get the opened document?
I got a bit further but I have no idea if it's OK:
When I try to add the extension, I get following error:
The weird thing is that it's code that's in a private method that isn't called anywhere yet. Still it fails.
Any ideas?
Code: Select all
private OfficeDocument getDocument() {
if (this.officeDocument == null) {
try {
// this causes the error
XMultiComponentFactory xMultiComponentFactory = this.xComponentContext.getServiceManager();
Object oDesktop = xMultiComponentFactory.createInstanceWithContext("com.sun.star.frame.Desktop", this.xComponentContext);
XComponentLoader xComponentLoader = UnoRuntime.queryInterface(XComponentLoader.class, oDesktop);
String url = "private:factory/swriter";
String targetFrameName = "_self";
int searchFlags = FrameSearchFlag.SELF;
PropertyValue[] propertyValues = new PropertyValue[1];
propertyValues[0] = new PropertyValue();
propertyValues[0].Name = "Hidden";
propertyValues[0].Value = Boolean.TRUE;
XComponent xComponent = xComponentLoader.loadComponentFromURL(url, targetFrameName, searchFlags, propertyValues);
XModel xModel = UnoRuntime.queryInterface(XModel.class, xComponent);
this.officeDocument = new OfficeDocument(xModel);
} catch (com.sun.star.uno.Exception ex) {
throw new RuntimeException(ex);
}
}
return this.officeDocument;
}
This line causes the error:(com.sun.star.depoyment.DeploymentDescription){{ Message = "Error during activation of: VaphAddOn.jar", Context = (com.sun.star.uno.XInterface) @6ce03e0 }, Cause = (any) {(com.sun.star.registry.CannotRegisterImplementationException){{ Message = "", Context = (com.sun.star.uno.XInterface) @0 }}}}
Code: Select all
XMultiComponentFactory xMultiComponentFactory = this.xComponentContext.getServiceManager();
Any ideas?
OpenOffice 3.4.1 on Windows 7
-
- Posts: 3
- Joined: Tue Sep 15, 2015 10:03 am
Re: How to get the opened document?
Hmm, when I click 'OK' on the error dialog, the add-on seems to be activated anyway. The test messages I put in my code appear in the output.
CORRECTION: it seems an old version is installed somehow. Newer messages do not appear.
CORRECTION: it seems an old version is installed somehow. Newer messages do not appear.
OpenOffice 3.4.1 on Windows 7