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

Discussion in 'Софт' started by 027, Jul 27, 2022.

  1. 027

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

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

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

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

    12,476
    1,173
    Штамп визуализации ЭП не является формой.
     
  3. 027

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

    8,930
    2,847
    Ну, яхз, pdfinfo вот это пишет:
    Code:
    $ pdfinfo text_micro.pdf
    ...
    Form:           none
    ...
    
    Code:
    $ 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 Активный участник

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

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

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

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

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

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

    8,930
    2,847
    Уй, ля... Щас попробую в какое-нить облако, сто лет нафиг не нужно было...
     
  8. The Chief

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

    12,476
    1,173
  9. 027

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

    8,930
    2,847
    Твою мать, в яндекс-диске за порол деньги уже требуют...
    Ссылку дам в личку, смотрите.
     
  10. The Chief

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

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

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

    Потому что poppler тупой, как сибирский валенок.
     
    Last edited: Jul 27, 2022
  11. 027

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

    8,930
    2,847
    @The Chief, спасибо, посмотрю. Жаба, правда...
     
  12. The Chief

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

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

    Code:
    pdf2txt.py text_micro.sig.pdf  -o output.txt
     
    027 likes this.
  13. 027

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

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

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

    12,476
    1,173
    Я не в курсе, запустится ли pdfminer.six под PyPy, если уж говорить про скорость. Пробуйте.
     
  15. 027

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

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

    @The Chief, вы, случайно, не в курсе, на хрена жопплер-утилзам файрфокс?
    Code:
    Internal Error (0): couldn't find default Firefox Folder
    
     
    Last edited: Jul 29, 2022
  16. The Chief

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

    12,476
    1,173
    Случайно да. Оно там базу сертификатов ищет. :)

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

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

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

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

    12,476
    1,173
    Создайте пустую /etc/pki/nssdb и расслабьтесь.

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

    [​IMG]
     
    Last edited: Jul 29, 2022
  19. 027

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

    8,930
    2,847
    Голый cli.
    А апач не нужен, родной, он только лишнее топливо жрет. :) Да и вообще, каким боком тут хттп-сервер?
    чота нет
    Code:
    Internal Error (0): couldn't find default Firefox Folder
    дефолтная 7.4
    Code:
    $ php -v
    PHP 7.4.3 (cli) (built: Jun 13 2022 13:43:30) ( NTS )
    Code:
    $ 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
    
    Упд. Глаз ваще замылился, нет на этом серванте зоопарка.
    Но не проблема развести.
    Не проблема поставить любую из андрейкиной ППА.
     
    Last edited: Jul 29, 2022
  20. The Chief

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

    12,476
    1,173
    Использовать чиcтый php? Мсье знает толк!
     
  21. 027

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

    8,930
    2,847
    А надо грязный? О_о

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

    И вообще я старенький, меня девушки не любят. ©
     
    Last edited: Jul 29, 2022
  22. The Chief

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

    12,476
    1,173
    Создайте там пустые базы через modutil (apt install libnss3-tools):

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

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

    Переходите на proc_open().
     
    Last edited: Jul 29, 2022
  23. 027

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

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

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

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

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

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

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

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

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

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

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

    12,476
    1,173
    Ну если вам надо вменяемо stdout/stderr разбирать, например. А если не нужно, так и не нужно.
     
  27. 027

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

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

    ... питон такой питон, у него свое мнение об интерфейсе командной строки.
    К вопросу о.
     
    Last edited: Jul 29, 2022
  28. The Chief

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

    12,476
    1,173
    Зато он есть везде искаропки.
     
  29. 027

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

    8,930
    2,847
    Это да, хуже только в браузерах. :)
     
  30. 027

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

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