Como criar um Gerador de PDF: mudanças entre as edições
(Criou página com '==Passo 1 - Criar um Template== Usaremos o LibreOffice Writer ([https://www.libreoffice.org/download/download/ Baixe clicando aqui]) para gerar documento de template em format...') |
Sem resumo de edição |
||
| Linha 14: | Linha 14: | ||
[[Arquivo:Pdf3.png|commoldura|centro|Figura 3]] |
[[Arquivo:Pdf3.png|commoldura|centro|Figura 3]] |
||
<br> |
<br> |
||
Com isso concluído, você já tem um template funcional, ....(escrever mais sobre o WebService de PDF do inf http://pdf.inf.ufsc.br/gera?odturl=). |
Com isso concluído, você já tem um template funcional, e ele deve estar hospedado no servidor e ....(escrever mais sobre o WebService de PDF do inf http://pdf.inf.ufsc.br/gera?odturl=). |
||
==Passo 2 - Criar |
==Passo 2 - Criar parâmetro== |
||
Crie um parâmetro clicando na pool do processo, seguindo em '''Data > Parameters > Add...''' com nome '''wsPDFurl''' do tipo '''Text'''. |
|||
Defina o valor do parâmetro em '''Configure > Parameters''', ao encontrar o '''wsPDFurl''' definido anteriormente, insira este valor: '''http://pdf.inf.ufsc.br/gera?odturl=''' |
|||
[[Arquivo:Pdf4.png|commoldura|centro|Figura 4]] |
|||
<br> |
|||
Na Figura 4 pode-se observar as duas etapas realizadas, |
|||
| ⚫ | |||
Deve-se criar um '''document''' do tipo '''single''' para cada PDF gerado. <br> |
Deve-se criar um '''document''' do tipo '''single''' para cada PDF gerado. <br> |
||
'''Atenção:''' Se for preciso enviar esse documento como anexo por e-mail, será necessário criar um '''document''' do tipo '''multiple''', pois o Bonita só aceita documentos múltiplos como anexo. É preciso criar um '''Operation''' na tarefa para que seja adiciona à lista. |
'''Atenção:''' Se for preciso enviar esse documento como anexo por e-mail, será necessário criar um '''document''' do tipo '''multiple''', pois o Bonita só aceita documentos múltiplos como anexo. É preciso criar um '''Operation''' na tarefa para que seja adiciona à lista. |
||
[[Arquivo:Pdf5.png|commoldura|centro|Figura 5]] |
|||
<br> |
|||
| ⚫ | |||
Por convenção, o documento múltiplo para email será explicitado adicionando a palavra '''email''' ao final do nome, como realizado na Figura 5. |
|||
==Passo 4 - Criar uma variável para as chaves== |
|||
Já no projeto a ser inserido o gerador de PDF: |
Já no projeto a ser inserido o gerador de PDF: |
||
| Linha 42: | Linha 51: | ||
*Após isso salve. |
*Após isso salve. |
||
==Passo |
==Passo 5 - Criar o conector== |
||
Com a tarefa de serviço selecionada, adicione um conector do tipo '''Groovy Script''' em '''Execution > Connectors in > Add...'''. Insira nomes apropriados para o nome do conector e script, como por exemplo: '''gerarPDF()'''. |
|||
<pre> |
|||
import org.apache.http.HttpEntity |
|||
import org.apache.http.HttpResponse |
|||
import org.apache.http.NameValuePair |
|||
import org.apache.http.client.HttpClient |
|||
import org.apache.http.client.entity.UrlEncodedFormEntity |
|||
import org.apache.http.client.methods.HttpPost |
|||
import org.apache.http.auth.AuthScope |
|||
import org.apache.http.message.BasicNameValuePair |
|||
import org.bonitasoft.engine.bpm.document.DocumentValue |
|||
import org.apache.http.impl.client.HttpClients; |
|||
//Parte 1 - Requisitando template no servidor |
|||
Long case_id = processInstanceId; |
|||
HttpClient httpclient = HttpClients.createDefault(); |
|||
String url = wsPDFurl + "http://documentacao.processos.ufsc.br/templates/p00/template_teste.odt"; //Isso é um exemplo, esta url depende muito do caminho escolhido para hospedagem do documento |
|||
HttpPost httppost = new HttpPost(url); |
|||
//Parte 2 - Preenchendo a lista com os valores que se deseja inserir no documento. |
|||
//Obs.: A ordem utilizada no Passo de criação das chaves de template, deve ser seguida exatamente da mesma forma nessa lista. |
|||
List<String> valores = new ArrayList<String>(); |
|||
valores.addAll( |
|||
bdm.getNome(), |
|||
bdm.getCelular().toString(), //Como é um array de strings, deve se converter qualquer outro tipo de dado em string. |
|||
bdm.getEmail() |
|||
); |
|||
// Parte 3 - Criando uma lista que relaciona cada chave com seu valor. |
|||
ArrayList<String> chaves = chavesTemplate; //Requisita a variável local já criada com as chaves |
|||
List<NameValuePair> params = new ArrayList<NameValuePair>(); |
|||
params.addAll( // Pode-se imaginar essa lista em um laço "for", mas por um motivo desconhecido, a utilização dele acaba em erro. |
|||
new BasicNameValuePair(chaves[0], valores[0]), |
|||
new BasicNameValuePair(chaves[1], valores[1]), |
|||
new BasicNameValuePair(chaves[2], valores[2]) |
|||
//Instancie novos objetos nessa lista com base no número de valores a serem relacionados. |
|||
); |
|||
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); |
|||
HttpResponse response = httpclient.execute(httppost); |
|||
byte[] content = response.getEntity().getContent().getBytes(); |
|||
String filename = "P00_Exemplo-" + case_id.toString() + ".pdf"; //Modifique o nome |
|||
apiAccessor.processAPI.attachDocument(processInstanceId, "documentoPDF", filename, "", content); //Modifique o nome do documento a ser anexado. |
|||
</pre> |
|||
Edição das 20h54min de 11 de maio de 2021
Passo 1 - Criar um Template
Usaremos o LibreOffice Writer (Baixe clicando aqui) para gerar documento de template em formato .odt.
Devemos inserir as chaves que serão posteriormente usadas para inserir informações.
- Vá em Inserir > Campo > Outros Campos, ou simplesmente Ctrl + F2;
- Na janela que será aberta, siga em Variáveis;
- Selecione Tipo como Campo do Usuário e Formato como Texto;
- Em nome e valor, por convenção, escreva o mesmo texto e colocando no formato CT_nomeDaVariavel, como foi feito na Figura 2;
- Ao clicar em Inserir, você verá que a chave foi adicionada ao documento;
- Na Figura 3, temos um exemplo com chaves: CT_Nome, CT_Celular e CT_Email;
Com isso concluído, você já tem um template funcional, e ele deve estar hospedado no servidor e ....(escrever mais sobre o WebService de PDF do inf http://pdf.inf.ufsc.br/gera?odturl=).
Passo 2 - Criar parâmetro
Crie um parâmetro clicando na pool do processo, seguindo em Data > Parameters > Add... com nome wsPDFurl do tipo Text. Defina o valor do parâmetro em Configure > Parameters, ao encontrar o wsPDFurl definido anteriormente, insira este valor: http://pdf.inf.ufsc.br/gera?odturl=
Na Figura 4 pode-se observar as duas etapas realizadas,
Passo 3 - Criar documentos
Deve-se criar um document do tipo single para cada PDF gerado.
Atenção: Se for preciso enviar esse documento como anexo por e-mail, será necessário criar um document do tipo multiple, pois o Bonita só aceita documentos múltiplos como anexo. É preciso criar um Operation na tarefa para que seja adiciona à lista.
Por convenção, o documento múltiplo para email será explicitado adicionando a palavra email ao final do nome, como realizado na Figura 5.
Passo 4 - Criar uma variável para as chaves
Já no projeto a ser inserido o gerador de PDF:
- Insira uma tarefa do tipo Service;
- Vá em Data > Local Variables > Add...;
- Adicione uma variável local a ela com nome chavesTemplate do tipo Java Object, automaticamente o Bonita define a Classe como java.util.List;
- Adicionando um valor padrão, iremos colocar todas as chaves do template em uma lista de Strings e no final retornaremos ela, dessa forma:
List<String> lista = new ArrayList<String>(); lista.addAll( "CT_Nome", "CT_Celular", "CT_Email" ); return lista;
- Após isso salve.
Passo 5 - Criar o conector
Com a tarefa de serviço selecionada, adicione um conector do tipo Groovy Script em Execution > Connectors in > Add.... Insira nomes apropriados para o nome do conector e script, como por exemplo: gerarPDF().
import org.apache.http.HttpEntity
import org.apache.http.HttpResponse
import org.apache.http.NameValuePair
import org.apache.http.client.HttpClient
import org.apache.http.client.entity.UrlEncodedFormEntity
import org.apache.http.client.methods.HttpPost
import org.apache.http.auth.AuthScope
import org.apache.http.message.BasicNameValuePair
import org.bonitasoft.engine.bpm.document.DocumentValue
import org.apache.http.impl.client.HttpClients;
//Parte 1 - Requisitando template no servidor
Long case_id = processInstanceId;
HttpClient httpclient = HttpClients.createDefault();
String url = wsPDFurl + "http://documentacao.processos.ufsc.br/templates/p00/template_teste.odt"; //Isso é um exemplo, esta url depende muito do caminho escolhido para hospedagem do documento
HttpPost httppost = new HttpPost(url);
//Parte 2 - Preenchendo a lista com os valores que se deseja inserir no documento.
//Obs.: A ordem utilizada no Passo de criação das chaves de template, deve ser seguida exatamente da mesma forma nessa lista.
List<String> valores = new ArrayList<String>();
valores.addAll(
bdm.getNome(),
bdm.getCelular().toString(), //Como é um array de strings, deve se converter qualquer outro tipo de dado em string.
bdm.getEmail()
);
// Parte 3 - Criando uma lista que relaciona cada chave com seu valor.
ArrayList<String> chaves = chavesTemplate; //Requisita a variável local já criada com as chaves
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.addAll( // Pode-se imaginar essa lista em um laço "for", mas por um motivo desconhecido, a utilização dele acaba em erro.
new BasicNameValuePair(chaves[0], valores[0]),
new BasicNameValuePair(chaves[1], valores[1]),
new BasicNameValuePair(chaves[2], valores[2])
//Instancie novos objetos nessa lista com base no número de valores a serem relacionados.
);
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
HttpResponse response = httpclient.execute(httppost);
byte[] content = response.getEntity().getContent().getBytes();
String filename = "P00_Exemplo-" + case_id.toString() + ".pdf"; //Modifique o nome
apiAccessor.processAPI.attachDocument(processInstanceId, "documentoPDF", filename, "", content); //Modifique o nome do documento a ser anexado.




