我有一个文件输入,在“上传”之前我需要在JAVASCRIPT中计算该.pdf的页数(例如JQuery ......)
答案 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;
}
作为承诺调用