首页 > 解决方案 > Google App Script:如何将 PDF 转换为 GDOC 以获得 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()的解决方案,它不再起作用了..

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

谢谢

标签: javascriptgoogle-apps-scriptgoogle-drive-apiocruserscripts

解决方案


  • 您想将 PDF 文件转换为 Google 文档文件。
    • fileofvar 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.

修改后的脚本:

请按如下方式修改您的脚本。在运行脚本之前,请在高级 Google 服务中启用 Drive API。

从:
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. 你能测试一下吗?

修改后的脚本:

请按如下方式修改您的脚本。在运行脚本之前,请在高级 Google 服务中启用 Drive API。

从:
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 类型。请注意这一点。

参考:

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


推荐阅读