2016-05-30 13 views
0

У меня есть файл docx, содержащий сноску. У меня есть местозаполнитель в тексте сноски, который нужно заменить. При извлечении узлов и изменении значения text, которое заполнитель не прошел. По какой-то причине я думаю, что он не подбирает текст, приведенный в сноске.Как изменить замещающую сноску в docx4j

Можете ли вы, пожалуйста, посоветовать мне, как вы можете заменить местозаполнитель в сноске.

ответ

0

С @ JasonPlutext Ответим не работал мой случай Я отправляю то, что сработало для меня

FootnotesPart fp = template.getMainDocumentPart().getFootnotesPart(); 
List<Object> texts = fp.getJAXBNodesViaXPath("//w:t", true); 

for(Object obj : texts) { 
    Text text = (Text) ((JAXBElement) obj).getValue(); 
    String textValue = text.getValue(); 
    // do variable replacement 
    text.setValue(textValue); 
} 

Но все же я сталкиваюсь с проблемой при экспорте этого файла в формате pdf с использованием Docx4J.toPDF (..); Выход не подбирает ссылку сноски.

+0

Какую версию docx4j вы используете? Какой метод вывода PDF (FO или коммерческий конвертер)? – JasonPlutext

+0

Я использую docx4j-3.2.1 и используя метод Docx4J.toPDF (wordMLPackage, FileOutputStream). Я не пользуюсь коммерческим конвертером. –

+0

Может быть ограничением в подходе, основанном на FO. Вы можете отлаживать/улучшать это, или вы можете попробовать коммерческий конвертер по адресу http://converter-eval.plutext.com/ – JasonPlutext

0

подход 1

быстрее, если вы еще не вызвали демаршаллизации произойти:

FootnotesPart fp = wordMLPackage.getMainDocumentPart().getFootnotesPart(); 
fp.variableReplace(mappings); 

подход 2

FootnotesPart fp = wordMLPackage.getMainDocumentPart().getFootnotesPart(); 

    // unmarshallFromTemplate requires string input 
    String xml = XmlUtils.marshaltoString(fp.getJaxbElement(), true); 
    // Do it... 
    Object obj = XmlUtils.unmarshallFromTemplate(xml, mappings); 
    // Inject result into docx 
    fp.setJaxbElement((CTFootnotes) obj); 
+0

В настоящее время я использую wordMLPackage.getMainDocumentPart(), а затем извлечение через XPath, узлы JAXB и изменение значений заполнителей обычной заменой строки. При таком подходе я не могу видеть сноску в выходном документе. Здесь есть только «1», обозначающий индекс сноски. Мой вопрос: могу ли я объединить извлечение узлов JAXB «» из WordMLPackage.getMainDocumentPart() и части этой сноски? –

+0

Сноски указаны в сносках. Конечно, вы можете использовать индекс того, который вы хотите манипулировать им ... – JasonPlutext

+0

Его не происходит, я пробовал подход 1. Должен ли я показывать выходной файл? Я могу разместить его где-нибудь –