PDF genereren met gegevens uit de basiscomponentgebaseerde formulierverzending
- Van toepassing op:
- Experience Manager 6.5
Gemaakt voor:
- Ervaren
- Ontwikkelaar
Hier is de herziene tekst met "Core Components" met hoofdletters:
Een typisch scenario is dat een PDF wordt gegenereerd op basis van gegevens die zijn ingediend via een adaptief formulier op basis van kerncomponenten. Deze gegevens hebben altijd de JSON-indeling. Als u een PDF wilt genereren met de Render PDF API, moet u de JSON-gegevens converteren naar XML-indeling. De toString
-methode van org.json.XML
wordt gebruikt voor deze conversie. Voor meer details, verwijs naar de documentatie van org.json.XML.toString
methode.
Adaptief, op basis van JSON-schema
Ga als volgt te werk om een JSON-schema voor uw adaptieve formulier te maken:
Voorbeeldgegevens genereren voor de XDP
Voer de volgende verfijnde stappen uit om het proces te stroomlijnen:
- Open het XDP-bestand in AEM Forms Designer.
- Ga naar "Bestand" > "Formuliereigenschappen" > "Voorbeeld".
- Selecteer "Voorbeeldgegevens genereren".
- Klik op "Genereren".
- Wijs een betekenisvolle bestandsnaam toe, bijvoorbeeld
form-data.xml
.
JSON-schema genereren op basis van XML-gegevens
U kunt om het even welk vrij online hulpmiddel gebruiken om XML in JSONom te zetten gebruikend de gegevens van XML die in de vorige stap worden geproduceerd.
Aangepast workflowproces voor conversie van JSON naar XML
De opgegeven code converteert JSON naar XML en slaat de resulterende XML op in een werkstroomprocesvariabele met de naam 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);
}
}
}
Workflow maken
Als u formulierverzendingen wilt verwerken, maakt u een workflow die twee stappen omvat:
- In de eerste stap wordt een aangepast proces gebruikt om de verzonden JSON-gegevens te transformeren in XML.
- De volgende stap genereert een PDF door de XML-gegevens te combineren met de XDP-sjabloon.
De voorbeeldcode implementeren
Voer de volgende gestroomlijnde stappen uit om dit op uw lokale server te testen:
- Download en installeer de douanebundel via de het Webconsole van AEM OSGi.
- voer het werkschemapakketin.
- voer de steekproef Aangepaste Vorm en het malplaatje XDPin.
- Voorproef de Aangepaste Vorm.
- Vul een aantal formuliervelden in.
- Verzend het formulier om de AEM-workflow te starten.
- Zoek de gerenderde PDF in de payload-map van de workflow.