Expand my Community achievements bar.

Radically easy to access on brand approved content for distribution and omnichannel performant delivery. AEM Assets Content Hub and Dynamic Media with OpenAPI capabilities is now GA.

AEM as a Cloud Service Tutorials - Create custom process step | AEM Community Blog Seeding




AEM as a Cloud Service Tutorials - Create custom process step by Adobe Docs


Custom Process Step
The following is the complete code of the custom process step which converts and replaces the native files with the converted pdf’s.
This custom step searches for all attachments under the folder name which is provided as a process argument in the workflow.
This custom process step uses the methods of the custom DocumentCloudSDKService to create PDF’s.

package com.aemforms.doccloud.core;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import javax.jcr.Binary;
import javax.jcr.Node;
import javax.jcr.Session;

import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.adobe.aemfd.docmanager.Document;
import com.adobe.granite.workflow.WorkflowException;
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;
import com.day.cq.search.PredicateGroup;
import com.day.cq.search.Query;
import com.day.cq.search.QueryBuilder;
import com.day.cq.search.result.Hit;
import com.day.cq.search.result.SearchResult;;

@Component(property = {
Constants.SERVICE_DESCRIPTION + "=Convert form attachments to PDF Using Document Cloud API",
Constants.SERVICE_VENDOR + "=Adobe Systems",
"process.label" + "=Convert form attachments to PDF Using Document Cloud API"

public class ConvertAttachmentsToPDF implements WorkflowProcess {
private static final Logger log = LoggerFactory.getLogger(ConvertAttachmentsToPDF.class);
QueryBuilder queryBuilder;
DocumentCloudSDKService documentCloudService;
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap processArguments) throws WorkflowException {

log.debug("The payload path is " + workItem.getWorkflowData().getPayload().toString());
log.debug("The form attachments are stored under ..." + processArguments.get("PROCESS_ARGS", "string").toString() + " folder in the payload");

Session session = workflowSession.adaptTo(Session.class);
Map<String, String> map = new HashMap<String, String> ();
map.put("path", workItem.getWorkflowData().getPayload().toString() + "/" + processArguments.get("PROCESS_ARGS", "string").toString());
map.put("type", "nt:file");
Query query = queryBuilder.createQuery(PredicateGroup.create(map), workflowSession.adaptTo(Session.class));

SearchResult result = query.getResult();
log.debug("Get result hits " + result.getHits().size());
Node attachmentNode = null;
for (Hit hit: result.getHits()) {
try {
String path = hit.getPath();
log.debug("The title of the attachment is " + hit.getTitle() + " and path " + path);
String title = hit.getTitle();
title = title.substring(0, title.indexOf("."));
attachmentNode = workflowSession.adaptTo(Session.class).getNode(path + "/jcr:content");
InputStream xmlDataStream = attachmentNode.getProperty("jcr:data").getBinary().getStream();
Document convertedPDF = documentCloudService.createPDFFromInputStream(xmlDataStream, hit.getTitle());
Node nonPDFNode = session.getNode(path);
session.move(nonPDFNode.getPath(), nonPDFNode.getParent().getPath() + "/" + title + ".pdf");
Binary binary = session.getValueFactory().createBinary(convertedPDF.getInputStream());
attachmentNode.setProperty("jcr:data", binary);
log.debug("Replacing the original file with converted pdf ");

} catch (Exception e) {



Read Full Blog

AEM as a Cloud Service Tutorials - Create custom process step


Please use this thread to ask the related questions.

Kautuk Sahni

Topics help categorize Community content and increase your ability to discover relevant content.

0 Replies