计算pdf文件中的总页数

计算pdf文件中的总页数,pdf,google-apps-script,Pdf,Google Apps Script,每周,我都会从我的客户那里收到一套pdf文件 他们将把pdf文件粘贴到特定的google drive文件夹中。我需要一个pdf文件的总页数。我试图在应用程序脚本中创建一个代码,这将有助于更新pdf文件名和特定Google工作表中的总页数 我找到了为google文档和应用程序创建的代码 但这不起作用。我正在寻找一个应用程序脚本,它有助于检查特定的驱动器文件夹,并更新pdf文件名和在特定的谷歌页面的总页数 我试着写下剧本 function getNumberofPages() { var myF

每周,我都会从我的客户那里收到一套pdf文件

他们将把pdf文件粘贴到特定的google drive文件夹中。我需要一个pdf文件的总页数。我试图在应用程序脚本中创建一个代码,这将有助于更新pdf文件名和特定Google工作表中的总页数

我找到了为google文档和应用程序创建的代码

但这不起作用。我正在寻找一个应用程序脚本,它有助于检查特定的驱动器文件夹,并更新pdf文件名和在特定的谷歌页面的总页数

我试着写下剧本

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文件无效


提前感谢。

不幸的是,目前还没有使用谷歌API直接从PDF文件检索总页面的方法。那么这些变通方法呢?请根据您的情况选择它

解决方法1: 在此解决方案中,它检索PDF文件中内容流的数量。内容流显示为
/Contents
的属性

当这反映到脚本中时,它将变成如下所示

修改脚本:
  • 尽管这个解决方法很简单,但它可能无法像上面所说的那样用于所有PDF文件。如果此解决方案不能用于PDF文件,那么下面的解决方案2如何
解决方法2: 在此解决方案中,使用API检索PDF文件的总页面。我用过。总页数是从拆分文件的数量中检索的。使用此API时,请检查并检索您的密钥

修改脚本:
  • 我不确定PDF文件的数量和文件大小。所以我没用这个。这是一个示例脚本。所以请根据你的情况修改这个
注:
  • 我可以在我的应用程序中使用这些变通方法。但我还不能确认所有的PDF文件。因此,如果这些解决方法不适用于您的PDF文件,我很抱歉
参考:

PDF是blob内容,这意味着您需要解释目标文件的字节。页数是PDF布局的函数,而不是Google所做的或具有的函数。@ashokkumar Ponnusamy我很抱歉我帮不了你。PDF中的页面可能多于或少于出现的
/Contents
。由于op不控制客户端的上载(至少他没有指出其他情况),他不知道他的客户端上载的PDF是否与您的类似。因此,在他的情况下,您的方法可能会返回不准确的结果。@mkl谢谢您的建议。对因此,我添加了一个注释部分,并为我正在使用的谷歌应用程序脚本提出了一个简单的解决方案。但是根据你的建议,我又增加了一个解决方法。它使用API。这样,OP可以针对OP的情况选择解决方案。你如何看待这个问题?很可能第二个解决方案更准确,但是你依赖于一个外部API,并且必须考虑API无法使用的情况。好吧…@mkl谢谢你的回复。我为我的拙劣技能道歉。我想多学习,不必为任何事道歉。外部API只是有一个缺点,可能不是一直可用。因此,使用它们意味着自己的代码也只有有限的可用性。这不一定是KO,但必须意识到这一点并告诉客户。
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)
  }
}
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)
  }
}
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();
};