1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Linux, консоль, анализ потрохов PDF

Тема в разделе "Софт", создана пользователем 027, 27.07.22.

  1. 027

    027 Активный участник

    9.039
    2.885
    Может знает кто.
    Задача: автоматический анализ контента в подписанном ЭП PDF файле. Нужно четко определить, это голый скан или таки есть вменяемый текст.
    pdftotext из комплекта poppler-utils экспотрирует в одну кучу все текстовое содержимое, включая формы (в моем случае штамп с данными ЭП). Причем, их может быть больше, чем одна. Таким образом, в подписанном голом скане всегда какой-то текст есть. И текст этот зависит от фантазии сочинителя штампа.
    Как решить задачу приблизительно, основываясь на собранной статистике количества символов в штампике, понятно.

    Вопрос: есть ли утилита, умеющая выдергивать отдельно текст формы и основной текст? Чтобы уж наверняка.
     
  2. The Chief

    The Chief Активный участник

    11.696
    946
    Штамп визуализации ЭП не является формой.
     
  3. 027

    027 Активный участник

    9.039
    2.885
    Ну, яхз, pdfinfo вот это пишет:
    Код:
    $ pdfinfo text_micro.pdf
    ...
    Form:           none
    ...
    
    Код:
    $ pdfinfo text_micro.sig.pdf
    ...
    Form:           AcroForm
    ...
    Тестовые простейшие пдф-ки с короткой фразой, исходная и с подписью.
    Окуляр:
    Снимок экрана от 2022-07-27 21-47-10.png Снимок экрана от 2022-07-27 21-46-36.png
     
  4. The Chief

    The Chief Активный участник

    11.696
    946
    Посмотреть на них вживую можно, если нет ничего секретного?
     
  5. 027

    027 Активный участник

    9.039
    2.885
    Можно. Как прислать? Сюда не пихается. Телега, мыло?
     
  6. The Chief

    The Chief Активный участник

    11.696
    946
    @027, на любой файлообменник архив с паролем. Пароль - в личку.
     
  7. 027

    027 Активный участник

    9.039
    2.885
    Уй, ля... Щас попробую в какое-нить облако, сто лет нафиг не нужно было...
     
  8. 027

    027 Активный участник

    9.039
    2.885
    Твою мать, в яндекс-диске за порол деньги уже требуют...
    Ссылку дам в личку, смотрите.
     
  9. The Chief

    The Chief Активный участник

    11.696
    946
    Да, это форма. Раньше не видел такого. PDFBox при экспорте в текст её пропускает.

    Код:
    java -jar pdfbox-app-3.0.0-alpha3.jar export:text -i=text_micro.sig.pdf  -o=out.txt
    Ага, понял. Это не совсем форма, а именно подпись. Есть такое специальное поле у PDF.

    Потому что poppler тупой, как сибирский валенок.
     
    Последнее редактирование: 27.07.22
  10. 027

    027 Активный участник

    9.039
    2.885
    @The Chief, спасибо, посмотрю. Жаба, правда...
     
  11. The Chief

    The Chief Активный участник

    11.696
    946
    @027, также с этим успешно работает pdfminer.six питонячий.

    Код:
    pdf2txt.py text_micro.sig.pdf  -o output.txt
     
    027 нравится это.
  12. 027

    027 Активный участник

    9.039
    2.885
    уж что нашел навскидку :)
    Скорость мне важна, прогонять надо пока что порядка 5к файлов, со временем будут только добавляться.
     
  13. The Chief

    The Chief Активный участник

    11.696
    946
    Я не в курсе, запустится ли pdfminer.six под PyPy, если уж говорить про скорость. Пробуйте.
     
  14. 027

    027 Активный участник

    9.039
    2.885
    Прогнал сейчас свой мегапроверятор (на базе poppler-utils пока что) на кучке в 6300 файлов — 14 минут. Т.о., прогон всей нашей груды точно уложится в час. Годится.
    Это я несколько погорячился. :) Норот старые файлы переподписал, и они теперь новее 01.01.2021, так что попадают в выборку под проверку. Говорил же им, не надо, не надо!..

    @The Chief, вы, случайно, не в курсе, на хрена жопплер-утилзам файрфокс?
    Код:
    Internal Error (0): couldn't find default Firefox Folder
    
     
    Последнее редактирование: 29.07.22
  15. The Chief

    The Chief Активный участник

    11.696
    946
    Случайно да. Оно там базу сертификатов ищет. :)

    А зачем каждый раз заново прогонять-то?
     
  16. 027

    027 Активный участник

    9.039
    2.885
    Ужоснах. А не свистеть об этом в поток ошибок не судьба. Какой, в жпп, файрфокс на сервере? И ключ -nocert не влияет ни фига. А еще отчего-то пхп-шный exec() напрочь игнотирует 2>/dev/null. В консоли работает, в exec() не желает.
    Пока не сделана проверка на обновление файла после предыдущего прогона. Тупо не успеваю. Моск измучен подсчетом дней до отпуска. :)
     
  17. The Chief

    The Chief Активный участник

    11.696
    946
    Создайте пустую /etc/pki/nssdb и расслабьтесь.

    Апач? Версия php? Пользуйтесь proc_open(), exec() уже при динозаврах сдох и разложился.

    [​IMG]
     
    Последнее редактирование: 29.07.22
  18. 027

    027 Активный участник

    9.039
    2.885
    Голый cli.
    А апач не нужен, родной, он только лишнее топливо жрет. :) Да и вообще, каким боком тут хттп-сервер?
    чота нет
    Код:
    Internal Error (0): couldn't find default Firefox Folder
    дефолтная 7.4
    Код:
    $ php -v
    PHP 7.4.3 (cli) (built: Jun 13 2022 13:43:30) ( NTS )
    Код:
    $ apt policy php*-common
    php-common:
      Установлен: 2:75
      Кандидат:   2:75
      Таблица версий:
     *** 2:75 500
            500 http://ru.archive.ubuntu.com/ubuntu focal/main amd64 Packages
            100 /var/lib/dpkg/status
    php7.0-common:
      Установлен: (отсутствует)
      Кандидат:   (отсутствует)
      Таблица версий:
    php5.6-common:
      Установлен: (отсутствует)
      Кандидат:   (отсутствует)
      Таблица версий:
    php-doctrine-common:
      Установлен: (отсутствует)
      Кандидат:   2.12.0-1
      Таблица версий:
         2.12.0-1 500
            500 http://ru.archive.ubuntu.com/ubuntu focal/universe amd64 Packages
    php-phpdocumentor-reflection-common:
      Установлен: (отсутствует)
      Кандидат:   2.0.0-2build4
      Таблица версий:
         2.0.0-2build4 500
            500 http://ru.archive.ubuntu.com/ubuntu focal/universe amd64 Packages
    php7.4-common:
      Установлен: 7.4.3-4ubuntu2.12
      Кандидат:   7.4.3-4ubuntu2.12
      Таблица версий:
     *** 7.4.3-4ubuntu2.12 500
            500 http://ru.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
            500 http://ru.archive.ubuntu.com/ubuntu focal-security/main amd64 Packages
            100 /var/lib/dpkg/status
         7.4.3-4ubuntu1 500
            500 http://ru.archive.ubuntu.com/ubuntu focal/main amd64 Packages
    
    Упд. Глаз ваще замылился, нет на этом серванте зоопарка.
    Но не проблема развести.
    Не проблема поставить любую из андрейкиной ППА.
     
    Последнее редактирование: 29.07.22
  19. The Chief

    The Chief Активный участник

    11.696
    946
    Использовать чиcтый php? Мсье знает толк!
     
  20. 027

    027 Активный участник

    9.039
    2.885
    А надо грязный? О_о

    Просве/свя/свис/тите, плиз! (нужное подчеркнуть)
    Я ж не настоящий программист, я клаву нашел.

    И вообще я старенький, меня девушки не любят. ©
     
    Последнее редактирование: 29.07.22
  21. The Chief

    The Chief Активный участник

    11.696
    946
    Создайте там пустые базы через modutil (apt install libnss3-tools):

    Код:
    modutil -create -force [-dbdir <хранилище NSS>] , где
    <хранилище NSS> := [<тип базы данных>:]<каталог хранилища NSS>
    <тип базы данных> := dbm|sql , например:
    $modutil -create -force -dbdir "sql:/etc/pki/nssdb"
    Я не помню, какое хранилище хочет poppler. SQL — новый формат, можно и dbm попробовать.

    Для меня всегда было странным использование php вне веб-сервера.

    Переходите на proc_open().
     
    Последнее редактирование: 29.07.22
  22. 027

    027 Активный участник

    9.039
    2.885
    Гм. Язык, как язык. Вам же не кажется странным использование javascript вне браузера?
    Что мне это даст, кроме теоретической возможности избавиться от странной любви exec() к потоку standard error? Это только в консоли видно при отладке.
    Спасибо за совет. Если будет не лень хватит сил не одолеет отвращение это поковырять...
     
  23. The Chief

    The Chief Активный участник

    11.696
    946
    Вы удивитесь, но кажется. Я, конечно, крещусь, но не помогает.

    Нормальный контроль над потоками. Если это вам, конечно, нужно.
     
    027 нравится это.
  24. 027

    027 Активный участник

    9.039
    2.885
    Вполне пригоден для малой автоматизации (моя наиболее полезная деятельность) — и деже немалой, как показывает опыт некоторых IT-монстров.
    Код хорошо читается, в отличие от всяческих *sh. Минимум гребаной магии.

    Когда-от давно, буду я спросил совета по задаче малой автоматизации (внезапно вставшей передо мной, как приходящим админом в мелкие конторы) у знакомого админопрограммиста (или программистоадмина).
    Он мне сказал так: пиши на том, что знаешь!
    Вот я и кропаю на том, что более-менее понимаю в основах применения. Очень нравится простая и понятная организация человекочитаемого выхлопа. Это в моих задачах важно.

    Я как-то прошлым летом попробовал по мануалу vue применить систему однофайловых компонентов. Ну, чо, понаставил нодов-бабелей-гульпов-шмульпов, попытался сваять простенький слайдер.
    Волшебная система высрала мне трехмегабайтый js-файл для продакшена, меня стошнило, и больше я туда ни ногой.

    Господи, зачем? Мне тупо скриптовую обвязку с бизнес-логикой, которую я смогу разобрать позже, чем через месяц-другой, и понять, как оно работает.
    Баш — чудовищно примитивен, и портянки нечитаемые. Помучился ради привыкания, и хватит. Питон? Ради очередной частной задачи вникать в экосистему, чуть менее /[а-я]*ую/, чем жабоскриптская?
     
    Последнее редактирование: 29.07.22
  25. The Chief

    The Chief Активный участник

    11.696
    946
    Ну если вам надо вменяемо stdout/stderr разбирать, например. А если не нужно, так и не нужно.
     
  26. 027

    027 Активный участник

    9.039
    2.885
    Я просто спросил — чего это он в консоль серет :)
    Ну, несколько замысловато, да. :)

    ... питон такой питон, у него свое мнение об интерфейсе командной строки.
    К вопросу о.
     
    Последнее редактирование: 29.07.22
  27. The Chief

    The Chief Активный участник

    11.696
    946
    Зато он есть везде искаропки.
     
  28. 027

    027 Активный участник

    9.039
    2.885
    Это да, хуже только в браузерах. :)
     
  29. 027

    027 Активный участник

    9.039
    2.885
    А, не. Это я, находясь в сумеречном состоянии сознания, в одном из четырех вызовов exec() не прописал 2>/dev/null. :drug:
    Всё он перенаправляет, как надо.