Expand my Community achievements bar.

Dive into Adobe Summit 2024! Explore curated list of AEM sessions & labs, register, connect with experts, ask questions, engage, and share insights. Don't miss the excitement.
SOLVED

AEM Forms API (com.adobe.fd) - Creating a servlet that flattens a pdf

Avatar

Level 2

Hi All

 

I am having trouble flattening a pdf. 

Using LiveCycle it would be done using the OutputService.generatePDFOutput operation

However the generatePDFOutput method available on com.adobe.fd.output.api.OutputService does not have a TransformationFormat that can be specified to a flat pdf, and its options object also does not seem to have anything that will help with this.

So my question is, using the com.adobe.fd library, how would you take a pdf Document that has fields etc, and flatten it?

 

Thanks!

Mahendran 

1 Accepted Solution

Avatar

Correct answer by
Level 2

OK, I've put together a quick sample that seems to work. Key point is that you use the generatePDFOutput method, but pass in null as the XML data.

 

Here's a snippet:

    
    ... flattenXfaForm(File inXfa, String outputFolder)    { 

            ....
            Document doc=null;
            String xfaName = inXfa.getName().toString();
            PDFOutputOptions options = new PDFOutputOptions();   
            options.setContentRoot(inXfa.getParentFile().toString());
            doc=outputService.generatePDFOutput(xfaName, null, options);    

            ....

}    

View solution in original post

5 Replies

Avatar

Level 2

Mahen Govender wrote...

Hi All

 

I am having trouble flattening a pdf. 

Using LiveCycle it would be done using the OutputService.generatePDFOutput operation

However the generatePDFOutput method available on com.adobe.fd.output.api.OutputService does not have a TransformationFormat that can be specified to a flat pdf, and its options object also does not seem to have anything that will help with this.

So my question is, using the com.adobe.fd library, how would you take a pdf Document that has fields etc, and flatten it?

 

Thanks!

Mahendran 

 

Any ideas on this? It Must be possible to flatten a pdf surely.... :/

M

Avatar

Level 2

Hi Mahen,

 

com.adobe.fd.output.api.OutputService  does not take TransformationFormat as input. It assumes that TransformationFormat is PDF and thus always generates a flat PDF from input PDF which has fields etc. Sample usage of this service can be found at https://helpx.adobe.com/aem-forms/6-2/aem-document-services-programmatically.html#generatePDFOutput

Thanks

Nitin

Avatar

Level 2

Hi Mahendran

After checking the docs, it seems that flattening is available in the OSGi Assembler service. Check out https://helpx.adobe.com/aem-forms/6-2/assembler-service.html

But there's a caveat: "The Assembler service uses the Output service to flatten dynamic XFA forms. If the Assembler service processes a DDX that requires it to flatten an XFA dynamic form and the Output service is unavailable, an exception is thrown. The Assembler service can flatten an Acrobat form or a static XFA form without using the Output service."

Greg

Avatar

Correct answer by
Level 2

OK, I've put together a quick sample that seems to work. Key point is that you use the generatePDFOutput method, but pass in null as the XML data.

 

Here's a snippet:

    
    ... flattenXfaForm(File inXfa, String outputFolder)    { 

            ....
            Document doc=null;
            String xfaName = inXfa.getName().toString();
            PDFOutputOptions options = new PDFOutputOptions();   
            options.setContentRoot(inXfa.getParentFile().toString());
            doc=outputService.generatePDFOutput(xfaName, null, options);    

            ....

}    

Avatar

Level 2

GregFullard wrote...

OK, I've put together a quick sample that seems to work. Key point is that you use the generatePDFOutput method, but pass in null as the XML data.

 

Here's a snippet:

    
    ... flattenXfaForm(File inXfa, String outputFolder)    { 

            ....
            Document doc=null;
            String xfaName = inXfa.getName().toString();
            PDFOutputOptions options = new PDFOutputOptions();   
            options.setContentRoot(inXfa.getParentFile().toString());
            doc=outputService.generatePDFOutput(xfaName, null, options);    

            ....

}    

 

This works brilliantly, but the process seems to make any barcodes on the form illegible. 

Any idea how to flatten a pdf, and maintain its barcodes?