Подтвердить что ты не робот

Получите количество страниц в pdf, используя командный файл cmd

Я вижу, что есть много вопросов для получения количества страниц в aa pdf с помощью C, PHP и других, но мне интересно, с помощью командного файла или cmd есть простой способ получить количество страниц?

4b9b3361

Ответ 1

Использование pdftk pdftk my.pdf dump_data | grep NumberOfPages делает трюк.

Ответ 2

В качестве альтернативы вы можете использовать команду, которая возвращает только номер:

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

Вам понадобится пакет xpdf (обычно предустановленный во многих дистрибутивах):

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

Ответ 3

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 ""

Ответ 4

Без каких-либо внешних инструментов (за исключением script ниже .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 по символу, но может быть оптимизирован.

Ответ 5

Поскольку вы попросили "пакетный файл", я должен предположить, что вам нужно только решение на базе Windows. Но, на всякий случай, Mac OS X является вариантом, здесь что-то, что может быть полезно. Если у вас есть файлы PDF на Mac, на диске, который был проиндексирован Spotlight (по умолчанию), следующая команда вернет количество страниц без внешних зависимостей:

mdls -name kMDItemNumberOfPages POSIX_PATH_OF_PDF_FILE

Источник: MacScripter.net - http://macscripter.net/viewtopic.php?id=32381