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

2g32fytz  于 2023-10-17  发布在  jQuery
关注(0)|答案(6)|浏览(125)

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

6rqinv9w

6rqinv9w1#

如果你使用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);
})
xzlaal3s

xzlaal3s2#

一个纯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 );
}
slsn1g29

slsn1g293#

也可以使用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 getPageCount = async (file) => {

  const arrayBuffer = await readFile(file);

  const pdf = await PDFDocument.load(arrayBuffer);

  return pdf.getPageCount();
}

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

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

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

qncylg1j

qncylg1j4#

正如在其他答案中所述,像pdf.js这样的东西就是你正在寻找的。我看了一下这个API,它确实包含了一个numPages()函数来返回页面总数。在查看demo page from Mozilla.时,它似乎也为我计算页数
这取决于您是否能够为您的解决方案使用现代浏览器和实验技术。pdf.js令人印象深刻,但根据github page,它仍然是实验性的。
如果你能够计算上传后服务器上的页面数,那么你应该看看pdftools或类似的。
pdftools --countpages就是你要找的东西

m3eecexj

m3eecexj5#

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

// 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;
  }

打电话作为承诺

vom3gejh

vom3gejh6#

我认为自从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);
}

相关问题