ドキュメントAEMAEM チュートリアルAEM Forms のチュートリアル

コアコンポーネントベースのフォーム送信のデータを使用して PDF を生成する方法

Last update: Thu Mar 27 2025 00:00:00 GMT+0000 (Coordinated Universal Time)
  • 適用対象:
  • Experience Manager 6.5
  • トピック:

作成対象:

  • 経験者
  • 開発者

以下に示すのは、先頭を大文字にした「Core Components」を使用して改訂したテキストです。

典型的なシナリオでは、コアコンポーネントベースのアダプティブフォームを通じて送信されたデータから PDF を生成することが必要になります。このデータは常に JSON 形式です。Render PDF API を使用して PDF を生成するには、JSON データを XML 形式に変換する必要があります。org.json.XML の toString メソッドが、この変換に使用されます。詳しくは、org.json.XML.toString メソッドのドキュメントを参照してください。

JSON スキーマに基づくアダプティブフォーム

次の手順に従って、アダプティブフォームの JSON スキーマを作成してください。

XDP のサンプルデータを生成

プロセスを効率化するには、次の詳細な手順に従います。

  1. XDP ファイルを AEM Forms Designer で開きます。
  2. ファイル/フォームのプロパティ/プレビューに移動します。
  3. 「プレビューデータを生成」を選択します。
  4. 「生成」をクリックします。
  5. form-data.xml などの意味のあるファイル名を割り当てます。

XML データから JSON スキーマを生成

無料のオンラインツールを利用して、前の手順で生成した XML データを使用して XML を JSON に変換できます。

JSON を XML に変換するカスタムワークフロープロセス

以下に示したコードでは、JSON を XML に変換し、結果の XML を 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);
        }
    }
}

ワークフローの作成

フォームの送信を処理するには、次の 2 つの手順を含むワークフローを作成します。

  1. 最初の手順では、カスタムプロセスを使用して、送信された JSON データを XML に変換します。
  2. その後の手順では、XML データと XDP テンプレートを組み合わせて PDF を生成します。

json-to-xml

サンプルコードのデプロイ

これをローカルサーバーでテストするには、次の効率化された手順に従います。

  1. AEM OSGi web コンソールを使用して、カスタムバンドルをダウンロードしインストールします。
  2. ワークフローパッケージを読み込みます。
  3. サンプルのアダプティブフォームと XDP テンプレートを読み込みます。
  4. アダプティブフォームをプレビューします。
  5. いくつかのフォームフィールドに入力します。
  6. フォームを送信して AEM ワークフローを開始します。
  7. レンダリングされた PDF をワークフローのペイロードフォルダーで見つけます。
recommendation-more-help
8de24117-1378-413c-a581-01e660b7163e