web-dev-qa-db-ja.com

ユーザーがアップロードした.PDFのページ数を取得するにはどうすればよいですか?

ファイル入力があり、「アップロード」する前に、JAVASCRIPTでその.pdfのページ数を計算する必要があります(例:JQuery ...)

11
sparkle

Pdf.jsを使用する場合は、PDFファイルのページ数を出力する次のコードで githubの例 ( '.../examples/node/getinfo.js')を参照できます。

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);
}
35
Sid Thakur

と純粋な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 );
}
6
Sajjad Shirazy

他の回答で述べられているように、pdf.jsのようなものがあなたが探しているものです。 APIを確認しましたが、合計ページ数を返すnumPages()関数が含まれています。また、Mozillaから デモページを表示すると、ページ数がカウントされるようです。

ソリューションに最新のブラウザと実験的なテクノロジーを使用できるかどうかによって異なります。 pdf.jsは非常に印象的ですが、 githubページ によるとまだ実験的です。

アップロード後にサーバー上のページを数えることができる場合は、 pdftools などを確認する必要があります。

何かのようなもの pdftools --countpagesはあなたが探しているものです

2
groodt

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要素への参照を格納する変数。