#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 образцов могут быть извлечены из обоих скриптов. Поэтому я не смог воспроизвести вашу проблему. Я приношу извинения за неудобства. Кстати, могу я спросить вас о проблеме моего ответа? Если мой ответ не был полезен для вашей ситуации, пожалуйста, скажите мне. Потому что я должен извиниться и изменить его.