使用docx4j进行RTF内容控制数据绑定

时间:2019-11-04 09:02:54

标签: docx4j

尝试为表示富文本内容控件的sdtBlock创建到自定义XML部分的数据绑定是行不通的,因为它会在生成的XML中创建w:dataBinding标记,而不是w15:dataBinding。富文本内容控件需要w15命名空间uri。

我使用以下代码直接在Java中而不是在创作工具中创建数据绑定:

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

并且org.docx4j.w15包中没有数据绑定类。

是否有任何方法可以指定在编组时对此实例使用其他名称空间?

1 个答案:

答案 0 :(得分:0)

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>