To get the content for a file rendition the RenditionsApi.getRenditionContent method, which will download the content bytes for the file rendition.
For more information about this ReST API endpoint, see Get File Rendition Content.
import org.alfresco.core.handler.RenditionsApi; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import org.springframework.stereotype.Component; import java.io.File; import java.io.IOException; import java.time.OffsetDateTime; @Component public class GetRenditionContentCmd { static final Logger LOGGER = LoggerFactory.getLogger(GetRenditionContentCmd.class); @Autowired RenditionsApi renditionsApi; public void execute(String fileNodeId, String renditionId, String filePathOnDisk) throws IOException { Resource nodeContent = getRenditionContent(fileNodeId, renditionId); // Write rendition file to disk File targetFile = new File(filePathOnDisk); FileUtils.copyInputStreamToFile(nodeContent.getInputStream(), targetFile); } /** * Get rendition content info. * * @param nodeId the id for the node that the rendition is for * @param renditionId the id of the rendition that we want to fetch content for, such as doclib, pdf etc * @return Rendition content info object */ private Resource getRenditionContent(String nodeId, String renditionId) throws IOException { // Relevant when using API call from web browser, true is the default Boolean attachment = true; // Only download if modified since this time, optional OffsetDateTime ifModifiedSince = null; // The Range header indicates the part of a rendition that the server should return. // Single part request supported, for example: bytes=1-10., optional String range = null; // If true and there is no rendition for this nodeId and renditionId, then the placeholder image for the // mimetype of this rendition is returned, rather than a 404 response Boolean placeholder = false; Resource result = renditionsApi.getRenditionContent( nodeId, renditionId, attachment, ifModifiedSince, range, placeholder).getBody(); LOGGER.info("Got rendition {} size: {}", result.getFilename(), result.contentLength()); return result; } }
Executing this code and getting a pdf rendition for a text file looks like this:
% java -jar target/rest-api-0.0.1-SNAPSHOT.jar get-rendition-content 0492460b-6269-4ca1-9668-0d934d2f3370 pdf mytext.pdf 2021-04-29 16:05:25.501 INFO 20077 --- [ main] o.a.tutorial.restapi.RestApiApplication : Started RestApiApplication in 3.324 seconds (JVM running for 3.867) 2021-04-29 16:05:25.504 INFO 20077 --- [ main] o.a.tutorial.restapi.RestApiApplication : args[0]: get-rendition-content 2021-04-29 16:05:25.506 INFO 20077 --- [ main] o.a.tutorial.restapi.RestApiApplication : args[1]: 0492460b-6269-4ca1-9668-0d934d2f3370 2021-04-29 16:05:25.506 INFO 20077 --- [ main] o.a.tutorial.restapi.RestApiApplication : args[2]: pdf 2021-04-29 16:05:25.506 INFO 20077 --- [ main] o.a.tutorial.restapi.RestApiApplication : args[3]: mytext.pdf 2021-04-29 16:05:25.657 INFO 20077 --- [ main] o.a.t.restapi.GetRenditionContentCmd : Got rendition pdf size: 8472