【问题标题】:How to get the number of pages in Google Docs via Google script?如何通过谷歌脚本获取谷歌文档的页数?
【发布时间】:2016-04-05 16:51:16
【问题描述】:

我应该怎么做才能通过 Google 脚本获取 Google Docs 中的页面数量(转换为 PDF 时)?

我试过了,但它返回 0 而不是页数。

function getNumPages() 
{
  var blob = DocumentApp.getActiveDocument().getAs("application/pdf");
   var data = blob.getDataAsString();
   var re = /Pages\/Count (\d+)/g;
   var match;
   var pages = 0;

   while(match = re.exec(data)) {
      Logger.log("MATCH = " + match[1]);

      var value = parseInt(match[1]);

      if (value > pages) {
         pages = value;
      }
   }

   Logger.log("pages = " + pages);

   return pages; 

}

【问题讨论】:

  • “它不起作用”是什么意思?它是返回错误、错误值还是什么都不返回?
  • 抱歉,我的意思是它返回 0 而不是页数。

标签: google-apps-script google-docs


【解决方案1】:

您的正则表达式在 PDF 文件中需要一个类似 Pages/Count 3 的字符串。使用Logger.log(data) 记录文件的内容表明没有这样的字符串。相反,我找到了文件开头附近的页数:

<< /Linearized 1 /L 18937 /H [ 687 137 ] /O 10 /E 17395 /N 3 /T 18641 >>

/N 后面的数字是页数。这是一个提取它的函数:

function getNumPages() {
  var blob = DocumentApp.getActiveDocument().getAs("application/pdf");
  var data = blob.getDataAsString();
  var pages = parseInt(data.match(/ \/N (\d+) /)[1], 10);
  Logger.log("pages = " + pages);
  return pages; 
}

【讨论】:

  • 为什么要转换成PDF? @user3717023
【解决方案2】:
function getNumPages(docId) {
    var pages = 0;
    var blob = DocumentApp.openById(docId).getAs("application/pdf");
    var data = blob.getDataAsString();
    try {
        var matched = data.match(/\/Type[\s]*\/Page[^s]/g);
        pages = matched.length; 
    } catch(err) {
        // NOOP
    }
    return pages; 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多