Getting Started

Using Renditions

Updated: October 10, 2017 Page Information Edit on GitHub

Learn how to convert an office file and an image to other formats and sizes.

Converting an Office File into a PDF File

Goal

Convert a file from an office format into PDF format.

Prerequisites

Procedure

  1. Create a file called downloadPDFRendition.js with the following content. Be sure to replace the filePath variable with the path to the folder where the PDF rendition should be downloaded.

    #!/usr/bin/env node
    // fs and path NodeJS modules are required to handle file download
    let fs = require('fs');
    let path = require('path');
    let Nuxeo = require('nuxeo');
    let nuxeo = new Nuxeo({
        auth: {
            method: 'basic',
            username: 'sconnor',
            password: 'sconnor'
        }
    });
    // Change this value to indicate in which folder the PDF rendition file should be downloaded
    // Don't forget the trailing slash
    let filePath = '/tmp/';
    // Which contract to fetch a rendition for - No need to change if you followed our instructions so far
    let contractToFetch = '/default-domain/workspaces/North America/awesome-tech/awesome-contract';
    // Further calls will return all document properties
    nuxeo.schemas('*');
    // First we'll display the renditions list
    // to give you an idea of what you could fetch out of the box
    nuxeo.repository().fetch(contractToFetch)
        .then(contract => {
            return contract.fetchRenditions();
        })
        .then(renditions => {
            console.log('\nThe following renditions can be called on the contract:\n');
            console.log(renditions);
            console.log('\nWe\'ll ask for a PDF rendition.\n');
        })
        .catch(error => {
            console.log('Apologies, an error occurred while fetching the renditions list.');
            console.log(error);
            return;
        });
    nuxeo.repository().fetch(contractToFetch)
        .then(contract => {
            return contract.fetchRendition('pdf');
        })
        .then(response => {
            // Download the rendition and store it on the disk
            try {
                let stats = fs.statSync(filePath);
                if (!stats.isDirectory()) {
                    console.log(filePath + ' is not a folder.\nPlease check the filePath variable (currently set to: ' + filePath + ')\nand make sure you have the proper rights on that folder.');
                    return;
                }
                const writable = fs.createWriteStream(path.join(filePath, 'contract.pdf'));
                response.body.pipe(writable);
                console.log('The PDF rendition has been downloaded.');
                console.log(`You can take a look at it here: ${path.join(filePath, 'contract.pdf')}`)
            } catch (error) {
                console.log(`The folder where the rendition should be downloaded cannot be accessed.\nPlease check the filePath variable (currently set to: ${filePath})\nand make sure you have write access on that folder.`);
                console.log(error);
                return;
            }
            return nuxeo.repository().fetch(contractToFetch);
        })
        .then(contract => {
            console.log(`Notice that the contract's file remains in its initial format:`);
            console.log(contract.properties['file:content']);
        })
        .catch(error => {
            console.log('Apologies, an error occurred while retrieving the contract.');
            console.log(error);
            return;
        });
    
  2. Save and run:

    $ node downloadPDFRendition.js
    

Note: The contract's file stored on the Nuxeo server remains in its initial format. The rendition is applied on the fly so that only the downloaded file is converted.

Learn more

 

Fetching Resized Pictures

Goal

The marketing department wants to use the companies' logos stored in the portfolios for testimonials. They need all these images to have the same dimensions. Use a rendition to cover this need.

Prerequisites

Procedure

  1. Create a file called downloadResizedLogo.js with the following content. Be sure to replace the filePath variable with the path to the folder where the resized logo should be downloaded.

    #!/usr/bin/env node
    // fs and path NodeJS modules are required to handle file download
    let fs = require('fs');
    let path = require('path');
    let Nuxeo = require('nuxeo');
    let nuxeo = new Nuxeo({
        auth: {
            method: 'basic',
            username: 'sconnor',
            password: 'sconnor'
        }
    });
    // Change this value to indicate in which folder the image rendition file should be downloaded
    // Don't forget the trailing slash
    let filePath = '/tmp/';
    // Which portfolio to fetch a rendition for - No need to change if you followed our instructions so far
    let portfolioToFetch = '/default-domain/workspaces/North America/Money Bank';
    // Size of the company logo rendition you want to obtain
    // You can change "Medium" to "Thumbnail", "Small" or "OriginalJpeg" to see the difference for yourself
    let renditionSize = 'Medium';
    // Init some variables that will be used for the file name
    let companyName;
    let fileFormat;
    // Further calls will return all document properties
    nuxeo.schemas('*');
    nuxeo.repository().fetch(portfolioToFetch)
        .then(portfolio => {
            // Store the company name to use it in the file name later
            companyName = portfolio.properties['dc:title'];
            // Display the different image sizes
            console.log('\nThe following image sizes can be downloaded:\n');
            portfolio.properties['picture:views'].forEach(currentPictureView => {
                console.log(currentPictureView.title);
                console.log(currentPictureView.info);
                // Store the rendition format to generate the filename later
                if (currentPictureView.title === renditionSize) {
                    fileFormat = currentPictureView.info.format.toLowerCase();
                }
            });
            console.log('\nWe\'ll ask for a ' + renditionSize + '-sized company logo in the ' + fileFormat + ' format.');
            return portfolio.fetchRendition(renditionSize);
        })
        .then(response => {
            // Download the rendition and store it on the disk
            try {
                var stats = fs.statSync(filePath);
                if (!stats.isDirectory()) {
                    console.log(`${filePath} is not a folder.\nPlease check the filePath variable (currently set to: ${filePath})\nand make sure you have the proper rights on that folder.`);
                    return;
                }
                let renditionFilePath = path.join(filePath, `${companyName}-${renditionSize}.${fileFormat}`);
                const writable = fs.createWriteStream(renditionFilePath);
                response.body.pipe(writable);
                console.log(`The ${renditionSize} sized company logo has been downloaded!`);
                console.log(`You can take a look at it here: ${renditionFilePath}`)
            } catch (error) {
                console.log('The folder where the rendition should be downloaded cannot be accessed.\nPlease check the filePath variable (currently set to: ' + filePath + ')\nand make sure you have write access on that folder.');
                console.log(error);
                return;
            }
        })
        .catch(error => {
            console.log('Apologies, an error occurred while fetching the rendition.');
            console.log(error);
            return;
        });
    
  2. Save and run:

    $ node downloadResizedLogo.js
    

Note: The same principles can be applied on videos as well, to fetch them in various formats and quality options. Pictures and video renditions are stored in the document directly in order to boost performances.

13 days ago manonlumeau NXDOC-1326: finish tutorials section
a year ago Solen Guitter 25
a year ago Solen Guitter 24
a year ago Arnaud Kervern 23
a year ago Solen Guitter 22
a year ago Solen Guitter 21
a year ago Solen Guitter 20
a year ago Solen Guitter 19
a year ago Bertrand Chauvin 18
a year ago Bertrand Chauvin 17 | fix excerpt
a year ago Bertrand Chauvin 16 | Reverted from v. 14
a year ago Bertrand Chauvin 15 | fix code
a year ago Bertrand Chauvin 14 | fix rendition doc name
a year ago Arnaud Kervern 13
a year ago Solen Guitter 12
a year ago Solen Guitter 11
a year ago Solen Guitter 10
a year ago Bertrand Chauvin 9
a year ago Bertrand Chauvin 8
a year ago Bertrand Chauvin 6
a year ago Bertrand Chauvin 7
a year ago Bertrand Chauvin 5
a year ago Bertrand Chauvin 4
a year ago Bertrand Chauvin 3
a year ago Bertrand Chauvin 2
a year ago Bertrand Chauvin 1
History: Created by Bertrand Chauvin