Google 应用程序脚本:如何将 PDF 转换为 DOC 以获得 OCR?
Google App Script : how to convert PDF to GDOC in order to get OCR?
我正在尝试编写代码来搜索带有我已有的序列号的 PDF (gmail),将其保存在云端硬盘中,在其上进行 OCR 并阅读内容。
第一步没问题,第二步用下面代码管理,但是最后两行用DocumentApp打开文档为了getText() ,不工作:
var serial = "123456789";
var ret = DriveApp.searchFiles('fullText contains "' + serial + '"');
if (ret.hasNext()) {
var file = ret.next();
var n_blob = Utilities.newBlob(file.getBlob().getDataAsString(), MimeType.PDF);
n_blob.setName(serial);
var n_file = DriveApp.createFile(n_blob);
var rt = DocumentApp.openById(n_file.getId()); **//not working**
var text = rt.getBody().getText(); **//not working**
}
我尝试了很多不同的方法,包括基于 Drive.Files.insert() 的解决方案,它不再有效了..
我很困在这里,如果有人有任何想法或建议可以帮助我吗?
谢谢
- 您想将 PDF 文件转换为 Google 文档文件。
file
of var file = ret.next();
总是 PDF 文件。
- 您想使用 Google Apps 脚本实现此目的。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 很遗憾,
var n_blob = Utilities.newBlob(file.getBlob().getDataAsString(), MimeType.PDF)
和 var n_file = DriveApp.createFile(n_blob)
无法创建 Google 文档。这样就出现了错误。
模式 1:
在此模式中,Drive.Files.copy
用于将 PDF 转换为 Google 文档。因为在你的问题中,我看到 Drive.Files.insert() which is not working anymore
.
修改后的脚本:
请按如下方式修改您的脚本。在 运行 脚本之前,please enable Drive API at Advanced Google services.
从:
if (ret.hasNext()) {
var file = ret.next();
var n_blob = Utilities.newBlob(file.getBlob().getDataAsString(), MimeType.PDF);
n_blob.setName(serial);
var n_file = DriveApp.createFile(n_blob);
var rt = DocumentApp.openById(n_file.getId()); **//not working**
var text = rt.getBody().getText(); **//not working**
}
到:
if (ret.hasNext()) {
var file = ret.next();
if (file.getMimeType() === MimeType.PDF) {
var fileId = Drive.Files.copy({mimeType: MimeType.GOOGLE_DOCS}, file.getId()).id;
var rt = DocumentApp.openById(fileId);
var text = rt.getBody().getText();
Logger.log(text)
}
}
模式二:
我觉得Drive.Files.insert
也许可以用。所以在这个模式中,我建议修改后的脚本使用 Drive.Files.insert
。你能测试一下吗?
修改后的脚本:
请按如下方式修改您的脚本。在 运行 脚本之前,please enable Drive API at Advanced Google services.
从:
if (ret.hasNext()) {
var file = ret.next();
var n_blob = Utilities.newBlob(file.getBlob().getDataAsString(), MimeType.PDF);
n_blob.setName(serial);
var n_file = DriveApp.createFile(n_blob);
var rt = DocumentApp.openById(n_file.getId()); **//not working**
var text = rt.getBody().getText(); **//not working**
}
到:
if (ret.hasNext()) {
var file = ret.next();
if (file.getMimeType() === MimeType.PDF) {
var fileId = Drive.Files.insert({title: serial, mimeType: MimeType.GOOGLE_DOCS}, file.getBlob()).id;
var rt = DocumentApp.openById(fileId);
var text = rt.getBody().getText();
Logger.log(text)
}
}
注:
- 很遗憾,我无法理解
Drive.Files.insert() which is not working anymore
。因此,如果上述修改后的脚本不起作用,请告诉我。我想想想其他的方法。
- 查看日志时,如果看不到Google个PDF转文档的文字,说明
var file = ret.next();
个文档都不是PDF格式。请注意这一点。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
我正在尝试编写代码来搜索带有我已有的序列号的 PDF (gmail),将其保存在云端硬盘中,在其上进行 OCR 并阅读内容。
第一步没问题,第二步用下面代码管理,但是最后两行用DocumentApp打开文档为了getText() ,不工作:
var serial = "123456789";
var ret = DriveApp.searchFiles('fullText contains "' + serial + '"');
if (ret.hasNext()) {
var file = ret.next();
var n_blob = Utilities.newBlob(file.getBlob().getDataAsString(), MimeType.PDF);
n_blob.setName(serial);
var n_file = DriveApp.createFile(n_blob);
var rt = DocumentApp.openById(n_file.getId()); **//not working**
var text = rt.getBody().getText(); **//not working**
}
我尝试了很多不同的方法,包括基于 Drive.Files.insert() 的解决方案,它不再有效了..
我很困在这里,如果有人有任何想法或建议可以帮助我吗?
谢谢
- 您想将 PDF 文件转换为 Google 文档文件。
file
ofvar file = ret.next();
总是 PDF 文件。
- 您想使用 Google Apps 脚本实现此目的。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 很遗憾,
var n_blob = Utilities.newBlob(file.getBlob().getDataAsString(), MimeType.PDF)
和var n_file = DriveApp.createFile(n_blob)
无法创建 Google 文档。这样就出现了错误。
模式 1:
在此模式中,Drive.Files.copy
用于将 PDF 转换为 Google 文档。因为在你的问题中,我看到 Drive.Files.insert() which is not working anymore
.
修改后的脚本:
请按如下方式修改您的脚本。在 运行 脚本之前,please enable Drive API at Advanced Google services.
从:if (ret.hasNext()) {
var file = ret.next();
var n_blob = Utilities.newBlob(file.getBlob().getDataAsString(), MimeType.PDF);
n_blob.setName(serial);
var n_file = DriveApp.createFile(n_blob);
var rt = DocumentApp.openById(n_file.getId()); **//not working**
var text = rt.getBody().getText(); **//not working**
}
到:
if (ret.hasNext()) {
var file = ret.next();
if (file.getMimeType() === MimeType.PDF) {
var fileId = Drive.Files.copy({mimeType: MimeType.GOOGLE_DOCS}, file.getId()).id;
var rt = DocumentApp.openById(fileId);
var text = rt.getBody().getText();
Logger.log(text)
}
}
模式二:
我觉得Drive.Files.insert
也许可以用。所以在这个模式中,我建议修改后的脚本使用 Drive.Files.insert
。你能测试一下吗?
修改后的脚本:
请按如下方式修改您的脚本。在 运行 脚本之前,please enable Drive API at Advanced Google services.
从:if (ret.hasNext()) {
var file = ret.next();
var n_blob = Utilities.newBlob(file.getBlob().getDataAsString(), MimeType.PDF);
n_blob.setName(serial);
var n_file = DriveApp.createFile(n_blob);
var rt = DocumentApp.openById(n_file.getId()); **//not working**
var text = rt.getBody().getText(); **//not working**
}
到:
if (ret.hasNext()) {
var file = ret.next();
if (file.getMimeType() === MimeType.PDF) {
var fileId = Drive.Files.insert({title: serial, mimeType: MimeType.GOOGLE_DOCS}, file.getBlob()).id;
var rt = DocumentApp.openById(fileId);
var text = rt.getBody().getText();
Logger.log(text)
}
}
注:
- 很遗憾,我无法理解
Drive.Files.insert() which is not working anymore
。因此,如果上述修改后的脚本不起作用,请告诉我。我想想想其他的方法。 - 查看日志时,如果看不到Google个PDF转文档的文字,说明
var file = ret.next();
个文档都不是PDF格式。请注意这一点。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。