Reputation: 2642
If anyone can assist with a method that searches for a string in an open office writer document using the UNO API with Java it would be very helpful. Once it searches for string and finds string can it then(even hidden) move the cursor to that string.
I can then use the below getPageNumber method to return the page number and print that page on headed paper.
Any help much appreciated
public int getNumberOfPages()
{
XController xController = OODocument.getCurrentDocument().getXFrame().getController();
XTextViewCursorSupplier supTextViewCursor =
(XTextViewCursorSupplier) UnoRuntime.queryInterface(
XTextViewCursorSupplier.class, xController);
XTextViewCursor curTextView = supTextViewCursor.getViewCursor();
XPageCursor curPage =
(XPageCursor) UnoRuntime.queryInterface(
XPageCursor.class, curTextView);
curPage.jumpToLastPage();
System.out.println("pages = " + curPage.getPage());
return curPage.getPage();
}
public int getPageNumber()
{
XController xController = OODocument.getCurrentDocument().getXFrame().getController();
XTextViewCursorSupplier supTextViewCursor =
(XTextViewCursorSupplier) UnoRuntime.queryInterface(
XTextViewCursorSupplier.class, xController);
XTextViewCursor curTextView = supTextViewCursor.getViewCursor();
XPageCursor curPage =
(XPageCursor) UnoRuntime.queryInterface(
XPageCursor.class, curTextView);
System.out.println("current page = " + curPage.getPage());
return curPage.getPage();
}
I know it can be done using a combination of possibly the below
curTextView.setString("zzzzz");
curTextView.getText();
curTextView.gotoRange(arg0, arg1)
or XTextRange.
Thanks
Upvotes: 3
Views: 1824
Reputation: 2642
Incase anyone needs answer. I worked it out and posted below.
public int searchPageNumber()
{
XController xController = OODocument.getCurrentDocument().getXFrame().getController();
XTextViewCursorSupplier supTextViewCursor =
(XTextViewCursorSupplier) UnoRuntime.queryInterface(
XTextViewCursorSupplier.class, xController);
XTextViewCursor curTextView = supTextViewCursor.getViewCursor();
// gets the page cursor and assigns the text view cursor to the page
XPageCursor curPage =
(XPageCursor) UnoRuntime.queryInterface(
XPageCursor.class, curTextView);
System.out.println("The current page number is " + curPage.getPage());
// gets the model
XModel model = xController.getModel();
// assigns model to the document
XTextDocument xTextDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, model);
// Xsearchable so we can search the text
XSearchable xSearchable = (XSearchable) UnoRuntime.queryInterface(XSearchable.class, xTextDocument);
XSearchDescriptor xsd = (XSearchDescriptor) xSearchable.createSearchDescriptor();
xsd.setSearchString("zzzzz");
XInterface xfi = (XInterface) xSearchable.findFirst(xsd);
if (xfi != null) {
XTextRange xStart = (com.sun.star.text.XTextRange) UnoRuntime.queryInterface(
com.sun.star.text.XTextRange.class, xfi);
curTextView.gotoRange(xStart, false);
}
System.out.println("current page = " + curPage.getPage());
return curPage.getPage();
}
Upvotes: 4