Программно заданный стиль для сноскиСправочный прогон

Я написал генератор с 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 предыдущего запуска. Как я могу убедиться, что эта сноскаReference-Run имеет правильный стиль?


person Robert Walter    schedule 15.01.2018    source источник


Ответы (1)


Если вы создаете образец документа в Word, вы можете использовать веб-приложение docx4j или надстройку 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");

Вы также захотите определить стиль FootnoteReference в своей части стилей.

person JasonPlutext    schedule 16.01.2018
comment
спасибо, у меня еще недостаточно репутации, чтобы сделать мой голос "за" видимым. Решение, в основном, состоит в том, чтобы добавить пустой ряд (r2) с желаемым стилем и добавить ссылку на сноску к этому новому ряду вместо того, чтобы добавлять его к ряду абзаца. Может быть, пример, который я упоминаю в своем вопросе, следует соответствующим образом адаптировать? - person Robert Walter; 16.01.2018