Como crear un PDF de una selección de datos con Google Apps Script

Hace ya tiempo expliqué como generar PDFs con Google Apps Script pero era una forma muy simple de hacerlo. Para ser claros, se quedaba corto en muchos aspectos. Por suerte lo que os expliqué no es la única forma de generar PDFs con Google Scripts.

Existe un servicio dentro de Google que permite exportar el rango que quieras en formato PDF, pudiéndolo formatear como quieras. Es un poco más complejo que lo último que os expliqué pero su potencial es inacabable. Con un ejemplo lo veréis claro.

En este caso, deberíais seleccionar un rango de un spreadsheet y llamar a este script. Lo podéis modificar fácilmente para conseguir lo que queráis.

function ExportPDF() 
{
     var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
     var sheet           = spreadsheet.getActiveSheet();
     var range          = sheet.getActiveRange();

  var exportUrl = 'https://docs.google.com/spreadsheets/d/' + spreadsheet.getId()
      + '/export?exportFormat=pdf&format=pdf'
      + '&size=FOLIO'                  //Tamaño del papel: 0-LETTER,1-TABLOID,2-LEGAL,3-STATEMENT,4-EXECUTIVE,5-FOLIO,6-A3,7-A4,8-A5,9-B4,10-B5
      + '&portrait=false'              //Orientación: False - Horizontal / True - Vertical
      + '&fitw=true'                   //Forzamos que quepa correctamente en el ancho de la hoja
      + '&top_margin=1.75'             //Margen Superior          
      + '&bottom_margin=1.75'          //Margen inferior         
      + '&left_margin=1.5'             //Margen Izquierdo          
      + '&right_margin=1.5'            //Margen Derecho        
      + '&sheetnames=false'            //Marcamos si se ha de poner el nombre de las hojas o no
      + '&printtitle=false'            //Marcamos si se ha imprimir el titulo del documento o no
      + '&pagenum=false'               //Indicamos si se de pintar el número de página
      + '&gridlines=true'              //Marcamos si queremos que se vean las lineas de las celdas o no   
      + '&fzr=FALSE'                   //Frozen: marcamos si las cabeceras se han de ir imprimiendo o no en las consecutivas hojas
      + '&gid=' + sheet.getSheetId()   //Identificador del tab
      + '&r1=' + (range.getRow() - 1)  //Margenes del rango seleccionado
      + '&r2=' + range.getLastRow()
      + '&c1=' + (range.getColumn() - 1)
      + '&c2=' + range.getLastColumn();
       
  //Hacemos la petición para pedir el PDF
  var response = UrlFetchApp.fetch(exportUrl, {  muteHttpExceptions: true, headers: { Authorization: 'Bearer ' +  ScriptApp.getOAuthToken()  } } );
  
  //Creamos el PDF con el binario que nos devuelve la petición anterior
  var blob = response.getBlob();
  blob = blob.setName(spreadsheet.getName());
  var pdfFile = DriveApp.createFile(blob);
  SpreadsheetApp.getUi().alert(pdfFile.getUrl());
}


Una vez tenéis hecho el PDF podéis enviarlo por correo , guardarlo en una carpeta de Drive o dejarlo disponible para que alguien se lo baje de una web, las posibilidades son infinitas.

Espero que os haya servido

No vaciléis en hacerme llegar vuestras dudas

Nos vemos

NOTA: Tal vez también te interesa convertir GDocs a PDF

4 comentarios:

  1. Hola Amigo!

    He intentado ponerlo en practica, pero siempre me arroja el siguiente error:

    https://drive.google.com/file/d/15hDKZ3mkEGvwttIGsf9TpMaeL9T7bS_e/view?usp=drivesdk

    Me podeis orientar?

    Mil gracias

    ResponderEliminar
    Respuestas
    1. Te he pedido acceso al documento. Así sin más no soy capaz de ver lo que te pasa.

      Dame acceso y te lo miro


      Nos vemos

      Eliminar
    2. Ya te lo he compartido!

      Muchas gracias

      Eliminar
  2. Que problema te da? Acabo de probarlo y me va perfecto : https://drive.google.com/file/d/1RyzMQw7Fy3_QxLg7kxyT_bSYY78YrJq1/view

    Tenias un rango seleccionado en el momento de ejecutar el script?

    Nos vemos

    ResponderEliminar

Tal vez te interese

Entradas populares