Googlescript читать PDF как текст - PullRequest
0 голосов
/ 08 февраля 2020

моя проблема в том, что я не могу прочитать PDF-файл из электронной почты (в моем Gmail) как текст. Код ошибки: преобразование из application / octet-stream в application / pdf не поддерживается.
Если я добавлю attachment.setContentType ("appl‌ication / pdf"); перед 'blob' ошибка заключается в том, что преобразование из приложения / pdf do application / pdf не поддерживается. Drive API включен. Пожалуйста помоги.

function search(){
    var labels = GmailApp.getUserLabels();

  for(var l = 0; l < labels.length; l++){
    var label = labels[l].getName();  
    var threads = GmailApp.getUserLabelByName(label).getThreads();

    for (var t = 0; t < threads.length; t++) { 
      var msgs = GmailApp.getMessagesForThreads(threads);

      for (var i = 0 ; i < msgs.length; i++) {
        for (var j = 0; j < msgs[i].length; j++) {
          var message = msgs[i][j];
          var id = message.getId();
          var attachments = message.getAttachments();

          for (var k = 0; k < attachments.length; k++) {         
            var attachment = attachments[k];
            var content = attachment.getContentType();

            if (label == 'LABEL'){
              Logger.log('content = ' + content + ' - name: ' + attachment.getName());
              //content = application/octet-stream - name: FILE.pdf
              attachment.setContentType("appl‌ication/pdf"); <-- HERE IS AN ERROR

              var blob = attachment.getAs(MimeType.PDF);
              var filetext = pdfToText(blob);
              filetext = filetext.substr(filetext.search("SEARCH-TEXT:"));

              var type = filetext.split(' ');
              type = type[3];

              var symbol = type.split('/'); 
              symbol = symbol[3];

              var date = filetext.substr(filetext.search("SEARCH-DATE:"));         
              date = date.split(' ');
              date = date[2];

              var value = filetext.substr(filetext.search("SEARCH-VALUE: "));         
              value = value.split(' ');
              value = value[4];

              if (symbol == 'RL' || symbol == 'UB'){
                var record = 
                    {
                      symbol : symbol,
                      value : value,
                      date : date,
                      label : label,
                      id : id
                    };

                ANOTHER-FUNCTION(record);                
              }

function pdfToText (blob, options) {

  options = options || {};
  var parents = [];
  if (options.path) {
    parents.push(getDriveFolderFromPath(options.path));
  }
  var pdfName = blob.getName();
  var resource = {
    title: pdfName,
    mimeType: blob.getContentType(),
    parents: parents
  };

  // Save PDF as GDOC
  resource.title = pdfName.replace(/pdf$/, 'gdoc');
  var insertOpts = {
    ocr: true,
    ocrLanguage: options.ocrLanguage || 'pl'
  }
  var gdocFile = Drive.Files.insert(resource, blob, insertOpts);

  // Get text from GDOC  
  var gdocDoc = DocumentApp.openById(gdocFile.id);
  var text = gdocDoc.getBody().getText();

  // Delete document.
  if (!options.keepGdoc) {
    Drive.Files.remove(gdocFile.id);
  }

  return text;
}

function getDriveFolderFromPath (path) {
  return (path || "/").split("/").reduce ( function(prev,current) {
    if (prev && current) {
      var fldrs = prev.getFoldersByName(current);
      return fldrs.hasNext() ? fldrs.next() : null;
    }
    else { 
      return current ? null : prev; 
    }
  },DriveApp.getRootFolder()); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...