domingo, 24 de junio de 2018

Como meter una imagen (una firma) desde un formulario a un documento

Con esta función, un formulario y una plantilla podemos hacer que los usuarios suban su firma (imagen) y se inserte en el lugar de un documento que decidamos. El código lo he metido en la hoja de cálculo unida al formulario y he activado el evento "al enviar el formulario"

(Hay unas cuantas partes interesantes en sí mismas:

  • Como conseguir datos del formulario
  • Como conseguir el ID de un archivo desde su URL
  • Como hacer público un archivo
  • Como crear una copia de una plantilla y meterla en una carpeta concreta )


function insertar_imagen(e) {
// Pillamos la imagen subida desde el formulario (Conseguimos por defecto la URL de dicha imagen)
var imagen= e.values[2]
// Utilizamos esta fórmula para extrar de la URL el ID
var id = imagen.match(/[-\w]{25,}/)
// Con el ID abrimos el archivo de imagen subido
var irudia = DriveApp.getFileById(id)
// Le damos permiso para que sea accesible por cualquiera (Parece que sino no funciona el código)
irudia.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW)

// Conseguimos un ID de una carpeta para meter el nuevo documento
   var folderID='1ROGPRhAgtozzpcQr0jM_ekwBiuFsaw5E' //Este ID debería ir fuera del código
   var folder = DriveApp.getFolderById(folderID)
  // Creamos una copia de la plantilla y abrimos el documento
  var nuevoID= DriveApp.getFileById('1hIjlBCktJdIy8GuDB72XPW-H3_Uw_WhygnbyYLq0sbA').makeCopy('Firmado',folder).getId()
  var doc = DocumentApp.openById(nuevoID)


  // Conseguimos todas las partes del documento, mayormente los párrafos
  var todos = doc.getBody().getNumChildren()
  // Creamos una variable que apunte al cuerpo del documento, no a todo el en su conjunto
  var body = doc.getBody()
// Creamos un array para ir metiendo el texto de cada párrafo, con intención de buscar la marca que hemos elegido ### y sustituirla por la firma
  var el=[]

  // Recorremos todos los elementos del documento
 for (var j=0; j<todos; j++){
 // Metemos por cada vuelta el elemento en una variable
 var elemento = doc.getChild(j)
 // Apuntamos que tipo de documento es en otra variable
 var tipo = elemento.getType()
//Utilizamos condicional para solamente quedarnos con los párrafos
 if (tipo=='PARAGRAPH'){
 // Si es párrafo, conseguimos el texto interno
 el[j]= elemento.getText()
// Buscamos en el texto la marca mediante un condicional
   if (el[j]=='###'){
// Borramos dicho texto cuando lo encontramos
   elemento.removeFromParent()
 // Y lo sustituimos por la imagen de la firma
      body.insertImage(j, irudia)
   }
 }
 }
}

No hay comentarios:

Publicar un comentario

Crear PDF horizontal

El código que vamos a mostrar aquí no ha sido creado por nosotros, sino que lo hemos encontrado en Internet. Objetivo: Publicar una pesta...