Are you looking to insert the caption, or the reference to the caption? I think 
you want to insert a reference to a dependent field for a text field master. 
Does this sound correct? 

The text field master, which is of type: 

com.sun.star.text.fieldmaster.SetExpression.Figure

But you want to reference a Dependent field. If my guess is correct, this is 
how I insert a reference to the first Figure using Basic. Note that there is 
almost no error checking, so, this could go very wrong. 

Sub Main
  Dim oField
  Dim oNewField
  Dim oText
  Dim oCurs
  Dim oReferencedField
  Dim oEnum
  Dim oDispatcher      ' Dispatcher object.
  Dim oFrame

 ' Setup to perform a dispatch.
  oFrame = ThisComponent.CurrentController.Frame
  oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

  oText = ThisComponent.getText()
  oCurs = ThisComponent.CurrentController.getViewCursor()

    oEnum = ThisComponent.getTextFields().createEnumeration()
    If Not IsNull(oEnum) Then
    Do While oEnum.hasMoreElements()


      oField = oEnum.nextElement()
      'Inspect oField
      If oField.supportsService("com.sun.star.text.TextField.SetExpression") 
Then
        If oField.VariableName = "Figure" Then
          Print "Found one"
          Exit Do
        End If
      End If
    Loop
  End If

  ' No error checking, I just assume that I found one. DANGER DANGER DANGER


  oNewField = 
ThisComponent.createInstance("com.sun.star.text.textfield.GetReference")
  oNewField.ReferenceFieldPart = 
com.sun.star.text.ReferenceFieldPart.CATEGORY_AND_NUMBER
  oNewField.ReferenceFieldSource = 
com.sun.star.text.ReferenceFieldSource.SEQUENCE_FIELD
  oNewField.SequenceNumber = oField.SequenceValue
  oNewField.SourceName = "Figure"
  oText.insertTextContent(oCurs, oNewField, True)
  
  ' This next part will NOT work until after all of the fields have updated.
  ' So, force an update.
  oDispatcher.executeDispatch(oFrame, ".uno:UpdateFields", "", 0, Array())
End Sub


On Thursday, September 05, 2019 10:59 EDT, LORENZO Vincent 
<vincent.lore...@cea.fr> wrote:
 Hello everybody,
Since my last question, I switched task. Now I come back to my LibreOffice task 
to resolve my caption problem.
I'm still blocked on this problem. I get a different result compared to my last 
email, but the reference for the caption is still not found.
I replace Illustration by Figure, but the problem keeps the same.

I obtain a text:sequence-ref instead of a text:sequence. Does someone know why 
or which is the API to use to generate a text:sequence...

My result for the numbering of the caption:
<text:sequence-ref text:reference-format="value" 
text:ref-name="refFigure0">Erreur : source de la référence non 
trouvée</text:sequence-ref> (the french text said "reference not found")

I would like to get :
<text:sequence text:ref-name="refFigure0" text:name="Figure" 
text:formula="ooow:Figure+1" style:num-format="1">1</text:sequence>

My java code for that :

Object oReference = 
xMultiServiceFactory.createInstance("com.sun.star.text.textfield.GetReference");
XPropertySet oReferencePropertySet = 
UnoRuntime.queryInterface(XPropertySet.class, oReference);
oReferencePropertySet.setPropertyValue("SourceName", "Figure");// I get 
<text:sequence-ref
oReferencePropertySet.setPropertyValue("ReferenceFieldPart", 
ReferenceFieldPart.ONLY_SEQUENCE_NUMBER);
oReferencePropertySet.setPropertyValue("ReferenceFieldSource", 
ReferenceFieldSource.SEQUENCE_FIELD);
oReferencePropertySet.setPropertyValue("SequenceNumber", 0);// (short) 2);//not 
requireed ?
XTextContent xRef = UnoRuntime.queryInterface(XTextContent.class, oReference);
localCursor.getText().insertTextContent(localCursor, xRef, false);

Regards,
--
Vincent Lorenzo


-----Message d'origine-----
De : LibreOffice <libreoffice-boun...@lists.freedesktop.org> De la part de 
LORENZO Vincent
Envoyé : vendredi 15 février 2019 14:37
À : Kaganski Mike <mikekagan...@hotmail.com>; Miklos Vajna 
<vmik...@collabora.com>; sos <s...@pmg.be>
Cc : libreoffice@lists.freedesktop.org
Objet : [PROVENANCE INTERNET] RE: need help to insert an image with a caption 
with the Libo java API

Hello everybody,
I thank you for your answers. Yes I want to add an image with a caption 
programmatically and I want a caption like this "Illustration 1 : My caption"
To my mind, it would be better/cleaner if I was able to generate the same thing 
than I do the UI. Thanks to you, I succeed to build the expected structure for 
the image and to set a text below it, but I still have some problems, mainly 
with the GetReference.

The GetReference generates :
<text:reference-ref text:reference-format="text" 
text:ref-name="refIllustration0">Erreur : source de la référence non 
trouvée</text:reference-ref> (sorry my Libo is in French, it is written "Sorry 
: source of the reference not found").

And I would like to get a text:sequence instead of a text:reference, to get 
this result:
<text:sequence text:ref-name="refIllustration0" text:name="Illustration" 
text:formula="ooow:Illustration+1" style:num-format="1">1</text:sequence>

Please, do you know how I can build a text:sequence ?

Please found in attachment the java code I wrote [1], the expect xml structure 
[2] and the current xml structure [3].
I know I have some difference between [2] and [3] with the width/height 
properties and inside the draw frame, but it is not the subject of this thread.

[1] insertImage.java
[2] expectedResult.xml
[3] currentResult.xml

In addition, I have more generic question, do you know if it exists a 
documentation, indicating mapping, between the xml elements and how to 
get/create them from java ? For example, in xml svg:width is called Height in 
the java API, and my Textframe becomes <draw:text-box...<

Best regards,
--
Vincent Lorenzo









-----Message d'origine-----
De : Kaganski Mike [mailto:mikekagan...@hotmail.com]
Envoyé : mercredi 13 février 2019 11:42
À : Miklos Vajna <vmik...@collabora.com>; LORENZO Vincent 
<vincent.lore...@cea.fr>
Cc : libreoffice@lists.freedesktop.org
Objet : Re: need help to insert an image with a caption with the Libo java API

On 13.02.2019 12:45, Miklos Vajna via LibreOffice wrote:
> Hi,
>
> On Tue, Feb 12, 2019 at 09:27:15AM +0000, LORENZO Vincent 
> <vincent.lore...@cea.fr> wrote:
>> I would like to add a caption, to an inserted image in a text
>> document, but I don't find how to do that... Please do you have
>> pointer/documentation for me ?
>
> I think captions are just a UI feature. The doc model just stores a
> text frame around the image and the image is followed by the caption itself.
>
> (I.e. later it's not possible to reliably detect if some content
> around an image in a frame was created by hand or using the captions
> UI code.)
>
> So you can do the same "manually" using the UNO API. When in doubt,
> see what UNO API the ODT import uses to create the doc model based on
> the input markup.

And actually, if an image is not intended to be floating, but (as seen in 
majority of cases) is a part of normal text flow, then the frame could be not 
needed at all - simply add an image anchored as character, then add a paragraph 
with required style and numbering range field, then continue with other 
paragraphs. This makes the document structure clearer. Just an advise based on 
own experience.

--
Best regards,
Mike Kaganski
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice


 
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to