Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

AEM as a Cloud Service Tutorials - Merge data with the XDP template | AEM Community Blog Seeding

Avatar

Administrator

BlogImage.jpg

AEM as a Cloud Service Tutorials - Merge data with the XDP template by Adobe Docs

Abstract

Make the POST call
The next step is to make an HTTP POST call to the endpoint with the necessary parameters. The template and the datafiles are provided as resource files. Properties of the generated pdf are specified via the option’s parameter in the request.The property embedFonts is used to embed custom fonts in the generated pdf.Please follow this documentation to deploy custom fonts to your Forms cloud instance. The properties are specified in the options.json resource file. Since, the end point has token based authentication we pass the Access Token in the request header.

The following code was used to generate pdf by merging data with the template

public class DocumentGeneration
{
public String SAVE_LOCATION = "c:\\aspire1";
public void mergeDataWithXdpTemplate(String postURL)
{
HttpPost httpPost = new HttpPost(postURL);
CredentialUtilites cu = new CredentialUtilites();
String accessToken = cu.getAccessToken();
httpPost.addHeader("Authorization", "Bearer " + accessToken);
ClassLoader classLoader = DocumentGeneration.class.getClassLoader();
URL templateFile = classLoader.getResource("templates/custom_fonts.xdp");
File xdpTemplate = new File(templateFile.getPath());
URL url = classLoader.getResource("datafiles");
System.out.println(url.getPath());
File files[] = new File(url.getPath()).listFiles();
for (int i = 0; i < files.length; i++) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
ContentType strContent = ContentType.create("text/plain", Charset.forName("UTF-8"));
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("data", files[i]);
builder.addBinaryBody("template", xdpTemplate);
builder.addBinaryBody("options",GetOptions.getPDFOptions().getBytes(),ContentType.APPLICATION_JSON,"options"
try {
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
CloseableHttpClient httpclient = HttpClients.createDefault();
CloseableHttpResponse response = httpclient.execute(httpPost);
InputStream generatedPDF = response.getEntity().getContent();
byte[] bytes = IOUtils.toByteArray(generatedPDF);
File saveLocation = new File(SAVE_LOCATION);
if (!saveLocation.exists()) {
saveLocation.mkdirs();
}
File outputFile = new File(SAVE_LOCATION+File.separator+files[i].getName().replace("xml", "pdf"));
try (FileOutputStream outputStream = new FileOutputStream(outputFile)) {
outputStream.write(bytes);
}
} catch (Exception e) {
System.out.println("The error is " + e.getMessage());
}

}
System.out.println("Done generating " + files.length + " files");

}

}

Read Full Blog

AEM as a Cloud Service Tutorials - Merge data with the XDP template

Q&A

Please use this thread to ask the related questions.

0 Replies