как да създадете нова дума от шаблон с docx4j

Имам следния сценарий и имам нужда от съвет:

Потребителят ще въведе документ на Word като шаблон и ще предостави някои параметри по време на изпълнение, за да мога да направя заявка в моята база данни и да получа данни за попълване на документа. И така, има две основни неща, които трябва да направя:

  1. Заменете всеки ключ в документа със съответния резултат от текущия ред на заявка.
  2. „Обединяване“ (копиране? дублиране?) на съществуващия документ непроменен в себе си (добавяне) в зависимост от това колко реда съм получил от заявката и замяна на ключовете от това ново копие със стойностите на следващия ред.

Какъв е най-добрият подход за това? Засега успях да направя заместващата част, като използвах unmarshallfromtemplate, предоставяйки му hashmap. Но този начин е малко сложен, защото трябва да добавя "${variable_name}" в документа и понякога думата разделя "${" и "}" в различни тагове, причинявайки проблеми.

Четох за персонализираното xml свързване, но не го разбрах напълно. Трябва да генерирам персонализиран XML, да го инжектирам в документа (всичко това un runtime) и да извикам applybindings?? Ако това е вярно, как бих свързал полетата в документа към xml? По име?


person wilson    schedule 16.03.2013    source източник


Отговори (1)


docx4j включва VariablePrepare, който може да подреди вашия входен docx, така че вашите ключове да не се разделят на отделни изпълнения.

Но все пак би било по-добре да преминете към обвързване на данни за контрол на съдържанието, особено ако имате повтарящи се данни (помислете например за редови позиции във фактура). Разкриване: Подкрепям този подход в docx4j.

За да приемете подхода за обвързване на данни за контрол на съдържанието:

  1. измислете XML формат, който има смисъл за вашите данни, и напишете някакъв код, за да конвертирате резултатите от вашата заявка към базата данни в този формат.

  2. модифицирайте вашия шаблон, така че контролите на съдържанието да са обвързани с елементи във вашия XML документ. обикновено бихте използвали добавка за авторство за Word, за да помогнете с това. (Технологията, която Microsoft използва за обвързване, е XPath, така че как се обвързвате зависи от вашата XML структура, но, да, обикновено се обвързвате с името или ID на елемента).

  3. сега имате вашия XML файл и подходящ intput docx, ContentControlsMergeXML съдържа кода, от който се нуждаете, за да създадете екземпляр на документ по време на изпълнение. Има и версия на това за сървлет среда на https://github.com/plutext/OpenDoPE-WAR

Като алтернатива на 1 и 2, има също org.docx4j.model.datastorage.migration.FromVariableReplacement в текущите nightlies, който може да конвертира вашия съществуващ документ "${". Но само до стандартизиран целеви XML формат.

Ако имате допълнителни въпроси, има форум, посветен на тази тема на http://www.docx4java.org/forums/data-binding-java-f16/

person JasonPlutext    schedule 16.03.2013