计算pdf文件的总页数

问题描述 投票:0回答:2

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

他们会将 pdf 文件粘贴到特定的谷歌驱动器文件夹中。我需要 pdf 文件的总页数。我试图在 Apps 脚本中创建一个代码,这将有助于更新 pdf 文件名和特定 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);
  }
}

但是 pdf 文件的长度选项不起作用......

提前致谢。

pdf google-apps-script
2个回答
4
投票

不幸的是,目前还没有使用 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 方法。这是一个示例脚本。所以请根据您的情况修改此内容。

注:

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

参考:

解决方法 3:

作为另一种方法,当使用此方法时,检索 PDF 数据页数的示例脚本如下。

async function myFunction() {
  const cdnjs = "https://cdn.jsdelivr.net/npm/pdf-lib/dist/pdf-lib.min.js";
  eval(UrlFetchApp.fetch(cdnjs).getContentText()); // Load pdf-lib
  const setTimeout = function (f, t) {
    // Overwrite setTimeout with Google Apps Script.
    Utilities.sleep(t);
    return f();
  };

  const myFolder = DriveApp.getFoldersByName("Test").next();
  const files = myFolder.searchFiles('title contains ".PDF"');
  const ar = [];
  while (files.hasNext()) {
    ar.push(files.next())
  }
  for (let i = 0; i < ar.length; i++) {
    const file = ar[i];
    const pdfData = await PDFLib.PDFDocument.load(new Uint8Array(file.getBlob().getBytes()));
    const n = pdfData.getPageCount();
    console.log("fileName: %s, totalPages: %s", file.getName(), n);
  }
}

注:


-2
投票
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();
};
© www.soinside.com 2019 - 2024. All rights reserved.