我有一个文件输入,在“上传”之前我需要在 JAVASCRIPT 中计算该 .pdf 的页数(例如 JQuery ...)
如果您使用 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);
})
以及纯 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 );
}
正如其他答案中所述,像 pdf.js 这样的东西就是您正在寻找的东西。我查看了 API,它确实包含一个 numPages() 函数来返回总页数。当我查看来自 Mozilla 的 demo 页面时,它似乎还会为我计算页数。
这取决于您是否能够为您的解决方案使用现代浏览器和实验技术。 pdf.js 非常令人印象深刻,但根据 github 页面,它仍然是实验性的。
如果您能够在上传后计算服务器上的页面数,那么您应该查看 pdftools 或类似工具。
类似
pdftools --countpages
的东西就是您正在寻找的
在使用 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;
}
打电话作为承诺
您也可以使用
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 元素的引用的变量。
我认为自从 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);
}