Crie um arquivo png a partir de um desenho do Google usando o App Script

Aug 19 2020

Eu tenho uma pasta cheia de Desenhos Google. Eu tenho os nomes dos arquivos do Desenhos Google em uma planilha do Google. Posso extrair os nomes dos arquivos da planilha do Google, percorrer os nomes dos arquivos, encontrar todos os desenhos do Google e ... é aqui que fico preso. Eu gostaria de converter os desenhos em arquivos PNG e armazenar os arquivos PNG em uma pasta de unidade separada.

Este é o roteiro que tenho até agora ...

function load_list_of_images() {
  var course_workbook_name = "SPREADSHEET"; // Title of spreadsheet to download files
  var course_workbooks = DriveApp.getFilesByName(course_workbook_name); // There may be more than one!
  try{
    var course_workbook_id = course_workbooks.next();
    Logger.log("Spreadsheet ID : " + course_workbook_id);    
  } catch(error) {
    Logger.log("Spreadsheet doesn't exist");
    return(null);
  }
  var course_workbook = SpreadsheetApp.open(course_workbook_id);
  var image_list_sheet = course_workbook.getSheetByName("image_list");
  // Get list of image names (without extensions)
  var list_of_images = [];
  var images = image_list_sheet.getRange(1,1,1000).getValues();
  for (var row in images) {
    for (var col in images[row]) {
      if (images[row][col] == "") {
        return(list_of_images);
      }
      list_of_images.push(images[row][col]);
    }
  }
}

function download_images() {
  var list = load_list_of_images();
  if (list == null){
    return(null);
  }
  for (var row in list){
    var image_name = list[row];
    var image_exists = DriveApp.getFilesByName(image_name);
    // There may be more than one
    if (image_exists.hasNext()) {
      var image = image_exists.next()
      var gDraw_file = DriveApp.getFileById(image.getId());
      DriveApp.createFile(gDraw_file.getBlob());
    }
  }
}

Quando eu executo isso, todos os desenhos do Google são convertidos em arquivos PDF e armazenados na pasta da minha unidade.

Respostas

1 ziganotschka Aug 19 2020 at 15:02

Você precisa especificar para qual mimeType deseja converter o desenho

No entanto, a conversão de drawingspara pngnão é possível diretamente, você precisa realizar as seguintes etapas:

  • Crie um link de exportação para exportar o arquivo como image/png
  • Busque este link com o UrlFetchApp
  • Crie um arquivo a partir do blob do resultado

Amostra

  var id = image.getId(); 
  var exportUrl = "https://www.googleapis.com/drive/v3/files/" + id + "/export?mimeType=image/png";
  var urlFetchOptions = {
    headers: {Authorization : "Bearer " + ScriptApp.getOAuthToken()}
  };
  var blob= UrlFetchApp.fetch(exportUrl, urlFetchOptions).getBlob();
  DriveApp.createFile(blob);