如何通过 Google 脚本获取 Google Docs 中文档页数?

6
我该怎样通过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; 

}

你说的“它不工作”是什么意思?它返回错误、错误的值还是根本没有任何反应? - Bloodied
哦,对不起,我的意思是它返回0而不是页面数。 - Kyryl Nevedrov
2个回答

6

您的正则表达式期望在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; 
}

1
为什么需要将此转换为PDF格式?@user3717023 - Chetan Sachdev

-1
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; 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接