如何获取用户上传的.PDF页数?

时间:2012-04-20 21:18:02

标签: javascript jquery pdf jquery-plugins adobe

我有一个文件输入,在“上传”之前我需要在JAVASCRIPT中计算该.pdf的页数(例如JQuery ......)

6 个答案:

答案 0 :(得分:31)

如果你使用pdf.js,你可以用以下代码来引用example on github(' ... / examples / node / getinfo.js'),这些代码打印pdf中的页数文件。

const pdfjsLib = require('pdfjs-dist');
...
pdfjsLib.getDocument(pdfPath).then(function (doc) {
    var numPages = doc.numPages;
    console.log('# Document Loaded');
    console.log('Number of Pages: ' + numPages);
}

答案 1 :(得分:5)

和一个纯粹的JavaScript解决方案:

var input = document.getElementById("files");
var reader = new FileReader();
reader.readAsBinaryString(input.files[0]);
reader.onloadend = function(){
    var count = reader.result.match(/\/Type[\s]*\/Page[^s]/g).length;
    console.log('Number of Pages:',count );
}

答案 2 :(得分:2)

正如其他答案所述,像pdf.js这样的东西就是你要找的东西。我已经看了一下API,它确实包含了一个numPages()函数来返回总页数。在查看demo page from Mozilla.

时,它似乎也会为我计算页数

这取决于您是否能够将现代浏览器和实验技术用于您的解决方案。 pdf.js非常令人印象深刻,但根据github page仍然是实验性的。

如果您能够在上传后计算服务器上的页数,那么您应该查看pdftools或类似内容。

pdftools --countpages这样的东西就是你要找的东西

答案 3 :(得分:1)

我认为自Tracker1发布答案以来,API发生了一些变化。我尝试了Tracker1的代码,看到了此错误:

Uncaught TypeError: pdfjsLib.getDocument(...).then is not a function

一个小的更改将其解决:

const pdfjsLib = require('pdfjs-dist');
...
pdfjsLib.getDocument(pdfPath).promise.then(function (doc) {
    var numPages = doc.numPages;
    console.log('# Document Loaded');
    console.log('Number of Pages: ' + numPages);
}

答案 4 :(得分:0)

您也可以使用pdf-lib

您将需要从输入字段中读取文件,然后使用pdf-lib获取页数。代码如下:

import { PDFDocument } from 'pdf-lib';

...

const readFile = (file) => {

  return new Promise((resolve, reject) => {

    const reader = new FileReader();

    reader.onload = () => resolve(reader.result);
    reader.onerror = error => reject(error);

    reader.readAsArrayBuffer(file);
  });
}

const async getNumPages = (file) => {

  const arrayBuffer = await readFile(file);

  const pdf = await PDFDocument.load(arrayBuffer);

  return pdf.getPages();
}

然后使用以下命令获取附件文件的页数:

const numPages = await getNumPages(input.files[0]);

成为input变量,该变量存储对文件输入的DOM元素的引用。

答案 5 :(得分:0)

在使用 Pdf-lib 的打字稿类中,我使用以下内容。

// getPAGE COUNT:
  async getPageCount(formUrl: any): Promise<number>{
    const LogPdfFields = [] as any[];
    const formPdfBytes = await fetch(formUrl).then((res) => res.arrayBuffer());
    const pdfDoc = await PDFDocument.load(formPdfBytes);
    const pageCount = pdfDoc.getPageCount();
    return pageCount;
  }

作为承诺调用