Pegando como base a solução do post o que ele faz basicamente é pegar um arquivo no disco>ler e colocar no outputstream.
Então se vc quer gerar dinamicamente voce deve gerar o arquivo e em vez de gravar ele no disco… vc grava direto no outputstream.
No meu caso eu gerava um excel do banco de dados e gravava na hd depois lia ele e mandava para o usuario.
A solução foi gerar o excel e escrever ele direto em um ByteArrayOutputstream em vez de escrever na hd, o ByteArrayOutputStream tem um metodo toByteArray que pode ser enviado ao usuário se vc modificar levemente o o codigo do post retirando todo codigo que faz a leitura do arquivo e transforma ele em um array de bytes antes de devolver para o usuário.