Generar PDF con datos del envío de formularios basados en componentes principales

Este es el texto revisado con "Componentes principales" en mayúsculas:

Un escenario típico implica generar una PDF a partir de los datos enviados mediante un formulario adaptable basado en componentes principales. Estos datos siempre están en formato JSON. Para generar una PDF utilizando la API de Render PDF, es necesario convertir los datos JSON al formato XML. El método toString de org.json.XML se usa para esta conversión. Para obtener más información, consulte la documentación del método org.json.XML.toString.

Formulario adaptable basado en esquema JSON

Siga estos pasos para crear un esquema JSON para su formulario adaptable:

Generar datos de ejemplo para el XDP

Para racionalizar el proceso, siga estos pasos refinados:

  1. Abra el archivo XDP en AEM Forms Designer.
  2. Vaya a "Archivo" > "Propiedades del formulario" > "Vista previa".
  3. Seleccione "Generate Preview Data".
  4. Haga clic en "Generar".
  5. Asigne un nombre de archivo significativo, como form-data.xml.

Generar un esquema JSON a partir de los datos XML

Puede utilizar cualquier herramienta en línea gratuita para convertir XML a JSON con los datos XML generados en el paso anterior.

Proceso de flujo de trabajo personalizado para convertir JSON a XML

El código proporcionado convierte JSON en XML y almacena el XML resultante en una variable de proceso de flujo de trabajo denominada 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);
        }
    }
}

Crear flujo de trabajo

Para gestionar los envíos de formularios, cree un flujo de trabajo que incluya dos pasos:

  1. El paso inicial emplea un proceso personalizado para transformar los datos JSON enviados en XML.
  2. El paso siguiente genera una PDF combinando los datos XML con la plantilla XDP.

json-to-xml

Implemente el código de ejemplo

Para probar esto en el servidor local, siga estos pasos optimizados:

  1. Descargue e instale el paquete personalizado a través de la consola web OSGi de AEM.
  2. Importe el paquete de flujo de trabajo.
  3. Importe el formulario adaptable y la plantilla XDP de ejemplo.
  4. Vista previa del formulario adaptable.
  5. Rellene algunos campos de formulario.
  6. Envíe el formulario para iniciar el flujo de trabajo de AEM.
  7. Busque el PDF procesado en la carpeta de carga útil del flujo de trabajo.
recommendation-more-help
8de24117-1378-413c-a581-01e660b7163e