ECMA スクリプトを使用したフラグメントを含む PDF ドキュメントの生成 developing-with-output-and-forms-services-in-aem-forms
この記事では、xdp フラグメントを使用して PDF ファイルを生成する際に、出力サービスを使用します。 メインの xdp とフラグメントは crx リポジトリに存在します。 AEM のファイルシステムフォルダー構造を模倣することが重要です。 例えば、xdp の fragments フォルダーでフラグメントを使用する場合は、AEM のベースフォルダーに fragments というフォルダーを作成する必要があります。ベースフォルダーにはベース xdp テンプレートが格納されます。例えば、ファイルシステムに次の構造がある場合
- c:\xdptemplates - これには、ベースの xdp テンプレートが含まれます
- c:\xdptemplates\fragments - このフォルダーにはフラグメントが含まれ、メインテンプレートは以下に示すようにフラグメントを参照します。
- フォルダー xdpdocuments には、ベーステンプレートと fragments フォルダー内のフラグメントが含まれます。
フォームとドキュメント UI を使用して、必要な構造を作成できます。
次に、2 つのフラグメントを使用するサンプル xdp のフォルダー構造を示します
- Output サービス - 通常、 xml データを xdp テンプレートまたは PDF と結合して、統合された PDF を生成するために使用されます。詳細については、出力サービスの javadoc を参照してください。このサンプルでは、crx リポジトリ内のフラグメントを使用します。
PDF の生成には次の ECMA スクリプトが使用されました。コードでは ResourceResolver と ResourceResolverHelper が使用されていることに注意してください。ResourceRelover は、このコードがユーザーコンテキストの外部で実行されるので必要です。
var inputMap = processorContext.getInputMap();
var itr = inputMap.entrySet().iterator();
var entry = inputMap.entrySet().iterator().next();
var xmlData = inputMap.get(entry.getKey());
log.info("Got XML Data File");
var resourceResolverHelper = sling.getService(Packages.com.adobe.granite.resourceresolverhelper.ResourceResolverHelper);
var aemDemoListings = sling.getService(Packages.com.mergeandfuse.getserviceuserresolver.GetResolver);
log.info("Got service resolver");
var resourceResolver = aemDemoListings.getFormsServiceResolver();
//The ResourceResolverHelper execute's the following code within the context of the resourceResolver
resourceResolverHelper.callWith(resourceResolver, {call: function()
{
//var statement = new Packages.com.adobe.aemfd.docmanager.Document("/content/dam/formsanddocuments/xdpdocuments/main.xdp",resourceResolver);
var outputService = sling.getService(Packages.com.adobe.fd.output.api.OutputService);
var pdfOutputOptions = new Packages.com.adobe.fd.output.api.PDFOutputOptions();
pdfOutputOptions.setContentRoot("crx:///content/dam/formsanddocuments/xdpdocuments");
pdfOutputOptions.setAcrobatVersion(Packages.com.adobe.fd.output.api.AcrobatVersion.Acrobat_11);
var dataMergedDocument = outputService.generatePDFOutput("main.xdp",xmlData,pdfOutputOptions);
//var dataMergedDocument = outputService.generatePDFOutput(statement,xmlData,pdfOutputOptions);
processorContext.setResult("mergeddocument.pdf",dataMergedDocument);
log.info("Generated the pdf document with fragments");
}
});
システム上のサンプルパッケージをテストするには:
-
以下のスクリーンショットに示すように、ユーザーマッパーサービス修正にエントリ DevelopingWithServiceUser.core:getformsresourceresolver=fd-service を追加します。
-
サンプル xdp ファイルと ECMA スクリプトをダウンロードして読み込みます。
これにより、c:/fragmentsandoutputservice フォルダーに監視フォルダー構造が作成されます。 -
サンプルデータファイルを抽出して、監視フォルダーのインストールフォルダー(c:\fragmentsandoutputservice\install)に配置します。
-
生成された PDF ファイルの監視フォルダー設定の結果フォルダーを確認します。