Я вижу, что есть много вопросов для получения количества страниц в pdf с помощью C, PHP и других, но мне интересно, есть ли простой способ получить количество страниц с помощью командного файла или cmd?
Получить количество страниц в pdf с помощью командного файла cmd
Ответы (7)
Используя pdftk:
pdftk my.pdf dump_data | grep NumberOfPages
делает свое дело.
grep на findstr, и вы даже будете работать в Windows, не устанавливая больше, чем pdftk.
- person Joey; 04.11.2009
pdftk my.pdf dump_data | grep NumberOfPages | sed 's/[^0-9]*//', и вы просто получите число.
- person David Folkner; 04.04.2014
pdftk my.pdf dump_data | grep NumberOfPages | awk '{print $2}'
- person Mehmet; 22.01.2015
pdftk my.pdf dump_data | awk '/NumberOfPages/{print $2}' Точно так же достаточно одного sed. pdftk my.pdf dump_data | sed '/NumberOfPages/!d;s/[^0-9]*//'
- person Palec; 04.07.2017
find . -maxdepth 1 -name "*.pdf" -exec sh -c "pdftk '{}' data_dump" \; | awk '/NumberOfPages/{print $2}'
- person Pablo Bianchi; 19.02.2021
В качестве альтернативы вы можете использовать команду, которая возвращает только число:
pdfinfo "${PDFFILE}" | grep Pages | sed 's/[^0-9]*//'
Вам понадобится пакет xpdf (обычно предустановлен во многих дистрибутивах):
http://www.foolabs.com/xpdf/download.html
( for pdf in *.pdf ; do pdfinfo "$pdf" ; done ) | grep Pages | sed 's/[^0-9]*//' | paste -sd+ | bc
- person Thomas W; 19.12.2015
matt@mtbook:~/projects/booky% time ./booky-pdfinfo.sh real 0m0.129s user 0m0.099s sys 0m0.022s matt@mtbook:~/projects/booky% time ./booky-qpdf.sh реальный 0m0.039s пользователь 0m0.019s sys 0m0.020s
- person cavalcade; 29.09.2016
QPDF — это облегченная альтернатива PDFtk (требующая Java runtime) и pdfinfo (довольно тупой инструмент).
qpdf --show-npages file.pdf
Он печатает только количество страниц, не требуя постобработки.
Для большинства дистрибутивов Linux существуют пакеты, обычно называемые просто qpdf. Такие страницы, как Softpedia, содержат бинарные файлы для Windows. исходный код можно загрузить с SourceForge или с официальный репозиторий GitHub.
Параметр --show-npages был добавлен в версии после 4.1.0, в commit 91367239fd55f7c4996ed6158405eacbверсией 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 ""
Без каких-либо внешних инструментов (сохраните приведенный ниже скрипт как .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 по символу, но его можно оптимизировать.
pdfpages.bat pdffile.pdf? Есть проблема?
- person npocmaka; 18.11.2015
<</Type/Pages/Count 21 getPages() сканирует байты PDF на наличие тегов ‹‹ и передает прочитанное содержимое в checkTag(). Затем checkTag() разбивает содержимое на элементы, используя / в качестве разделителя, и сканирует элемент для подсчета строк, обнаружив, что затем разбивает элемент по пробелу и возвращает индекс [1], т. е. второе значение в массиве в приведенном выше примере. 21
- person Phlebass; 07.04.2017
Поскольку вы просили «пакетный файл», я должен предположить, что вам нужно только решение на базе Windows. Но на всякий случай, если Mac OS X является вариантом, вот кое-что, что может быть полезно. Если у вас есть PDF-файлы на Mac, на диске, проиндексированном Spotlight (по умолчанию), следующая команда вернет количество страниц без внешних зависимостей:
mdls -name kMDItemNumberOfPages POSIX_PATH_OF_PDF_FILE
Источник: MacScripter.net — http://macscripter.net/viewtopic.php?id=32381 а>
Это может быть полезно для новых пользователей. В новой версии инструмента PDFtk (выше 2.0) используйте команду ниже, чтобы получить количество страниц файла PDF:
pdftk file.pdf dump_data_annots output outputfile.txt
В месте назначения будет создан новый файл с содержимым, подобным приведенному ниже:
NumberOfPages: 6
Теперь прочитайте файл и манипулируйте содержимым по своему усмотрению.
Я знаю, что это старый пост, но все еще очень актуальный, поэтому я считаю, что должен быть ответ, который может рассказать, как получить количество страниц с помощью утилиты «poppler-0.68.0» в Windows.
Перейдите в папку bin и запустите pdfinfo.exe, например - C:\Temp\temp_folder\poppler-0.68.0\bin>pdfinfo.exe "C:\Temp\temp_folder\TT.pdf"
