Analisando algumas alternativas achei que a melhor forma de fazer isso foi utilizando uma biblioteca JS que preenche campos de um form PDF.
Montei o modelo e exportei pro Fluig junto com o formulário.
No cliente eu faço um get do PDF e preencho os campos com a biblioteca pdfform.js.
Desta forma o cliente pode personalizar o seu formulário como quiser e atualizar no Volume, apenas deixando os campos que o Fluig irá popular.
Segue o código que busca o PDF e preenche os campos do formulário:
var xhr = new XMLHttpRequest();
xhr.open('GET', "formModelo.pdf", true);
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
if (this.status == 200) {
var pdf_buf = this.response;
var fields = {
'campo1': [$("span[name='cmapo1']").text()],
'campo2': [$("span[name='cmapo2']").text()],
'campo3': [$("span[name='cmapo3']").text()],
'campo4': [$("span[name='cmapo4']").text()]
};
var out_buf = pdfform(minipdf).transform(pdf_buf, fields);
var blob = new Blob([new Uint8Array(out_buf)]);
url = window.URL.createObjectURL(blob);
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = url;
a.download = "Formulário X.pdf";
a.click();
window.URL.revokeObjectURL(url);
} else {
on_error('failed to load PDF model (code: ' + this.status + ')');
}
};
xhr.send();