Uma tarefa muito comum, porém chata é a leitura de templates do Microsoft Word e a alteração de palavras chaves personalizadas por um valor em específico. Há diversas formas de se fazer isso, hoje vou mostrar uma dessas formas, utilizando o Apache POI.
Este código foi testado com as versões 3.10-FINAL e 3.12 do Apache POI. Devido a um Bug na versão 3.12 é necessário adicionar a biblioteca poi-scratchpad as dependências, caso contrário você receberá o erro:
error: cannot access Paragraph
List<XWPFRun> runs = paragraph.getRuns();
^
class file for org.apache.poi.wp.usermodel.Paragraph not foundNas dependências do gradle adicione as seguintes bibliotecas:
compile group: 'org.apache.poi', name: 'poi', version: '3.12'
compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.12'
compile group: 'org.apache.poi', name: 'poi-scratchpad', version: '3.12'O modelo
Vamos utilizar um modelo simples (o código do exemplo é para arquivos .docx), mas bastante comum. Um texto com uma tabela estática, para efeito de exemplo coloquei apenas duas variáveis no documento, #valor_parcela# e uma variável na tabela #valor_total#.
Veja a imagem do modelo, abaixo:

E o código?
Vamos lá, chega de enrolação e vamos ao código.
Criei um método extractTemplate(InputStream stream, Map<String, String> properties) que recebe um stream do documento e um Map<String, String> com as chaves/valores que iremos substituir.
Você pode fazer o download do código fonte do exemplo aqui. (https://github.com/cadocruz/exemplo-apache-poi)
Abaixo dois métodos extras, um para configurar o tamanho da tabela e outro para configurar um paragrafo.