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