AEM Forms での Assembler サービスの使用 using-assembler-service-in-aem-forms
この記事では、複数の PDF ファイルをブラウザーにドラッグ&ドロップし、組み合わせた pdf ファイルをファイルシステムに保存する機能を示すアセットを提供します。次に、ブラウザーを使用してアップロードされた pdf ファイルをアセンブルするサーブレットのコードを示します。
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) {
log.debug("In Assemble Uploaded Files");
Map<String, Object> mapOfDocuments = new HashMap<String, Object>();
final boolean isMultipart = org.apache.commons.fileupload.servlet.ServletFileUpload.isMultipartContent(request);
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = null;
try {
docBuilder = docFactory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
org.w3c.dom.Document ddx = docBuilder.newDocument();
Element rootElement = ddx.createElementNS("http://ns.adobe.com/DDX/1.0/", "DDX");
ddx.appendChild(rootElement);
Element pdfResult = ddx.createElement("PDF");
pdfResult.setAttribute("result", "GeneratedDocument.pdf");
rootElement.appendChild(pdfResult);
if (isMultipart) {
final java.util.Map<String, org.apache.sling.api.request.RequestParameter[]> params = request
.getRequestParameterMap();
for (final java.util.Map.Entry<String, org.apache.sling.api.request.RequestParameter[]> pairs : params
.entrySet()) {
final String k = pairs.getKey();
final org.apache.sling.api.request.RequestParameter[] pArr = pairs.getValue();
final org.apache.sling.api.request.RequestParameter param = pArr[0];
try {
if (!param.isFormField()) {
final InputStream stream = param.getInputStream();
log.debug("the file name is " + param.getFileName());
log.debug("Got input Stream inside my servlet####" + stream.available());
com.adobe.aemfd.docmanager.Document document = new Document(stream);
mapOfDocuments.put(param.getFileName(), document);
org.w3c.dom.Element pdfSourceElement = ddx.createElement("PDF");
pdfSourceElement.setAttribute("source", param.getFileName());
pdfSourceElement.setAttribute("bookmarkTitle", param.getFileName());
pdfResult.appendChild(pdfSourceElement);
log.debug("The map size is " + mapOfDocuments.size());
} else {
log.debug("The form field is" + param.getString());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
com.adobe.aemfd.docmanager.Document ddxDocument = documentServices.orgw3cDocumentToAEMFDDocument(ddx);
Document assembledDocument = documentServices.assembleDocuments(mapOfDocuments, ddxDocument);
String path = documentServices.saveDocumentInCrx("/content/ocrfiles", assembledDocument);
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("path", path);
response.setContentType("application/json");
response.setHeader("Cache-Control", "nocache");
response.setCharacterEncoding("utf-8");
PrintWriter out = null;
out = response.getWriter();
out.println(jsonObject.toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
この機能を AEM Server で動作させるには
- AssembleMultipleFiles.zip をローカルシステムにをダウンロードします。
- パッケージマネージャーを使用してパッケージをインストールします。
- カスタムドキュメントサービスバンドルをダウンロードする
- サービスユーザーバンドルを使用した開発をダウンロードする
- felix web コンソールを使用してバンドルをデプロイし、起動する
- ブラウザーで AssemblePdfs.html を開きます
- PDF ファイルのファイルを 2、3 個ドラッグ&ドロップします。
NOTE
AEM Forms のインストールが完了していることを確認します。すべてのバンドルがアクティブ状態である必要があります。
Boot delegate RSA と BouncyCastle ライブラリが、この AEM Forms のインストールで説明されているように追加されていることを確認します。
このデモの注意事項
-
このコードは XFA ベースの PDF ドキュメントを処理しません。
-
必ず PDF ファイルのみをドラッグ&ドロップしてください。
recommendation-more-help
8de24117-1378-413c-a581-01e660b7163e