15

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

4

6 回答 6

44

如果您使用 pdf.js,您可以参考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);
})
于 2014-05-30T18:08:51.850 回答
9

和一个纯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 );
}
于 2016-08-30T08:41:33.107 回答
2

正如其他答案中所述,您正在寻找类似 pdf.js 的内容。我查看了 API,它确实包含一个 numPages() 函数来返回总页数。从 Mozilla查看演示页面时,它似乎也为我计算页面。

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

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

pdftools --countpages你正在寻找的东西

于 2012-04-20T21:34:32.517 回答
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 getNumPages =async (file) => {

  const arrayBuffer = await readFile(file);

  const pdf = await PDFDocument.load(arrayBuffer);

  return pdf.getPages();
}

然后只需获取附件的页数:

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

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

于 2019-09-23T21:21:09.817 回答
0

我认为自从 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);
}
于 2020-10-07T04:26:37.100 回答
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;
  }

打电话作为承诺

于 2020-12-29T13:25:12.030 回答