计算pdf文件中的总页数

时间:2019-01-03 09:20:37

标签: pdf google-apps-script

每周,我都会收到来自客户的一组pdf文件。

他们会将pdf文件粘贴到特定的Google驱动器文件夹中。我需要pdf文件的总页数。我试图在Apps脚本中创建代码,这将有助于更新pdf文件名和特定Google表格中的页面总数。

我找到了为Google文档herehere创建的代码。

但这不起作用。我正在寻找一个Apps脚本,该脚本可帮助检查特定的驱动器文件夹并更新pdf文件名和特定google工作表中的总页数。

我尝试下面的脚本。

function getNumberofPages() {
  var myFolder = DriveApp.getFoldersByName("Test").next();
  var files = myFolder.searchFiles('title contains ".PDF"');
  while (files.hasNext()) {
    var file = files.next();
    Logger.log(file.getName());
    Logger.log(file.length);
  }
}

但是length选项对pdf文件不起作用。...

谢谢。

2 个答案:

答案 0 :(得分:2)

不幸的是,目前还没有方法可以使用Google API从PDF文件中直接检索全部页面。那么这些解决方法呢?请根据您的情况选择它。

解决方法1:

在此替代方法中,它检索PDF文件中内容流的数量。内容流显示为/Contents的属性。

当这反映到您的脚本时,它如下所示。

修改后的脚本:

function getNumberofPages() {
  var myFolder = DriveApp.getFoldersByName("Test").next();
  var files = myFolder.searchFiles('title contains ".PDF"');
  while (files.hasNext()) {
    var file = files.next();
    var n = file.getBlob().getDataAsString().split("/Contents").length - 1;
    Logger.log("fileName: %s, totalPages: %s", file.getName(), n)
  }
}
  • 尽管此解决方法很简单,但可能无法像@mkl所说的那样用于所有PDF文件。如果此解决方法不能用于您的PDF文件,那么以下解决方法2会如何?

解决方法2:

在此替代方法中,API用于检索PDF文件的总页数。我使用了Split PDF API。从分割的文件数中检索总页数。使用此API时,请检查ConvertAPI并检索您的密钥。

修改后的脚本:

function getNumberofPages() {
  var myFolder = DriveApp.getFoldersByName("Test").next();
  var files = myFolder.searchFiles('title contains ".PDF"');
  while (files.hasNext()) {
    var file = files.next();
    var url = "https://v2.convertapi.com/convert/pdf/to/split?Secret=#####"; // Please set your secret key.
    var options = {
      method: "post",
      payload: {File: DriveApp.getFileById(file.getId()).getBlob()},
    }
    var res = UrlFetchApp.fetch(url, options);
    res = JSON.parse(res.getContentText());
    Logger.log("fileName: %s, totalPages: %s", file.getName(), res.Files.length)
  }
}
  • 我不确定PDF文件的数量和文件大小。因此,我没有为此使用fetchAll method。这是一个示例脚本。因此,请根据您的情况进行修改。

注意:

  • 我可以在我的应用程序中使用这些变通办法。但是我无法确认所有PDF文件。因此,如果这些解决方法不适用于您的PDF文件,很抱歉。

参考:

答案 1 :(得分:-1)

function menuItem() {
var folder = 
DriveApp.getFoldersByName('Test').next();
var contents = folder.searchFiles('title contains ".PDF"');
var file;
var name;
var sheet = SpreadsheetApp.getActiveSheet();
var count;

sheet.clear();
sheet.appendRow(["Name", "Number of pages"]);

while(contents.hasNext()) {
file = contents.next();
name = file.getName();
count = 
file.getBlob().getDataAsString().split("/Contents").length - 1;

data = [name, count]
sheet.appendRow(data);
}
};


function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('PDF Page Calculator')
          .addItem("PDF Page Calculator", 
'menuItem')
.addToUi();
};