Я вижу, что есть много вопросов для получения количества страниц в aa pdf с помощью C, PHP и других, но мне интересно, с помощью командного файла или cmd есть простой способ получить количество страниц?
Получите количество страниц в pdf, используя командный файл cmd
Ответ 1
Использование pdftk pdftk my.pdf dump_data | grep NumberOfPages
делает трюк.
Ответ 2
В качестве альтернативы вы можете использовать команду, которая возвращает только номер:
pdfinfo "${PDFFILE}" | grep Pages | sed 's/[^0-9]*//'
Вам понадобится пакет xpdf (обычно предустановленный во многих дистрибутивах):
Ответ 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