Может знает кто. Задача: автоматический анализ контента в подписанном ЭП PDF файле. Нужно четко определить, это голый скан или таки есть вменяемый текст. pdftotext из комплекта poppler-utils экспотрирует в одну кучу все текстовое содержимое, включая формы (в моем случае штамп с данными ЭП). Причем, их может быть больше, чем одна. Таким образом, в подписанном голом скане всегда какой-то текст есть. И текст этот зависит от фантазии сочинителя штампа. Как решить задачу приблизительно, основываясь на собранной статистике количества символов в штампике, понятно. Вопрос: есть ли утилита, умеющая выдергивать отдельно текст формы и основной текст? Чтобы уж наверняка.
Ну, яхз, pdfinfo вот это пишет: Код: $ pdfinfo text_micro.pdf ... Form: none ... Код: $ pdfinfo text_micro.sig.pdf ... Form: AcroForm ... Тестовые простейшие пдф-ки с короткой фразой, исходная и с подписью. Окуляр:
Да, это форма. Раньше не видел такого. PDFBox при экспорте в текст её пропускает. Код: java -jar pdfbox-app-3.0.0-alpha3.jar export:text -i=text_micro.sig.pdf -o=out.txt Ага, понял. Это не совсем форма, а именно подпись. Есть такое специальное поле у PDF. Потому что poppler тупой, как сибирский валенок.
@027, также с этим успешно работает pdfminer.six питонячий. Код: pdf2txt.py text_micro.sig.pdf -o output.txt
уж что нашел навскидку Скорость мне важна, прогонять надо пока что порядка 5к файлов, со временем будут только добавляться.
Прогнал сейчас свой мегапроверятор (на базе poppler-utils пока что) на кучке в 6300 файлов — 14 минут. Т.о., прогон всей нашей груды точно уложится в час. Годится. Это я несколько погорячился. Норот старые файлы переподписал, и они теперь новее 01.01.2021, так что попадают в выборку под проверку. Говорил же им, не надо, не надо!.. @The Chief, вы, случайно, не в курсе, на хрена жопплер-утилзам файрфокс? Код: Internal Error (0): couldn't find default Firefox Folder
Ужоснах. А не свистеть об этом в поток ошибок не судьба. Какой, в жпп, файрфокс на сервере? И ключ -nocert не влияет ни фига. А еще отчего-то пхп-шный exec() напрочь игнотирует 2>/dev/null. В консоли работает, в exec() не желает. Пока не сделана проверка на обновление файла после предыдущего прогона. Тупо не успеваю. Моск измучен подсчетом дней до отпуска.
Создайте пустую /etc/pki/nssdb и расслабьтесь. Апач? Версия php? Пользуйтесь proc_open(), exec() уже при динозаврах сдох и разложился.
Голый 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 Упд. Глаз ваще замылился, нет на этом серванте зоопарка. Но не проблема развести. Не проблема поставить любую из андрейкиной ППА.
А надо грязный? О_о Просве/свя/свис/тите, плиз! (нужное подчеркнуть) Я ж не настоящий программист, я клаву нашел. И вообще я старенький, меня девушки не любят. ©
Создайте там пустые базы через 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().
Гм. Язык, как язык. Вам же не кажется странным использование javascript вне браузера? Что мне это даст, кроме теоретической возможности избавиться от странной любви exec() к потоку standard error? Это только в консоли видно при отладке. Спасибо за совет. Если будет не лень хватит сил не одолеет отвращение это поковырять...
Вы удивитесь, но кажется. Я, конечно, крещусь, но не помогает. Нормальный контроль над потоками. Если это вам, конечно, нужно.
Вполне пригоден для малой автоматизации (моя наиболее полезная деятельность) — и деже немалой, как показывает опыт некоторых IT-монстров. Код хорошо читается, в отличие от всяческих *sh. Минимум гребаной магии. Когда-от давно, буду я спросил совета по задаче малой автоматизации (внезапно вставшей передо мной, как приходящим админом в мелкие конторы) у знакомого админопрограммиста (или программистоадмина). Он мне сказал так: пиши на том, что знаешь! Вот я и кропаю на том, что более-менее понимаю в основах применения. Очень нравится простая и понятная организация человекочитаемого выхлопа. Это в моих задачах важно. Я как-то прошлым летом попробовал по мануалу vue применить систему однофайловых компонентов. Ну, чо, понаставил нодов-бабелей-гульпов-шмульпов, попытался сваять простенький слайдер. Волшебная система высрала мне трехмегабайтый js-файл для продакшена, меня стошнило, и больше я туда ни ногой. Господи, зачем? Мне тупо скриптовую обвязку с бизнес-логикой, которую я смогу разобрать позже, чем через месяц-другой, и понять, как оно работает. Баш — чудовищно примитивен, и портянки нечитаемые. Помучился ради привыкания, и хватит. Питон? Ради очередной частной задачи вникать в экосистему, чуть менее /[а-я]*ую/, чем жабоскриптская?
Я просто спросил — чего это он в консоль серет Ну, несколько замысловато, да. ... питон такой питон, у него свое мнение об интерфейсе командной строки. К вопросу о.
А, не. Это я, находясь в сумеречном состоянии сознания, в одном из четырех вызовов exec() не прописал 2>/dev/null. Всё он перенаправляет, как надо.