代码之家  ›  专栏  ›  技术社区  ›  Robert Walter

以编程方式设置脚注引用运行的样式

  •  0
  • Robert Walter  · 技术社区  · 7 年前

    我用docx4j编写了一个生成器,它将专有数据模型作为输入,并生成一个docx文件作为输出。

    我尝试添加脚注(和脚注参考),如下所示: https://github.com/plutext/docx4j/blob/master/src/samples/docx4j/org/docx4j/samples/FootnoteAdd.java

    但是,我看不到如何向表示脚注引用的梯段添加样式。我完全按照示例中的方式创建它:

    CTFtnEdnRef ftnednref = wmlObjectFactory.createCTFtnEdnRef(); 
    JAXBElement<org.docx4j.wml.CTFtnEdnRef> ftnednrefWrapped = wmlObjectFactory.createRFootnoteReference(ftnednref); 
    r.getContent().add( ftnednrefWrapped); 
    ftnednref.setId( BigInteger.valueOf( i) );
    

    如何将样式信息添加到 ftnednref ? 最终,这个“跑”在我的结果中是一个正常的跑,但它没有RStyle FootnoteReference ,这意味着它不在我的文档的上标中。我认为应该自动应用此样式,但事实并非如此。我的结果如下:

    <w:r>
      <w:rPr>
        <w:highlight w:val="darkCyan"/>
      </w:rPr>
      <w:footnoteReference w:id="2"/>
    </w:r>
    

    它重新使用 rPr 之前的跑步。如何确保此脚注引用运行具有正确的样式?

    1 回复  |  直到 7 年前
        1
  •  0
  •   JasonPlutext    7 年前

    如果在Word中创建示例文档,则可以使用docx4j webapp或Helper Word加载项生成相应的Java代码。

    在这个案子中,我得到了:

            <w:r>
                <w:rPr>
                    <w:rStyle w:val="FootnoteReference"/>
                    <w:lang w:val="en-AU"/>
                </w:rPr>
                <w:footnoteReference w:id="1"/>
            </w:r>
    

            // Create object for r
            R r2 = wmlObjectFactory.createR(); 
            p.getContent().add( r2); 
                // Create object for rPr
                RPr rpr2 = wmlObjectFactory.createRPr(); 
                r2.setRPr(rpr2); 
                    // Create object for rStyle
                    RStyle rstyle = wmlObjectFactory.createRStyle(); 
                    rpr2.setRStyle(rstyle); 
                        rstyle.setVal( "FootnoteReference"); 
                    // Create object for lang
                    CTLanguage language2 = wmlObjectFactory.createCTLanguage(); 
                    rpr2.setLang(language2); 
                        language2.setVal( "en-AU"); 
                // Create object for footnoteReference (wrapped in JAXBElement) 
                CTFtnEdnRef ftnednref = wmlObjectFactory.createCTFtnEdnRef(); 
                JAXBElement<org.docx4j.wml.CTFtnEdnRef> ftnednrefWrapped = wmlObjectFactory.createRFootnoteReference(ftnednref); 
                r2.getContent().add( ftnednrefWrapped); 
                    ftnednref.setId( BigInteger.valueOf( 1) ); 
    

    因此,您需要的是:

                // Create object for rStyle
                RStyle rstyle = wmlObjectFactory.createRStyle(); 
                rpr.setRStyle(rstyle); 
                    rstyle.setVal( "FootnoteReference");
    

    您还需要在样式部分定义脚注引用样式。