web-dev-qa-db-ja.com

コマンドバッチファイルを使用してPDFのページ数を取得する

C、PHPなど)を使用してPDFのページ数を取得するための多くの質問があることを確認できますが、バッチファイルまたはcmdを取得する簡単な方法があります。ページ数?

44
Peter Craig

pdftk の使用:

pdftk my.pdf dump_data | grep NumberOfPages

トリックを行います。

59

または、次のコマンドを使用して、数値のみを返すこともできます。

pdfinfo "${PDFFILE}" | grep Pages | sed 's/[^0-9]*//'

Xpdfパッケージが必要になります(通常、多くのディストリビューションにプリインストールされています)。

http://www.foolabs.com/xpdf/download.html

32
dimib

[〜#〜] qpdf [〜#〜]軽量ですPDFtkの代替(Javaランタイム)とpdfinfo(非常に簡単なツール)が必要)。

qpdf --show-npages file.pdf

ページ数だけを印刷し、後処理は必要ありません。

ほとんどのLinuxディストリビューション用のパッケージが存在し、通常はqpdfという名前です。 Softpedia Host Windowsのバイナリ のようなページ。 ソースコード はSourceForge、または 公式GitHubリポジトリ からダウンロードできます。


--show-npagesオプションは、4.1.0以降のバージョンで commit 91367239fd55f7c4996ed6158405ea10573ae3cb に追加されました。 バージョン4.1.0以前との互換性を保つために、各ページに関する基本情報をダンプし、ページ数をカウントできます。 LinuxおよびOS Xの場合:

qpdf --show-pages file.pdf | grep -c ^page

Windowsでは、代わりにfindstrおよびfindを使用する必要があります。

qpdf --show-pages file.pdf | findstr ^page | find /c /v ""
22
Palec

外部ツールなし(以下のスクリプトを.batとして保存):

@if (@X)==(@Y) @end /* JScript comment
@echo off

cscript //E:JScript //nologo "%~f0"  %*

exit /b 0
@if (@X)==(@Y) @end JScript comment */

   var args=WScript.Arguments;
   var filename=args.Item(0);
   var fSize=0;
   var inTag=false;
   var tempString="";
   var pages="";

   function getChars(fPath) {

        var ado = WScript.CreateObject("ADODB.Stream");
        ado.Type = 2;  // adTypeText = 2
        ado.CharSet = "iso-8859-1";
        ado.Open();
        ado.LoadFromFile(fPath);                     
        var fs = new ActiveXObject("Scripting.FileSystemObject");
        fSize = (fs.getFile(fPath)).size;

        var fBytes = ado.ReadText(fSize);
        var fChars=fBytes.split('');
        ado.Close();
        return fChars;
   }


   function checkTag(tempString) {

    if (tempString.length == 0 ) {
        return;
    }

    if (tempString.toLowerCase().indexOf("/count") == -1) {
        return;
    }

    if (tempString.toLowerCase().indexOf("/type") == -1) {
        return;
    }

    if (tempString.toLowerCase().indexOf("/pages") == -1) {
        return;
    }

    if (tempString.toLowerCase().indexOf("/parent") > -1) {
        return;
    }


    var elements=tempString.split("/");
    for (i = 0;i < elements.length;i++) {

        if (elements[i].toLowerCase().indexOf("count") > -1) {
            pages=elements[i].split(" ")[1];

        }
    }
   }

   function getPages(fPath) {
        var fChars = getChars(fPath);

        for (i=0;i<fSize-1;i++) {

            if ( fChars[i] == "<" && fChars[i+1] == "<" ) {
                inTag = true;
                continue;
            }

            if (inTag && fChars[i] == "<") {
                continue;
            }

            if ( inTag && 
                 fChars[i] == ">" &&
                 fChars[i+1] == ">" ) {

                inTag = false;
                checkTag(tempString);
                if (pages != "" ) {
                    return;
                }

                tempString="";

            }

            if (inTag) {
                if (fChars[i] != '\n' && fChars[i] != '\r') {
                   tempString += fChars[i];
                }
            }

        }

   }

   getPages(filename);
   if (pages == "") {
     WScript.Echo("1");
   } else {
    WScript.Echo(pages);
   }

.pdfファイルへのパスを取得し、ページ数を出力するだけです。PDFをシンボルごとに読み取るため、それほど高速ではありませんが、最適化できます。

7
npocmaka

「バッチファイル」を要求したので、Windowsベースのソリューションだけが必要だと思います。ただし、Mac OS Xがオプションである場合に備えて、役立つ情報をここに示します。 MacでPDFを使用している場合、Spotlight(デフォルト)によってインデックスが作成されたドライブでは、次のコマンドは外部依存関係を使用しないページ数を返します。

mdls -name kMDItemNumberOfPages POSIX_PATH_OF_PDF_FILE

ソース: MacScripter.net-http://macscripter.net/viewtopic.php?id=32381

3

新規ユーザーの役に立つかもしれません。 PDFtkツールの新しいバージョン(2.0以上)では、以下のコマンドを使用して、PDFファイルのページ数を取得します。

pdftk file.pdf dump_data_annots output outputfile.txt

次のような内容の新しいファイルが宛先に作成されます。

NumberOfPages: 6

次に、ファイルを読み取り、必要に応じてコンテンツを操作します。

0
Pankaj Verma