powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как узнать количество страниц PDF-файла?
25 сообщений из 30, страница 1 из 2
Как узнать количество страниц PDF-файла?
    #40067422
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как узнать количество страниц PDF-файла из Delphi?

Тема уже не новая, но помогите пожалуйста узнать количество страниц PDF-файла без регистрации сторонних dll и т.д.
Желательно на "чистом" Delphi.
Может у кого есть рабочий вариант функции для чтения последних версий PDF-файлов.

Заранее благодарен.
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067424
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyKNP,

Спецификация PDF занимает 600 страниц (это без учета шрифтов и кодировок). Длинноватая функция получится, не?
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067439
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergeyKNP,

Самый простой вариант, без парсинга всего документа: Читайте с конца файла блок trailer и над ним блок перекрестных ссылок xref. В trailer нужно вытащить значение нода /Root. По его значению(строка в таблице = номер) в таблице перекрестных ссылок берите смещение Root объекта для чтения. Читайте нод объекта между obj/endobj по данному смешению. В нем должна быть ссылка на каталог страниц /Pages. По ее номеру снова из таблицы xref берите смещение, читаете объект по смещению obj/endobj - это будет узел страниц. В нем ищите /Count , его значение и будет количеством страниц в документе.
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067440
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Den_Z_,

Ну только вот xref он не всегда над trailer. И формат самого xref не такой уж однозначный.А еще он может в стриме лежать... В общем, веселье только начинается.
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067442
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asviridenkov,

я давно уже в стандарт заглядывал, сейчас глянул, Адоб рекомендует читать файл с конца после %%EOF искать startxref, после него будет смещение на xref.
Насколько помню таблица ссылок не пакуется в стрим. Про Root правда не помню.
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067445
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Den_Z_,

Про xref уже правильнее, он ищется именно про startxref. Бывают, правда, совсем кривые документы, где и так не ищется но редко.
А вот в стрим xref пакуется, к сожалению. Да еще и в отдельном формате, не таком как обычно.
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067446
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ах, да, еще не стоит забывать что xref он не один, это цепочка по которой надо пройти до конца.

P.S. Чудный формат, простой и понятный.
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067510
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
30.04.2021 04:35, asviridenkov пишет:
> Ах, да, еще не стоит забывать что xref он не один, это цепочка по которой надо пройти до конца.
> P.S. Чудный формат, простой и понятный.

это потому, что в него понапихали мультимедийности, гипертекстовости и копирайтности.
а пока он был клоном PostScript'а, был вполне прозрачным.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067515
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyKNP,

Это если со сторонней DLL:

a) https://www.sql.ru/forum/1288541/ PDF.dll from Google Chrome

b) PDFium.dll

c) Или вот нашёлся маленький проектик на C++ для подсчёта страниц в PDF, больше он ничего не делает
хотя там почему-то внизу страницы кусок кода на Delphi, что есть очень странно
http://angusj.com/delphitips/pdfpagecount.php
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067560
crossa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рекомендую бесплатную библиотеку Quick PDF Library Lite , функция PageCount . Библиотеку можно использовать и в виде DLL, и в виде файлов DCU для каждой версии Delphi.
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067577
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asviridenkov
_Den_Z_,

Про xref уже правильнее, он ищется именно про startxref. Бывают, правда, совсем кривые документы, где и так не ищется но редко.

И сам ридер читает такие документы где нет точки входа ?
Интересно было бы посмотреть такой документ и его версию.
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067584
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Den_Z_,

Читает. Я в итоге тоже сделал. startxref там в космос показывает.
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067607
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asviridenkov,
Такого не встречал, поэтому и было бы интересно посмотреть. Помню что линейные, после редактирования интерактивных форм могут содержать несколько блоков с %%EOF, и последний не всегда указывает на оригинальный документ. Там еще вроде, где-то размер добавляется, то ли в заголовке, толи в конце , чтобы найти нужную секцию.
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067737
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crossa,
"Рекомендую бесплатную библиотеку Quick PDF Library Lite, функция PageCount. Библиотеку можно использовать и в виде DLL, и в виде файлов DCU для каждой версии Delphi."


почему-то не приходит ссылка для скачивания, может поделиться кто?
Заранее благодарю.
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067739
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скачал с https://downloadly.ir/, но в 10.4.1 не компилится :(
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067743
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пришла ссылка на DebenuPDFLibrary1811
скачал, подключил, скомпилил тестовый проект, но PageCount всё время возвращает 1
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067746
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TForm46.Button1Click(Sender: TObject);
var
  QP: TDebenuPDFLibrary1811;
begin
  QP := TDebenuPDFLibrary1811.Create;
  try
    QP.LoadFromFile(pchar('D:\All_fdb\Fdb_kontora\files\dog\doc.pdf'), '');
    ShowMessage(inttostr(QP.PageCount));
  finally
    QP.Free;
  end;
end;



Может кто знает, что я сделал не так?
PDF-1.6
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067747
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ищи на просторах интернета библиотеку Gnostice PDFtoolkit - это лучшая, полностью нативная, библиотека Дельфи для работы с PDF
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067750
crossa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если Вы используете полную версию библиотеки (надеюсь, Вы легально ее купили), то нужно вызвать функцию UnlockKey с регистрационным ключом.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure TForm46.Button1Click(Sender: TObject);
var
  QP: TDebenuPDFLibrary1811;
begin
  QP := TDebenuPDFLibrary1811.Create;
  try
    if QP.UnlockKey(RegKey) <> 1 then Exit;
    QP.LoadFromFile('D:\All_fdb\Fdb_kontora\files\dog\doc.pdf', '');
    ShowMessage(inttostr(QP.PageCount));
  finally
    QP.Free;
  end;
end;
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067753
crossa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И неплохо бы проверить, загрузился ли PDF-файл (функция LastErrorCode ).
Код: pascal
1.
2.
3.
4.
5.
if QP.LoadFromFile('D:\All_fdb\Fdb_kontora\files\dog\doc.pdf', '') <> 1 then 
begin
   ShowMessage('Error Code: ' + IntToStr(QP.LastErrorCode));
   Exit;
end;
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40067758
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,

да, всё заработало...СПС!!!
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40103387
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем,
Gnostice PDFtoolkit для Delphi 11 пока нет

может появились варианты получения количества страниц PDF-файла без особых подпрыгиваний?
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40103424
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SergeyKNP
Привет всем,
Gnostice PDFtoolkit для Delphi 11 пока нет

может появились варианты получения количества страниц PDF-файла без особых подпрыгиваний?


если у тебя есть исходники PDFtoolkit, то перекомпилить под 11-й дельфи труда не представляет никакого
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40103714
SergeyKNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,

в том то и дело, что исходников нет
...
Рейтинг: 0 / 0
Как узнать количество страниц PDF-файла?
    #40103748
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверху мой ответ был 22316757
Рекомендую способ через Pdf.dll от Google Chrome, всмысле единственный, который проверял

Код: pascal
1.
Function TMyChromePDFRender.GetPagesCount(): integer;
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как узнать количество страниц PDF-файла?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]