Gerar PDF com dados do componente principal com base no envio de formulário
Aqui está o texto revisado com "Componentes principais" em maiúsculas:
Um cenário típico envolve a geração de um PDF a partir de dados enviados por um formulário adaptável baseado em Componentes principais. Esses dados estão sempre no formato JSON. Para gerar uma PDF usando a API Render PDF, é necessário converter os dados JSON no formato XML. O método toString
de org.json.XML
é usado para esta conversão. Para obter mais detalhes, consulte a documentação do org.json.XML.toString
método.
Baseado em formulário adaptável no esquema JSON
Siga estas etapas para criar um esquema JSON para seu formulário adaptável:
Gerar dados de amostra para o XDP
Para simplificar o processo, siga estas etapas refinadas:
- Abra o arquivo XDP no AEM Forms Designer.
- Navegue até "Arquivo" > "Propriedades do formulário" > "Visualização".
- Selecione "Gerar dados de visualização".
- Clique em "Gerar".
- Atribua um nome de arquivo significativo, como
form-data.xml
.
Gerar esquema JSON a partir dos dados XML
Você pode utilizar qualquer ferramenta online gratuita para converter XML em JSON usando os dados XML gerados na etapa anterior.
Processo de fluxo de trabalho personalizado para converter JSON em XML
O código fornecido converte JSON em XML, armazenando o XML resultante em uma variável de processo de fluxo de trabalho chamada dataXml
.
import org.slf4j.LoggerFactory;
import com.adobe.granite.workflow.WorkflowException;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import javax.jcr.Node;
import javax.jcr.Session;
import org.json.JSONObject;
import org.json.XML;
import org.slf4j.Logger;
import org.osgi.service.component.annotations.Component;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.exec.WorkflowProcess;
import com.adobe.granite.workflow.metadata.MetaDataMap;
@Component(property = {
"service.description=Convert JSON to XML",
"process.label=Convert JSON to XML"
})
public class ConvertJSONToXML implements WorkflowProcess {
private static final Logger log = LoggerFactory.getLogger(ConvertJSONToXML.class);
@Override
public void execute(final WorkItem workItem, final WorkflowSession workflowSession, final MetaDataMap arg2) throws WorkflowException {
String processArgs = arg2.get("PROCESS_ARGS", "string");
log.debug("The process argument I got was " + processArgs);
String submittedDataFile = processArgs;
String payloadPath = workItem.getWorkflowData().getPayload().toString();
log.debug("The payload in convert json to xml " + payloadPath);
String dataFilePath = payloadPath + "/" + submittedDataFile + "/jcr:content";
try {
Session session = workflowSession.adaptTo(Session.class);
Node submittedJsonDataNode = session.getNode(dataFilePath);
InputStream jsonDataStream = submittedJsonDataNode.getProperty("jcr:data").getBinary().getStream();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(jsonDataStream, "UTF-8"));
StringBuilder stringBuilder = new StringBuilder();
String inputStr;
while ((inputStr = streamReader.readLine()) != null) {
stringBuilder.append(inputStr);
}
JSONObject submittedJson = new JSONObject(stringBuilder.toString());
log.debug(submittedJson.toString());
String xmlString = XML.toString(submittedJson);
log.debug("The json converted to XML " + xmlString);
MetaDataMap metaDataMap = workItem.getWorkflow().getWorkflowData().getMetaDataMap();
metaDataMap.put("xmlData", xmlString);
} catch (Exception e) {
log.error("Error converting JSON to XML: " + e.getMessage(), e);
}
}
}
Criar fluxo de trabalho
Para lidar com envios de formulários, crie um fluxo de trabalho que inclua duas etapas:
- A etapa inicial emprega um processo personalizado para transformar os dados JSON enviados em XML.
- A etapa subsequente gera uma PDF combinando os dados XML com o modelo XDP.
Implante o código de exemplo
Para testar isso no servidor local, siga estas etapas simplificadas:
- Baixe e instale o pacote personalizado por meio do console OSGi da Web do AEM.
- Importar o pacote de fluxo de trabalho.
- Importe o formulário adaptável de exemplo e o modelo XDP.
- Visualizar o Formulário Adaptável.
- Preencha alguns campos de formulário.
- Envie o formulário para iniciar o workflow do AEM.
- Encontre o PDF renderizado na pasta de carga do fluxo de trabalho.