angular-ui/ui-grid

Allow formatting of PDF cells through exporterFieldCallback

Open

#5.227 aberto em 14 de mar. de 2016

Ver no GitHub
 (10 comments) (1 reaction) (0 assignees)JavaScript (2.496 forks)batch import
help wanted

Métricas do repositório

Stars
 (5.395 stars)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 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

Guia do colaborador