【问题标题】:Google App Script : how to convert PDF to GDOC in order to get OCR?Google App Script:如何将 PDF 转换为 DOC 以获得 PCR?
【发布时间】:2019-12-20 13:43:43
【问题描述】:

我正在尝试编写一些代码,以搜索带有我已有序列号的 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() 的解决方案,它不再起作用了..

我很困在这里,如果有人有任何想法或建议可以帮助我吗?

谢谢

【问题讨论】:

标签: javascript google-apps-script google-drive-api ocr userscripts


【解决方案1】:
  • 您想将 PDF 文件转换为 Google 文档文件。
    • filevar file = ret.next(); 始终是 PDF 文件。
  • 您希望使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

修改点:

  • 很遗憾,var n_blob = Utilities.newBlob(file.getBlob().getDataAsString(), MimeType.PDF)var n_file = DriveApp.createFile(n_blob) 无法创建 Google 文档。这样,就会发生错误。

模式一:

在此模式中,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)
  }
}

模式 2:

我认为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。因此,如果上述修改后的脚本不起作用,请告诉我。我想考虑其他方法。
  • 当您查看日志时,如果您看不到由PDF转换的Google Document的文本,则表示var file = ret.next();的所有文件都不是PDF类型的。请注意这一点。

参考资料:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

【讨论】:

  • 感谢您花时间解释一切!您的两种模式都有效,我将使用与我的情况更相关的第二种模式。
  • @Waxim Corp 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
  • 但是我们如何指定OCR语言var resource = { title: blob.getName(), mimeType: blob.getContentType() }; var myfile = Drive.Files.insert(resource, blob, {ocr: true, ocrLanguage: OCRlang});
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多