Cómo crear PDF's con Google Apps Script

Este artículo se ha usado para el proyecto : Organizador de emails

Hay ocasiones en que puede resultar interesante exportar la información de nuestros documentos de Drive en formato pdf para luego poder enviarla a otras personas de una manera más sencilla.

Como siempre os digo, es más fácil generar pdf con Google Apps Script de lo que podría parecer.

Os lo explico con un ejemplo que vale más que mil palabras.

function PDF()
{
    var file = null;
 
    var files = DriveApp.getFilesByName(SpreadsheetApp.getActiveSpreadsheet().getName());
 
    if ( files.hasNext() )
            file = files.next();
 
    var newFile = DriveApp.createFile(file.getAs('application/pdf'));
}

Si ejecutáis este ejemplo en un hoja de cálculo de drive lo que hará será copiar el contenido de la hoja de cálculo en un documento pdf.

Las posibilidades son infinitas.

Recordad que si necesitáis ayuda para eso estamos.

22 comentarios:

  1. Hola... me parece interesante el script...
    solo que, por ejemplo yo tengo una carpeta con muchos PDFs y quiero hacer uno solo de todos ellos... ¿hay forma?

    ResponderEliminar
    Respuestas
    1. ummm.... Interesante pregunta... Supongo que si, pero sinceramente, jamás lo he probado ni se muy bien por donde empezaria. si encuentras la manera compartelo por favor, yo tb estoy interesado
      Nos vemos

      Eliminar
  2. Que pasa con los Documentos q tienen mas de una hoja?? y yo solo quiero el PDF de una sola hoja

    ResponderEliminar
    Respuestas
    1. Perdon por no responder hasta hoy, este comentario se me habia quedado traspapelado. La única manera que se me ocurre es que copies esa hoja en un documento nuevo con solo esa hoja y crees el documento pdf desde ahí.

      Eliminar
  3. como hacer para que el pdf quede con otro nombre? gracias

    ResponderEliminar
    Respuestas
    1. Al final del script pon lo siguiente: newFile.setName("Pon_aqui_el_nombre_que_quieras_ponerle");
      Ya contarás como te ha ido
      Nos vemos

      Eliminar
  4. Hola Pako quisiera saber si hay una posibilidad de exportar el nombre que este asociado a ese documento, para que sea personalizado la exportación.

    Gracias !

    ResponderEliminar
  5. No te acabo de entender.
    Al generar el PDF se genera con el mismo nombre que el original.
    El fichero de origen tiene este nombre: SpreadsheetApp.getActiveSpreadsheet().getName()

    Igual soy yo que no te entiendo, podrias volvermelo a explicar? o era esto?

    ResponderEliminar
  6. Hola Pako, Excelente aportación, quiero darle uso para crear PDF´s foliados a partir de una plantilla, el folio lo tomaría de una celda, todo bien hasta ahí, solo que los PDF´s los guarda en mi unidad de Drive y quisiera guardarlos dentro en una carpeta dentro en una unidad de equipo, te agradecería bastante me pudieras indicar como lograrlo.

    function onOpen()
    {
    var ui = SpreadsheetApp.getUi();
    ui.createMenu('PDF')
    .addItem('Exportar a PDF', 'PDF')
    .addToUi();
    }

    function PDF()
    {
    var file = null;

    var files = DriveApp.getFilesByName(SpreadsheetApp.getActiveSpreadsheet().getName());

    if ( files.hasNext() )
    file = files.next();

    var newFile = DriveApp.createFile(file.getAs('application/pdf'));
    var values = SpreadsheetApp.getActiveSheet().getRange("L2").getValues();
    Logger.log(values["L2"]);

    newFile.setName("Documento N° "+ values);
    }

    ResponderEliminar
    Respuestas
    1. Hola,

      En vez de hacer esto:

      var files = DriveApp.getFilesByName(SpreadsheetApp.getActiveSpreadsheet().getName());

      haria la creación del fichero donde lo quieres, y así te evitas problemas.

      Aquí tienes un ejemplo de como hacerlo:

      http://googleappscriptsweb.blogspot.com.es/2015/10/como-crear-ficheros-y-carpetas-con.html

      Nos vemos!

      Eliminar
  7. Hola buenas noches, he practicado crear PDF´s pero mi duda es si quieres crear unicamente las celdas seleccionadas del Spreadsheet... como se puede lograr esto??

    gracias!!

    ResponderEliminar
  8. Hola buenas noches junto con saludar y agradecer tu pos tengo la mims consulta que usuario anterior ¿como puede hacer para seleccionar un rango de una hoja determina para generar el PDF?

    dese ya muchas gracias

    ResponderEliminar
    Respuestas
    1. Hola, se me pasó el comentario anterior de responder.

      La única manera que le veo para hacerlo es copiar el rango que te interese en otro spreadsheet nuevo y entonces generar el PDF de ese nuevo spreadsheet.

      Espero que os sirva

      Nos vemos

      Eliminar
  9. PAra coger solo un rango de filas y columnas?

    ResponderEliminar
    Respuestas
    1. sheet.getRange(x,y,z,t) y copiar ese rango en otra hoja

      Creo que sería la mejor solucion

      Nos vemos

      Eliminar
  10. Como puedo enviar el PDF por correo electrónico?

    ResponderEliminar
    Respuestas
    1. Hola,
      Para enviar cualquier documento dentro un correo se tiene que enviar en forma de Blob dentro del campo attachments (parametro opcional)
      Si tienes el pdf cargado dentro de la variable pdf ( por ejemplo)
      MailApp.sendEmail('blabla@blibli.com', 'Envio de PDF en un correo', 'PDF incluido', {
      name: 'PDF Sender',
      attachments: [pdf.getAs(MimeType.PDF)]
      });

      Espero q te sirva

      Eliminar
  11. Hola, me gustaría saber cómo puedo hacer para que el pdf que genero se guarde con el nombre del cliente que está en una celda de la misma hoja...Se puede? Soy nueva en todo esto y aún no logro sacarlo. Gracias!!!

    ResponderEliminar
    Respuestas
    1. Hola Claro que se puede, mira yo lo he hecho así:

      var funcionario = sheetActive.getRange("B6").getValue();//Captura del nombre del funcionario de la hoja activa
      var cargo = sheetActive.getRange("D6").getValue();//Captura del cargo del funcionario
      var dateformat = sheetActive.getRange("D7").getValue();
      var process = sheetActive.getRange("B7").getValue();
      var emailAddress = 'correo@correo.com';//Correo electrónico al que enviará el archivo
      var filename = 'Transferencia Documental_'+ funcionario + '_' + fecha + '.pdf'; //Nombre del archivo en Pdf

      Eliminar
  12. Es mas sencillo de lo que parece.

    Tienes que obtener el id del pdf (GetID()) y con ese id a través del DriveApp, abrir el fichero y hacerle un setName.

    ya me explicaras como te ha ido

    ResponderEliminar
  13. Hola Amigo, favor tengo la gran complicación de imprimir PDF desde una plantilla que se rellena con una lista desplegable, podrías ayudarme con mi problema.?
    Gracias.

    ResponderEliminar
    Respuestas
    1. Me encantaria ayudarte pero hasta donde yo se, no se puede imprimir desde un script.

      Se puede crear el PDF, se puede enviar por correo, etc... pero imprimirlo es imposible.

      Sorry

      Eliminar

Related Posts Plugin for WordPress, Blogger...