2015-08-10 2 views
0

Фон: При использовании Microsoft Word можно определить поля, которые затем заменяются некоторыми значениями.Apache POI Word add field

Например, добавив следующее, а затем активировав функцию поля, отобразится заголовок документа (определенный в свойствах).

Word field

Вопрос: есть ли способ, чтобы добавить такие поля при создании моего документа Word, с помощью Apache POI, так что конечный пользователь видит правильные значения (я также предоставит значения для полей). Я просмотрел методы, определенные на объекте Document, но ничего не видел. Просто пишу эту строку в документе не будет работать (вроде очевидно ...)

Edit: XML, для некоторого поля выглядит следующим образом (в данном случае автор документа)

<w:p w:rsidRDefault="00AB5E40" w:rsidR="009B15AD"> 
    <w:fldSimple w:instr=" AUTHOR \* MERGEFORMAT "> 
    <w:r> 
     <w:rPr> 
     <w:noProof/> 
     </w:rPr> 
     <w:t>My Name</w:t> 
    </w:r> 
    </w:fldSimple> 
</w:p> 
+0

В каком формате файла вы работаете - '.doc' (HWPF) или' .docx' (XWPF)? – Gagravarr

+0

Я предпочитаю '.docx' (XWPF), но даже HWPF хватит, если это единственный способ пойти. – Anton

+0

XWPF было бы проще. Если вы создаете простой файл '.docx' в Microsoft Word с одним абзацем с одним полем в нем, то распакуйте файл .docx, какой XML сделал Word в поле абзаца для поля? – Gagravarr

ответ

1

Отвечая на мой вопрос, если у кого-то есть аналогичная проблема. Как Gagravarr отметил, что нет высокого уровня API для этого, но, глядя на структуру XML я пришел с этим:

private static void addField(XWPFParagraph paragraph, String fieldName) { 
    CTSimpleField ctSimpleField = paragraph.getCTP().addNewFldSimple(); 
    ctSimpleField.setInstr(fieldName + " \\* MERGEFORMAT "); 
    ctSimpleField.addNewR().addNewT().setStringValue("<<fieldName>>"); 
} 

Вызов этого метода с некоторым пунктом у вас есть под рукой, и имя поля будет оказывать это поле в вашем документе (либо с правильным значением, либо с < < fieldName >>)

Смежные вопросы