如何在 google 应用程序脚本中获取 PDF 的制作者
How to get producer of a PDF in google app script
我正在尝试编写一个 gmail 附加组件,我在其中遍历所有电子邮件并根据其制作者创建报告。迭代电子邮件是最简单的部分,我已经做到了,但是我找不到任何方法来获取每个 PDF 的生产者行。
到目前为止我试过了
- 分析 blob,但这有点像编写 PDF 库来解析所有语法。生产者标签不明确
- 添加pdf.js,这是提取此类信息的第三方开源工具。但是,由于 ES3 - ES6 支持问题,我无法添加它。
在 google 应用程序脚本中获取 PDF 制作行的最佳方法是什么?
谢谢
- 您想从 PDF 文件中检索 Producer 的值。
我能像上面那样理解。如果我的理解是正确的,这个示例脚本怎么样?在此示例脚本中,从您共享的 PDF 文件中,Producer 的值通过 2 个正则表达式从文件内容中检索。请将此视为几个答案之一。
示例脚本:
当您使用这个脚本时,请设置放置PDF文件的文件夹的文件夹ID。此脚本从文件夹中的所有 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
结果:
此示例结果是从放置共享的 3 个 PDF 文件的文件夹(我的 Google 驱动器)中检索到的。
[
{
"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"
}
]
注:
- 关于
2348706469653861032.pdf
的文件,无法显示的字符包含在Producer的值中。
- 这是一个示例脚本。所以请根据您的情况进行修改。
我正在尝试编写一个 gmail 附加组件,我在其中遍历所有电子邮件并根据其制作者创建报告。迭代电子邮件是最简单的部分,我已经做到了,但是我找不到任何方法来获取每个 PDF 的生产者行。 到目前为止我试过了
- 分析 blob,但这有点像编写 PDF 库来解析所有语法。生产者标签不明确
- 添加pdf.js,这是提取此类信息的第三方开源工具。但是,由于 ES3 - ES6 支持问题,我无法添加它。
在 google 应用程序脚本中获取 PDF 制作行的最佳方法是什么?
谢谢
- 您想从 PDF 文件中检索 Producer 的值。
我能像上面那样理解。如果我的理解是正确的,这个示例脚本怎么样?在此示例脚本中,从您共享的 PDF 文件中,Producer 的值通过 2 个正则表达式从文件内容中检索。请将此视为几个答案之一。
示例脚本:
当您使用这个脚本时,请设置放置PDF文件的文件夹的文件夹ID。此脚本从文件夹中的所有 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
结果:
此示例结果是从放置共享的 3 个 PDF 文件的文件夹(我的 Google 驱动器)中检索到的。
[
{
"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"
}
]
注:
- 关于
2348706469653861032.pdf
的文件,无法显示的字符包含在Producer的值中。 - 这是一个示例脚本。所以请根据您的情况进行修改。