Как получить производителя PDF в Google App script

#javascript #google-apps-script #gmail-addons #pdfjs

#javascript #google-apps-script #gmail-дополнения #pdf.js

Вопрос:

Я пытаюсь написать надстройку gmail, в которой я перебираю все электронные письма и создаю отчет на основе их производителей. Перебор электронных писем — самая простая часть, и я это сделал, однако я не могу найти способ получить строку производителя каждого PDF-файла. До сих пор я пытался

  • анализ большого двоичного объекта, однако это что-то вроде написания библиотеки PDF для анализа всего синтаксиса. тег производителя явно не присутствует
  • добавление pdf.js , который является сторонним инструментом с открытым исходным кодом для извлечения такой информации. Однако я не смог добавить его из-за проблемы с поддержкой ES3 — ES6.

Каков наилучший способ получить строку производителя PDF-файла в Google App script?

Спасибо

Комментарии:

1. Если это возможно, можете ли вы предоставить образцы PDF-файлов, которые вы хотите использовать?

2. Спасибо за предоставленный образец. Могу я спросить вас о значении, которое вы хотите получить из образца PDF-файла?

3. @Tanaike Я дал ссылку на документ, который не содержит ни одной строки производителя 🙂 Это хороший вариант: 1drv.ms/b/s !AhueqKzeEHo9ZoKn7urs-BzMciU Я ожидаю получить «Adobe PDF library 15.00»

4. Спасибо за обновление. Из вашего обновленного PDF-файла я мог бы извлечь Adobe PDF library 15.00 . Чтобы избавить вас от беспокойства, можете ли вы предоставить несколько примеров, включая формат метаданных с различными шаблонами?

5. Рискуя сбоем пользовательского интерфейса, вы можете выполнять все действия на стороне клиента ES6 в браузере в боковых / модальных диалогах из дополнения, где вы можете использовать pdf.js .

Ответ №1:

  • Вы хотите получить значение Producer из файла PDF.

Я мог понять, как указано выше. Если я правильно понимаю, как насчет этого примера сценария? В этом примере скрипта из ваших общих файлов PDF значение Producer извлекается с помощью 2 регулярных выражений из содержимого файла. Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Пример сценария:

При использовании этого скрипта, пожалуйста, установите идентификатор папки, в которую помещаются файлы PDF. Этот скрипт извлекает значение из всех файлов PDF в папке.

 var folderId = "### folderId ###";
var files = DriveApp.getFolderById(folderId).getFilesByType(MimeType.PDF);
var regex = [/Producer((w. ))/i, /<pdf:Producer>(w. )</pdf:Producer>/i];
var result = [];
while (files.hasNext()) {
  var file = files.next();
  var content = file.getBlob().getDataAsString();
  var r = regex.reduce(function(s, e) {
    var m = content.match(e);
    if (Array.isArray(m)) s = m[1];
    return s;
  }, "");
  result.push({
    fileName: file.getName(),
    fileId: file.getId(),
    vaueOfProducer: r,
  });
}
Logger.log(result); // Result
 

Результат:

Этот примерный результат был получен из папки (мой Google Диск), в которую были помещены общие 3 PDF-файла.

 [
  {
    "fileName": "2348706469653861032.pdf",
    "fileId": "###",
    "vaueOfProducer": "iText� 7.1.5 �2000-2019 iText Group NV (iText; licensed version)"
  },
  {
    "fileName": "Getting started with OneDrive.pdf",
    "fileId": "###",
    "vaueOfProducer": "Adobe PDF library 15.00"
  },
  {
    "fileName": "DITO-Salesflow-040419-1359-46.pdf",
    "fileId": "###",
    "vaueOfProducer": "iText 2.1.7 by 1T3XT"
  }
]
 

Примечание:

  • О файле of 2348706469653861032.pdf символы, которые не могут быть отображены, включаются в значение Producer .
  • Это пример сценария. Поэтому, пожалуйста, измените это для вашей ситуации.

Комментарии:

1. Привет, @Tanaike. Большое вам спасибо. Я адаптировал ваш код к своему, который просто перебирает все электронные письма с вложением PDF пользователя. Затем добавляет вложение в диск и открывает его оттуда. Я получаю пустую строку производителя для всех PDF-файлов. Я уверен, что допустил ошибку в своем коде. Вы можете мне помочь? textuploader.com/1da6i или просто без Привода: textuploader.com/1da68

2. @Dundar Спасибо за ответ. Что касается вашего нового вопроса, когда я запускаю оба ваших скрипта, я могу подтвердить, что значения Producer из ваших 3 образцов могут быть извлечены из обоих скриптов. Поэтому я не смог воспроизвести вашу проблему. Я приношу извинения за неудобства. Кстати, могу я спросить вас о проблеме моего ответа? Если мой ответ не был полезен для вашей ситуации, пожалуйста, скажите мне. Потому что я должен извиниться и изменить его.