Привязка данных управления содержимым Rich Text с помощью docx4j - PullRequest
0 голосов
/ 04 ноября 2019

Попытка создать привязку данных к пользовательской части XML для sdtBlock, представляющего элемент управления расширенного текста, не работает, поскольку в результирующем XML создается тег aw: dataBinding вместо w15: dataBinding. Для управления содержимым расширенного текста требуется пространство имен w15.

Я создаю привязку данных непосредственно в Java, а не в инструменте разработки, с помощью этого кода:

org.docx4j.wml.CTDataBinding cTDataBinding = new CTDataBinding();

И данных неткласс связывания в пакете org.docx4j.w15.

Можно ли указать, что для этого экземпляра при маршалинге следует использовать другое пространство имен?

1 Ответ

0 голосов
/ 05 ноября 2019

https://github.com/plutext/docx4j/blob/master/docx4j-openxml-objects/src/main/java/org/docx4j/w15/ObjectFactory.java#L232 содержит:

@XmlElementDecl(namespace = "http://schemas.microsoft.com/office/word/2012/wordml", name = "dataBinding")
public JAXBElement<CTDataBinding> createDataBinding(CTDataBinding value) {
    return new JAXBElement<CTDataBinding>(_DataBinding_QNAME, CTDataBinding.class, null, value);
}

, поэтому вы сможете создавать то, что вы хотите, используя w15 ObjectFactory. Например:

    SdtPr sdtPr = new SdtPr();      
    JAXBElement<CTDataBinding> w15DataBinding = new org.docx4j.w15.ObjectFactory().createDataBinding(new CTDataBinding());      
    sdtPr.getRPrOrAliasOrLock().add(w15DataBinding);        
    System.out.println(XmlUtils.marshaltoString(sdtPr));

производит (пропуская некоторые пространства имен):

<w:sdtPr xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" >
    <w15:dataBinding/>
</w:sdtPr>
...