Я вижу, что есть много вопросов для получения количества страниц в 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"