You mentioned force update, do you mean use refresh() method ? I have tried by below code, still can't work.
public void createPageNumber(XComponent component) { XMultiServiceFactory sevriceFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, component); XTextField pageNumberFiled; try { pageNumberFiled = (XTextField)UnoRuntime.queryInterface(XTextField.class, sevriceFactory.createInstance("com.sun.star.text.textfield.PageNumber")); XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, pageNumberFiled); props.setPropertyValue("NumberingType", NumberingType.ARABIC);//Set page number display as Arabic props.setPropertyValue("SubType", PageNumberType.CURRENT); document.getText().insertTextContent(document.getText().getEnd(), pageNumberFiled, true); XTextFieldsSupplier fieldsSupplier = UnoRuntime.queryInterface(XTextFieldsSupplier.class, document); XEnumerationAccess xEnumeratedFields = fieldsSupplier.getTextFields(); XRefreshable refeshable = UnoRuntime.queryInterface(XRefreshable.class, xEnumeratedFields); refeshable.refresh(); // try { // Thread.sleep(1000); // } catch (InterruptedException e) { // e.printStackTrace(); // } System.out.println(document.getText().getString()); } catch (com.sun.star.uno.Exception e) { e.printStackTrace(); } 2012/8/22 Andrew Douglas Pitonyak <and...@pitonyak.org> > > On 08/21/2012 09:08 PM, dongjun zong wrote: > >> Andrew, >> I think you are right, I add a sleep time after insert page number >> field before getText, the page number can get correct. >> But I think it's a bug for page number update issue. >> > > Have you tried forcing an update? If so, then you won't need to wait. > > I expect that an update may be a time consuming operation (say if you > insert at page number 400, and it must refresh from the start). I once saw > a problem where a document would open, but the initial page numbers were > wrong. It took a while for the page numbers to be updated after the > document loaded. The final solution was to issue a full refresh, which took > time, but made it happen. So, the trade off was to allow the user to > immediately see and edit the document rather than forcing them to wait for > the refresh to occur on load. With a large document, this can take time. > > My guess is that it takes significantly more time to create and insert a > field than to trigger the update process. When the API is used to insert, > we have no context on the operation so it seems reasonable to not make an > immediate update before return. If the update process takes 1000 times > longer to occur (probably depends on document size and other factors, > depending on what is updated), then if I want to insert 100 fields, what > might have taken a fraction of a second may now take minutes. > > Commands triggered from the GUI can make the reasonable assumption that > the user is not likely to perform that task a 100 times, and that a user is > sitting right there and probably desires an immediate response to the > command, so then the triggered code (a dispatch) includes the update task > as part of the process. > > If you think that not updating the single field immediately is a bug, you > should try inserting a Table Of Contents (TOC). > > So, although you are certain that it is a bug, and you may be right, I > might call it a design decision that tends to make the typical user > experience more performant; which is the usual case..... but this is mostly > speculation on my part. > > >> Oliver, I have tired again, on my computer, if don't add sleep time, it >> has problem for exist more than 2 page sample fie. You can try this sample, >> add a page nubmer at end of this document. pls get this sample from >> attachement. >> >> >> >> 2012/8/21 Andrew Douglas Pitonyak <and...@pitonyak.org <mailto: >> and...@pitonyak.org>> >> >> >> My expectation is that this is not a bug. >> >> I think that this is probably a timing problem based on the speed >> of the computer, the size of the document, how busy your CPU is, >> etc. If you do not have a number, then the values have probably >> not updated yet. Remember that the data model has no idea what >> page number it really is. This value must be updated by the view >> model / current controller (or something similar). If you have a >> value, then it just so happens that the values updated >> immediately. If you insert the value using the GUI, that code is >> smart enough to then trigger the update before it returns. >> >> >> On 08/21/2012 03:23 AM, dongjun zong wrote: >> >> The strange thing is this API can works fine for doc sample >> file. I guess >> this is a bug. >> >> 2012/8/21 Andrew Douglas Pitonyak <and...@pitonyak.org >> <mailto:and...@pitonyak.org>> >> >> >> OK, I had to look... >> >> For a text field, see if you can call update. This may not >> work if the >> document has not finished repaginating. I have heard of >> cases where a >> document had not finished doing that before someone tried >> to do stuff to >> it. The solution was to tell the document to full refresh >> (probably using a >> dispatch). >> >> >> >> On 08/21/2012 02:30 AM, Andrew Douglas Pitonyak wrote: >> >> Did you successfully insert the text field? If yes, >> then after you insert >> a text field, it has probably not yet refreshed its >> value. Off hand, I >> don't remember exactly what you need to refresh >> first.... I would need to >> look it up and I really need to run but figured it >> might help you a bit and >> you can look for the various refresh items (I think >> that you can refresh >> each index and for fields I think there may be a >> single master field >> refresh but I don't remember... have not done it in a >> long time.). >> >> On 08/20/2012 03:32 AM, dongjun zong wrote: >> >> Hi All, >> Using UNO API I do below operation. >> 1.Launch a odt document, >> 2.Create a page number field and insert into this >> docment >> 3.Get the document text >> >> But in the step3, page number is not contained in >> the get text. But if I >> launch a doc document, I can get the page number >> in step 3. I think this >> is >> a UNO API bug, can some body help confirm? Below >> is my main code pieces. >> >> XMultiServiceFactory sevriceFactory = >> (XMultiServiceFactory) >> UnoRuntime.queryInterface(**** >> XMultiServiceFactory.class, >> document); >> XTextField pageNumberFiled = >> (XTextField)UnoRuntime.**** >> queryInterface(XTextField.****class, >> sevriceFactory.createInstance(****"com.sun.star.text. >> **textfield.**PageNumber")); >> >> >> XPropertySet props = >> (XPropertySet)UnoRuntime.**** >> queryInterface(XPropertySet.****class, >> pageNumberFiled); >> >> props.setPropertyValue("****NumberingType", 4);//Set >> page number >> display as Arabic >> >> XTextCursor xTextCursor = >> document.getText().** >> createTextCursor(); >> xTextCursor.gotoEnd(false); >> >> document.getText().****insertTextContent(document.*** >> *getText().getEnd(), >> pageNumberFiled, true); >> >> >> String documentString = >> document.getText().getString()****; >> System.out.println(****documentString); >> >> >> -- >> Andrew Pitonyak >> My Macro Document: >> >> http://www.pitonyak.org/****AndrewMacro.odt<http://www.pitonyak.org/**AndrewMacro.odt> >> <http://www.**pitonyak.org/AndrewMacro.odt<http://www.pitonyak.org/AndrewMacro.odt> >> > >> Info: http://www.pitonyak.org/oo.php >> >> >> >> -- Andrew Pitonyak >> My Macro Document: >> http://www.pitonyak.org/**AndrewMacro.odt<http://www.pitonyak.org/AndrewMacro.odt> >> Info: http://www.pitonyak.org/oo.php >> >> >> > -- > Andrew Pitonyak > My Macro Document: > http://www.pitonyak.org/**AndrewMacro.odt<http://www.pitonyak.org/AndrewMacro.odt> > Info: http://www.pitonyak.org/oo.php > >