Pull to refresh

Comments 13

Спасибо огромное за это исследование. Отдельный плюс за примеры кода. Однозначно в избранное.
И все бы ничего, и обошелся бы я какой-нибудь левой библиотечкой, но кое-какие специфичные штучки-финтеплюшки, так необходимые мне, в библиотеках не нашлись.

А можно конкретней, чем например не подошло: ru2.php.net/manual/ru/book.pdf.php?
А можно конкретней, чем например не подошло: ru2.php.net/manual/ru/book.pdf.php?

Если я правильно понял это библиотека для генерации PDF, а я писал про парсинг.
А какие библиотеки есть подобные, и какие «штучки-финтеплюшки» необходимые в них отсутствуют?
На вскидку не вспомню названий библиотек. В основном не было всего того что мне нужно разом. То нельзя было получать данные постранично, то не вынималась логическая разметка(типа параграфов), то не было даже приблизительного позиционирования картинки относительно текста на странице, то нужный мне функционал был только в платной редакции и к тому же я не был уверен, что там есть все, что мне нужно.
В общем основательно посидев в гуугле меня все это стало сильно бесить, и я подумал, что во всем разберусь сам, да и опыт полезный на будущее…
В формате PDF много лишнего, наверное сами разрабы не понимают что это такое…
В формате PDF много лишнего, наверное сами разрабы не понимают что это такое…

Просто, как и многие разработчики они решили внести максимум функционала и местами получили кашу.
У меня в одном из проектов была такая задача. Честно — дело кончилось покупкой ABBYY под Linux.
Уж извините, но в статье огромное количество недопонимания и неточностей.

Самое основное, что в глаза бросается, и поломает ваш парсер на один чих:

1.
Во многих pdf'ах xref table, как и trailer вообще отсутствуют. Вместо них используется xref streams.

2.
Вторая группа и символ сообщают: существует ли объект на самом деле. 65535 f – объект не существует…
Это не так. Второе число — это generation. Если pdf обновлялся, он может быть отличен от 0, а 65535 — это зарезервированное значение для 0го объекта. Более того, в коде парсера xref table присутствует ошибка, из-за которой в таблице окажутся удаленные объекты (для некоторых pdf'ов).

3.
stream может быть сжат не только flate'ом, но и lzw и еще парой специфичных кодировок контроллируемых ключем /Filter в stream dictionary. И они, особенно lzw, на самом деле встречаются очень часто.

В общем, это пока даже не парсер, а так, proof of concept.
Большое спасибо за Ваш комментарий. Постараюсь постепенно исправить все неточности

Уж извините, но в статье огромное количество недопонимания и неточностей.
Самое основное, что в глаза бросается, и поломает ваш парсер на один чих:
1.
Во многих pdf'ах xref table, как и trailer вообще отсутствуют. Вместо них используется xref streams.


Спасибо, за это замечание. Честного говоря про этот момент ничего не нашел пока.

2.
Вторая группа и символ сообщают: существует ли объект на самом деле. 65535 f – объект не существует…


Если я правильно понял, то число здесь играет примерно ту же роль, что и второе число в описании объекта(после его номера)?

3.
stream может быть сжат не только flate'ом, но и lzw и еще парой специфичных кодировок контроллируемых ключем /Filter в stream dictionary…

Про этот факт я написал и даже указал на страницу в документации, где исчерпывающе описываются все возможные фильтры.

Что же касается сырости, то так оно и есть. Но на данном этапе и не было целью представить здесь готовый парсер. Это пока беглый обзор, о чем я так же в конце написал, а потому некоторые вопросы я здесь просто опустил. В противном случае у меня бы просто получился перевод документации

Здесь скорей было ошибкой попытка уместить все в одно и сразу…
Честного говоря про этот момент ничего не нашел пока.
Секция 7.5.8 эдобовского референса.

Если я правильно понял, то число здесь играет примерно ту же роль, что и второе число в описании объекта(после его номера)?
Это оно и есть.

Про этот факт я написал и даже указал на страницу в документации, где исчерпывающе описываются все возможные фильтры.
Извиняюсь, не обратил внимания.
Если я правильно понял, то число здесь играет примерно ту же роль, что и второе число в описании объекта(после его номера)?

Это оно и есть.


Перечитал доки, Поправил. Еще раз спасибо.

Секция 7.5.8 эдобовского референса.

Тоже сейчас поправлю
в своем проекте приходится распознавать и обрабатывать PDF, сначала использовали для не особо важных документов cuneiform, для важных платный Abby. Мне кажется разбивать их руками все же своего рода извращение, учитывая что все что можно было сделать хорошо, уже сделали и придумали в этом направлении. Если лень платить за Finereader, попробуйте cuneiform, качество распознавания у него хуже, но функционал примерно схож и конвертация в HTML с распознаванием присутствует.
Sign up to leave a comment.

Articles