0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 84
1

Как посчитать количество страниц в PDF-файлах

26.05.2017, 13:55. Показов 19503. Ответов 12
Метки нет (Все метки)

Мне необходимо посчитать количество страниц в PDF-файлах (в данной дирректории и во всех вложениях) и количество этих PDF-файлов. Количество PDF-файлов - любое, количество вложенных папок - любое.

Рабочий код для подсчета количества PDF-файлов:
Bash
1
2
3
@echo off
for /r %%i in (*.pdf) do set /a num+=1
echo PDF_file: %num%
А вот с подсчетом количества страниц в PDF-файлах проблема. Почитал интернет - много всего говорится, но код так и не нашел. Может у кого-то есть готовый код для CMD/BAT?

Нашел код на др языках программирования, может кто-то сможет переписать эти варианты на CMD/BAT?

Вот что смог найти в интернете

Вариант 1: взял здесь:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Function PDFCount(PDFИмя As String)
'Функция определяет сколько страниц в PDF файле.
'Для этого она построчно читает файл и ищет в нем строку "/Count N". Где N - кол-во страниц.
'Если такой строки нет в файле, принимаем его размер в 1 страницу.
    PDFCount = 1
    Ищем = "/Count"
    Разделитель = Chr(10)
    Open PDFИмя For Binary Access Read Lock Read As #1
    'Читаем файл.
    Do While Not EOF(1)
        Line Input #1, fstr
        If InStr(fstr, Ищем) > 0 Then
            PDFCount = word(Right(fstr, Len(fstr) - InStr(fstr, Ищем) - Len(Ищем)), 1, Разделитель)
            Exit Do
        End If
    Loop
    Close #1
End Function
 
Function word(str, Number, Optional Разделитель = "") As String
'Функция возвращает n-ное слово в указанной строке. Аналог команды Rexx.
'На входе:
'str           - Строковая переменная.
'Number        - Номер слова.
'Разделитель   - Символ разделитель. При отсутствие за разделитель принимаются пробел и таб.
'На выходе:
'word          - n-ное слово или пустую строку если слова с таким номером нет.
 
    If Number > words(str, Разделитель) Then
            word = ""
    Else
        If Разделитель = "" Then
            word = Split(Application.Trim(Replace(str, vbTab, " ")), " ")(Number - 1)
        Else
            word = Application.Trim(Replace(Split(Application.Trim(Replace(Replace(str, " ", Chr(160)), Разделитель, " ")), " ")(Number - 1), Chr(160), " "))
        End If
    End If
End Function
-----------------------

Вариант 2: взял здесь: http://forum.rudtp.ru/threads/... pdf.12466/

%PDF-1.5
%вгПУ
109199 0 obj <</Linearized 1/L 9142108/O 109203/E 52524/N 1236/T 9126252/H [ 2754 12723]>>
endobj

------------------------

Вариант 3: взял здесь: http://interestabout.ucoz.ru/blog/2011-04-19-103

PHP
1
2
3
$pdf_content = file_get_contents($pdf_filename);
$count = preg_match_all("//PageW/", $pdf_content, $matches);
echo "Count: {$count}";
Где $pdf_filename - путь к файлу

и здесь же указали измененный вариант кода:

PHP
1
2
3
4
5
6
7
8
9
10
$f = fopen($pdf_filename, "r");
while(!feof($f)) {
  $line = fgets($f,255);
  if (preg_match('//Count [0-9]+/', $line, $matches)){
    preg_match('/[0-9]+/',$matches[0], $matches2);
    if ($count<$matches2[0]) $count=$matches2[0]; 
  } 
}
fclose($fp);
echo "Count: {$count}";
--------------------------------

Вариант 4: взял здесь: https://www.kobzarev.com/progr... -document/

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$filename = 'файл.pdf';
$fp = fopen($filename, 'r');
if ($fp) {
    $count = 0;
    while(!feof($fp)) {
        $line = fgets($fp,255);
        if (preg_match('|/Count [0-9]+|', $line, $matches)){
            preg_match('|[0-9]+|', $matches[0], $matches2);
            if ($count < $matches2[0]) {
                $count = trim($matches2[0]); 
            }
        } 
    }
    fclose($fp);
    echo "Страниц: {$count}";
}
Заранее всем спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2017, 13:55
Ответы с готовыми решениями:

Подсчет количества страниц в PDF файлах в каталоге: проблема с файлами с паролем
Привет)) Мне нужна программа, считающая кол-во страниц в PDF файлах в каталоге. Но у меня загвоздка...

Как получить количество страниц в документе PDF
kak iz biblioteka pdf reader (Axdpdf) shitat countpage in.vbnet

Как посчитать и записать количество строк в разных файлах
Доброго времени суток. Подскажите пожалуйста. Есть задача: список файлов (причем не эксель, а...

Как посчитать количество страниц?
Здравствуйте. Есть гостевая. Как сделать так что бы на каждой странице было по 5 записей и...

12
4205 / 2083 / 653
Регистрация: 26.04.2015
Сообщений: 6,720
26.05.2017, 15:01 2
берете отсель бесплатный pdftk.exe для windows и с помощью этого, находите что надо
Windows Batch file
1
2
3
4
@echo off
set "d_pdf=Demo.pdf"
for /f "tokens=2" %%a in ('""%Programfiles%\PDFtk\bin\pdftk.exe" "%d_pdf%" dump_data_annots"') do echo:Количество страниц в документе: "%d_pdf%" - %%a
pause
1
0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 84
26.05.2017, 21:44  [ТС] 3
по одному файлу (жестко указанному файлу) считает классно, а как сделать, чтобы он посчитал страницы во всех PDF-файлах в данной папке и во вложенных? Количество PDF-файлов рандомное.
0
4205 / 2083 / 653
Регистрация: 26.04.2015
Сообщений: 6,720
26.05.2017, 22:54 4
Лучший ответ Сообщение было отмечено se_arts как решение

Решение

Цитата Сообщение от se_arts Посмотреть сообщение
чтобы он посчитал страницы во всех PDF-файлах в данной папке
(pdftk.exe закинул в system32)
Windows Batch file
1
2
3
4
5
6
7
@echo off
set "d_pdf=C:\papka"
for /f "delims=" %%A in ('dir /a-d/b/s "%d_pdf%\*.pdf"') do (
 for /f "tokens=2" %%a in ('pdftk.exe "%%A" dump_data_annots') do set /a n+=%%a
)
echo Всего страниц во всех файлах PDF папки: "%d_pdf%" - %n%
pause
2
0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 84
26.05.2017, 23:28  [ТС] 5
alpap, огромное спасибо, все круто работает, считает во всех вложениях.
0
0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 84
30.05.2017, 07:00  [ТС] 6
Появилась проблема, есть PDF-файлы, в которых не считается количество страниц или определяется неправильно: пишет "Отсутствующий оперетор" или "Ошибка деления на ноль". Хотя утилита PdftkXp (входит в состав Pdftk), во всех файлах определяет правильно количество страниц (если вручную закидывать в нее файлы).
Почему данный батник работает не корректно и как можно исправить ситуацию? Проблемные PDF-файлы прикрепил.
И, второй вопрос (менее важный), батник безумно медленно считает, если PDF-файлов штук 30-40, подсчет может длиться около 5-7 минут. Можно ли ускорить подсчет?

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
 
for /r %%i in (*.pdf) do set /a num+=1
 
for /f "delims=" %%A in ('dir /a-d/b/s "%CD%\*.pdf"') do (
for /f "tokens=2" %%a in ('""e:\BAT_CMD_Test\PDFtk\bin\pdftk.exe" "%%A" dump_data_annots"') do set /a n+=%%a
)
echo:
echo PDF_Files: %num%
echo:
echo PDF_Pages: %n%
echo:
pause
 
del /q *.pdf
for /f %%j in ('dir /d /b') do rd /s /q %%j
Вложения
Тип файла: pdf 0001.pdf (1.24 Мб, 5 просмотров)
Тип файла: pdf ERT.pdf (797.3 Кб, 5 просмотров)
0
4205 / 2083 / 653
Регистрация: 26.04.2015
Сообщений: 6,720
30.05.2017, 09:02 7
se_arts,
ограничил вывод, не знаю стало ли шустрее, например у меня по всему диску С:
Кликните здесь для просмотра всего текста

Старт поиск: 8:53:41,87
Стoп поиск: 8:54:12,23
Старт запись: 8:54:12,23
Всего страниц во всех файлах PDF диска C: - 608
Стоп запись: 8:54:12,23


Измененный код (в принципе изменения только в строке 4, добавлено find "NumberOfPages")
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
set "d_pdf=C"
echo Старт поиск: %time%>>list.txt
for /f "delims=" %%A in ('dir /a-d/b/s "%d_pdf%:\*.pdf"') do (
 for /f "tokens=2" %%a in ('pdftk.exe "%%A" dump_data_annots^|find "NumberOfPages"') do set /a n+=%%a
)
echo Стoп поиск: %time%>>list.txt
>>list.txt (
 echo Старт запись: %time%
 echo Всего страниц во всех файлах PDF диска %d_pdf%: - %n%
 echo Стоп запись: %time%
)
pause
Добавлено через 4 минуты
быстрее, конечно, работать в папке, без ключа /s в dir /a-d/b/s, а еще быстрее использовать для поиска и перебора файлов pdf не cmd, например PowerShell или js, да все кроме cmd.
0
0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 84
01.06.2017, 16:39  [ТС] 8
В таком варианте: dump_data_annots^|find "NumberOfPages" батник перестал работать, окно CMD запускается и сразу пропадает, т.е. моргает (такое у меня было, когда указывал неправильные команды или параметры).
На сайте программы PDFtk: http://https://www.pdflabs.com... -man-page/ нет параметра: NumberOfPages. Видимо, из-за него батник перестал работает.

По времени подсчета: очень долго открывает файлы большого объема - 90-200МБ, даже файлов 5-6 может считать около минуты. Продолжаю тестить.
0
4205 / 2083 / 653
Регистрация: 26.04.2015
Сообщений: 6,720
01.06.2017, 23:25 9
Цитата Сообщение от se_arts Посмотреть сообщение
нет параметра: NumberOfPages
это не параметр, это строка в выводе и я сделал ее поиск чтобы выводилась только эта строка, может в зависимости от версии или варианта утилиты эта строка выглядит по-разному, тогда покажите вывод команды:
Windows Batch file
1
pdftk.exe "file.pdf" dump_data_annots>>"list.txt"
0
0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 84
02.06.2017, 11:33  [ТС] 10
ert.pdf
Кликните здесь для просмотра всего текста
NumberOfPages: 15
---
AnnotSubtype: Link
AnnotRect: 266.724 643.764 519.323 587.606
AnnotPageNumber: 3
---
AnnotSubtype: Link
AnnotRect: 266.724 583.765 519.323 525.811
AnnotPageNumber: 3
---
AnnotSubtype: Link
AnnotRect: 266.724 524.096 519.323 467.559
AnnotPageNumber: 3
---
AnnotSubtype: Link
AnnotRect: 268 465.225 519.323 418.236
AnnotPageNumber: 3
---
AnnotSubtype: Link
AnnotRect: 268 416.611 519.323 360.835
AnnotPageNumber: 3
---
AnnotSubtype: Link
AnnotRect: 266.724 359.209 519.323 301.307
AnnotPageNumber: 3
---
AnnotSubtype: Link
AnnotRect: 266.724 299.682 519.323 243.197
AnnotPageNumber: 3
---
AnnotSubtype: Link
AnnotRect: 266.724 241.571 519.323 185.087
AnnotPageNumber: 3
---
AnnotSubtype: Link
AnnotRect: 266.724 183.461 519.323 125.559
AnnotPageNumber: 3
---
AnnotSubtype: Link
AnnotRect: 266.724 124.05 519.323 77.0612
AnnotPageNumber: 3
---
AnnotSubtype: Link
AnnotRect: 218.301 126.089 378.391 77.3694
AnnotPageNumber: 4
---
AnnotSubtype: Link
AnnotRect: 217.555 539.948 377.645 491.228
AnnotPageNumber: 6
---
AnnotSubtype: Link
AnnotRect: 217.555 126.09 377.645 77.3701
AnnotPageNumber: 7
---
AnnotSubtype: Link
AnnotRect: 217.517 126.09 377.607 77.3701
AnnotPageNumber: 8
---
AnnotSubtype: Link
AnnotRect: 218.156 126.089 378.246 77.3694
AnnotPageNumber: 9
---
AnnotSubtype: Link
AnnotRect: 217.631 121.447 377.721 72.7266
AnnotPageNumber: 10
---
AnnotSubtype: Link
AnnotRect: 221.136 126.09 381.226 77.3701
AnnotPageNumber: 11
---
AnnotSubtype: Link
AnnotRect: 217.517 126.09 377.607 77.3701
AnnotPageNumber: 12
---
AnnotSubtype: Link
AnnotRect: 217.593 126.09 377.683 77.3701
AnnotPageNumber: 13
---
AnnotSubtype: Link
AnnotRect: 181.616 356.331 413.659 307.611
AnnotPageNumber: 14




0001.pdf
Кликните здесь для просмотра всего текста
NumberOfPages: 12
---
AnnotSubtype: Link
AnnotRect: 344.65 933.65 437.5 944.1
AnnotPageNumber: 1
AnnotActionSubtype: URI
AnnotActionURI: http://www.lelchitsy.by
AnnotActionIsMap: false
---
AnnotSubtype: Link
AnnotRect: 669.35 1068.85 727.9 1075.3
AnnotPageNumber: 2
AnnotActionSubtype: URI
AnnotActionURI: http://www.lelchitsy.by
AnnotActionIsMap: false
---
AnnotSubtype: Link
AnnotRect: 3.6 1068.85 61.9 1075.3
AnnotPageNumber: 3
AnnotActionSubtype: URI
AnnotActionURI: http://www.lelchitsy.by
AnnotActionIsMap: false
---
AnnotSubtype: Link
AnnotRect: 669.35 1068.85 727.9 1075.3
AnnotPageNumber: 4
AnnotActionSubtype: URI
AnnotActionURI: http://www.lelchitsy.by
AnnotActionIsMap: false
---
AnnotSubtype: Link
AnnotRect: 3.6 1068.85 61.9 1075.3
AnnotPageNumber: 5
AnnotActionSubtype: URI
AnnotActionURI: http://www.lelchitsy.by
AnnotActionIsMap: false
---
AnnotSubtype: Link
AnnotRect: 669.5 1067.35 728 1073.8
AnnotPageNumber: 6
AnnotActionSubtype: URI
AnnotActionURI: http://www.lelchitsv.bv
AnnotActionIsMap: false
---
AnnotSubtype: Link
AnnotRect: 3.6 1068.85 61.9 1075.3
AnnotPageNumber: 7
AnnotActionSubtype: URI
AnnotActionURI: http://www.lelchitsy.by
AnnotActionIsMap: false
---
AnnotSubtype: Link
AnnotRect: 19.85 896.8 104.15 903.75
AnnotPageNumber: 8
AnnotActionSubtype: URI
AnnotActionURI: http://WWW.ZERN0M0L.BY
AnnotActionIsMap: false
---
AnnotSubtype: Link
AnnotRect: 171 752.3 285.4 760.75
AnnotPageNumber: 8
---
AnnotSubtype: Link
AnnotRect: 171 743.45 285.4 751.9
AnnotPageNumber: 8
---
AnnotSubtype: Link
AnnotRect: 170.45 734.45 285.6 742.9
AnnotPageNumber: 8
---
AnnotSubtype: Link
AnnotRect: 170.1 725.45 285.6 733.9
AnnotPageNumber: 8
---
AnnotSubtype: Link
AnnotRect: 169.7 716.45 285.4 724.9
AnnotPageNumber: 8
---
AnnotSubtype: Link
AnnotRect: 3.6 1068.85 61.9 1075.3
AnnotPageNumber: 9
AnnotActionSubtype: URI
AnnotActionURI: http://www.lelchitsy.by
AnnotActionIsMap: false
---
AnnotSubtype: Link
AnnotRect: 669.35 1068.85 727.9 1075.3
AnnotPageNumber: 10
AnnotActionSubtype: URI
AnnotActionURI: http://www.lelchitsy.by
AnnotActionIsMap: false
---
AnnotSubtype: Link
AnnotRect: 287.65 34.5 355.4 40.95
AnnotPageNumber: 12
AnnotActionSubtype: URI
AnnotActionURI: http://www.lelchitsy.by
AnnotActionIsMap: false
---
AnnotSubtype: Link
AnnotRect: 435.2 34.5 519.95 40.95
AnnotPageNumber: 12
AnnotActionSubtype: URI
AnnotActionURI: mailto:gazeta-lel@mail.gomel.by
AnnotActionIsMap: false


При помощи данного кода
Windows Batch file
1
pdftk.exe "file.pdf" dump_data_annots>>"list.txt"
страницы считает правильно, а при помощи батника выдает сообщения и показывает непонятное количество страниц.
Миниатюры
Как посчитать количество страниц в PDF-файлах   Как посчитать количество страниц в PDF-файлах  
Вложения
Тип файла: txt list_ert.txt (1.7 Кб, 4 просмотров)
Тип файла: txt list_0001.txt (2.5 Кб, 6 просмотров)
0
4205 / 2083 / 653
Регистрация: 26.04.2015
Сообщений: 6,720
02.06.2017, 21:07 11
se_arts,
вот результат работы именно с предоставленными выше файлами, у меня все отлично, может криво скопировали или что пропустили?
Как посчитать количество страниц в PDF-файлах
1
0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 84
02.06.2017, 22:04  [ТС] 12
Буду разбираться, что пропустил или не так сделал.

Появилась мысль: записать данные из dump_data_annots в файл list1.txt. Далее открыть текстовый файл и посчитать все значения для NumberOfPages.
Не получается правильно написать код для последнего for для подсчета в нем NumberOfPages. Мучаюсь и не могу понять, что не так делаю.
Как правильно указать подсчет NumberOfPages в текстовом файле list1.txt?

Запись в текстовый файл происходит достаточно быстро - возможно, повысится скорость подсчета.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
echo:
for /r %%i in (*.pdf) do set /a num+=1
 
for /f "delims=" %%A in ('dir /a-d/b/s "%CD%\*.pdf"') do ("e:\BAT_CMD_Test\PDFtk\bin\pdftk.exe" "%%A" dump_data_annots>>"list1.txt")
 
for /f "eol=; tokens=* delims==" %%j in ('list1.txt ^| find /c /v "NumberOfPages: "') do set /a n+=%%j
::for /f "eol=; tokens=* delims==" %%i in ('list1.txt') do if "%%i"=="NumberOfPages: " set /a n+=%%i
 
 
echo:
echo PDF_Files: %num%
echo:
echo PDF_Pages: %n%
echo:
pause
0
4205 / 2083 / 653
Регистрация: 26.04.2015
Сообщений: 6,720
02.06.2017, 22:16 13
se_arts,
что вы творите, ума не приложу, мой код в п7 именно это делает, а именно подсчет всех выводов NumberOfPages команды pdftk.exe "file.pdf" dump_data_annots для всех файлов заданной директории, а на скорость (говорил выше) сильно влияет использование cmd, на другом языке будет быстрее.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2017, 22:16

Количество страниц в PDF документе
Добрый день. Как на JAVA можно определить количество страниц в документе pdf?

Узнать количество страниц в документах с расширением *.pdf и *.tif
Приветствую всех форумчан! Собственно, вопрос в сабже. Существуют ли какие-либо способы это...

Можно ли в ворде при создании оглавления посчитать количество страниц
можно ли в ворде при создании оглавления посчитать количество страниц главы и вывести их диапазон...

Программно посчитать количество всех страниц (на печать) в книге Excel - VBA
Всем привет! Задача: Посчитать количество распечатанных листов книги Excel программно. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.