angular-ui/ui-grid

Allow formatting of PDF cells through exporterFieldCallback

Open

#5,227 opened on Mar 14, 2016

View on GitHub
 (10 comments) (1 reaction) (0 assignees)JavaScript (2,496 forks)batch import
help wanted

Repository metrics

Stars
 (5,395 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

I needed to be able to customize the PDF export a little bit more, so I started looking through the documentation and code to see how to do that. It seems that if you allowed an object return from exporterFieldCallback it would give the end user a lot of flexibility.

In my local copy, I just added an else if check for object type and return the raw field.value.

Here's the full formatFieldAsPdfString function:

        formatFieldAsPdfString: function (field) {
          var returnVal;
          if (field.value == null) { // we want to catch anything null-ish, hence just == not ===
            returnVal = '';
          } else if (typeof(field.value) === 'number') {
            returnVal = field.value.toString();
          } else if (typeof(field.value) === 'boolean') {
            returnVal = (field.value ? 'TRUE' : 'FALSE') ;
          } else if (typeof(field.value) === 'string') {
              returnVal = field.value.replace(/"/g, '""');
          } else if (typeof (field.value) === 'object') {
              returnVal = field.value;
          } else {
              returnVal = JSON.stringify(field.value).replace(/^"/,'').replace(/"$/,'');
          }

          if (field.alignment && typeof(field.alignment) === 'string' ){
            returnVal = { text: returnVal, alignment: field.alignment };
          }

          return returnVal;
        }

This now allows me to add code like this:

gridOptions.exporterFieldCallback = function (grid, row, col, value) {
if (col.name === 'Status') {
  if (value === 'Active')
     value = { text: value, color: 'green' };
  else
     value = { text: value, color: 'red' };
}
return value;
}

Thank you, Josh

Contributor guide