Xpdf Tools

Xpdf Tools — локальный набор командных утилит Glyph & Cog для анализа и преобразования PDF: он извлекает текст, изображения, вложения, шрифты и метаданные, переводит страницы в PNG, PPM или PostScript и запускается из терминала без графического редактора. Пакет подходит для автоматизации, пакетной обработки и диагностики документов в Windows, macOS и Linux, но не выполняет OCR и не предназначен для ручного изменения содержимого страниц.

Под названием Xpdf Tools распространяются именно консольные программы pdfdetach, pdffonts, pdfimages, pdfinfo, pdftohtml, pdftopng, pdftoppm, pdftops и pdftotext. Это отдельная поставка от XpdfReader с оконным просмотрщиком; её также нельзя путать с научным пакетом xPDFsuite для анализа рентгеновских данных. Актуальная официальная ветка 4.06 выпущена для локального запуска, поэтому сервисом в браузере продукт не является.

Практическая ценность набора раскрывается не в меню, а в воспроизводимых командах: можно проверить свойства тысяч файлов, получить текст для полнотекстового поиска, выгрузить оригинальные картинки, обнаружить невстроенные шрифты или создать растровые копии страниц. Успех зависит от структуры конкретного PDF, корректных путей, выбранной кодировки и прав документа, поэтому ниже разобраны не только команды, но и ограничения, коды завершения и способы контроля результата.

Скачать Xpdf Tools

Оценка 9.7 Рекомендуем
  • Редактирование PDF
  • Русский интерфейс
  • Просто новичкам
Скачать бесплатно на Windows
Лучшая альтернатива
Xpdf Tools
Оценка 8.5
  • Только командная строка
  • Нет OCR для сканов
  • Не редактирует PDF
Скачать Xpdf Tools
Загрузка начнётся после нажатия

Что входит в Xpdf Tools

Xpdf Tools представляет собой согласованный комплект небольших исполняемых файлов, а не одну универсальную программу. Каждый компонент решает узкую задачу, принимает параметры командной строки и возвращает код завершения. Такая архитектура удобна там, где действие должно повторяться без ручного открытия документа: на сервере индексации, в конвейере публикации, при проверке фонда документов или в папке, куда регулярно поступают счета и технические отчёты.

В официальном бинарном наборе 4.06 перечислены девять основных инструментов. pdfinfo сообщает свойства документа; pdffonts анализирует шрифты; pdfimages извлекает встроенные растровые объекты; pdfdetach работает с файловыми вложениями. Конвертеры pdftotext, pdftohtml, pdftopng, pdftoppm и pdftops формируют текст, HTML, изображения или PostScript.

УтилитаРезультатТиповая задача
pdfinfoТекстовый отчётСтраницы, версия, шифрование, метаданные
pdffontsТаблица шрифтовПоиск невстроенных и проблемных гарнитур
pdfimagesНабор изображенийИзвлечение исходных растров
pdfdetachСписок или файлыСохранение приложенных документов
pdftotextTXT или stdoutИндексирование и поиск
pdftohtmlHTML и ресурсыПромежуточное веб-представление
pdftopngPNG по страницамПревью и контрольный рендеринг
pdftoppmPBM, PGM, PPMРастровый вывод для конвейеров
pdftopsPS или EPSPostScript-печать и обмен

Набор предназначен для чтения, анализа и преобразования. Он не переставляет страницы, не объединяет PDF, не рисует аннотации и не заменяет текстовые объекты в существующем документе. Для ручной правки нужен редактор; Xpdf Tools полезен на другом уровне — быстро выдаёт машинно обрабатываемые данные и хорошо встраивается в повторяемые процессы.

Интерфейс командной строки

Интерфейсом Xpdf Tools является строка команды и текстовый ответ. После запуска с ключом справки утилита печатает синтаксис, перечень опций и обозначения параметров. Пользователь заранее формулирует действие, указывает входной PDF и, когда требуется, имя результата. Команду можно сохранить в сценарии и без ручных изменений выполнить для любого количества файлов.

Сложность для новичка связана прежде всего с правилами оболочки. Путь с пробелами заключается в кавычки; текущая папка определяет место относительного результата; символы перенаправления обрабатывает оболочка, а не Xpdf. Один пропущенный знак приводит к сообщению о недоступном файле или записи не туда, куда ожидалось. Первый тест поэтому выполняют на копии небольшого PDF в отдельном каталоге.

Консольный подход даёт воспроизводимость. Команда в журнале показывает диапазон страниц, кодировку, путь и выбранную программу. Результат не зависит от фокуса окна, положения мыши и запомненных настроек диалога. Стандартный вывод позволяет передавать текст следующему процессу без промежуточного файла, если конкретная утилита поддерживает такое назначение.

Командная строка Xpdf Tools с pdftotext и pdfimages

На реальном экране терминала видна характерная модель работы: EXE находится в каталоге bin64, а ключ справки выводит версию, назначение и параметры. Отсутствие графической оболочки не является неполной установкой. Оконный просмотр PDF относится к отдельному продукту XpdfReader.

Установка в Windows

Официальная Windows-поставка распространяется ZIP-пакетом, а не мастером MSI. Установка сводится к распаковке каталога в постоянное место и выбору разрядности. Пакет 4.06 содержит отдельные каталоги для 32- и 64-разрядной Windows. На современной 64-разрядной системе используют bin64; bin32 нужен 32-разрядной ОС или специальному окружению.

Распаковывать комплект лучше не в временную папку загрузок, а в постоянный каталог инструментов или проекта. Запуск EXE прямо из окна распаковщика нежелателен: относительные пути и доступ к документации становятся непредсказуемыми. После распаковки проверяют версию и справку.

cd /d "C:\Tools\xpdf-tools-win-4.06\bin64"
pdfinfo.exe -v
pdftotext.exe -h

Если программа вызывается одной автоматизацией, безопаснее указывать полный путь к EXE. Для регулярной ручной работы каталог добавляют в пользовательский PATH. Уже открытые окна Command Prompt и PowerShell после изменения переменной нужно перезапустить. Команда where pdfinfo показывает фактический исполняемый файл и помогает заметить одноимённую утилиту Poppler.

Официальный пакет не устанавливает службу и не запускает фоновые процессы. Отсутствие мастера делает размещение простым, но не отменяет лицензионные условия при распространении. Для личного запуска достаточно распакованного комплекта; при включении в собственный продукт сохраняют документацию и выбирают подходящую лицензию.

Конфликты одноимённых команд

Имена pdftotext, pdfinfo, pdfimages и других инструментов используются также проектом Poppler. Если оба набора находятся в PATH, оболочка запускает первый найденный. В результате список опций, версия и качество преобразования могут отличаться, хотя команда выглядит одинаково. Надёжная проверка состоит из полного пути, вывода -v и записи версии в журнал.

set "XPDF=C:\Tools\xpdf-tools-win-4.06\bin64"
"%XPDF%\pdfinfo.exe" "D:\Docs\report.pdf"

Полный путь особенно важен в планировщике задач, службе и редакторе автоматизации, где PATH отличается от интерактивного терминала. Отдельно проверяют архитектуру: ошибка запуска 64-разрядного файла на 32-разрядной системе возникает до чтения PDF и не связана с документом.

Установка в macOS и Linux

Официальные сборки для macOS и Linux также поставляются сжатыми пакетами. После распаковки пользователь получает бинарники и документацию. Программу можно запускать непосредственно через относительный путь либо разместить в каталоге из PATH. На Unix-подобных системах файл должен иметь право исполнения, иначе оболочка сообщит об отказе до обработки PDF.

В macOS копирование в системный или локальный каталог может потребовать административных прав. Для одного проекта проще оставить комплект в пользовательской папке и указывать полный путь. На Apple Silicon учитывают архитектуру сборки и правила безопасности конкретной версии macOS. Запрос подтверждения запуска относится к Gatekeeper, а не к интерфейсу Xpdf.

В Linux состав дистрибутивных пакетов различается. Где-то xpdf включает просмотрщик и утилиты, где-то инструменты вынесены отдельно или заменены Poppler. Если нужна именно реализация Glyph & Cog 4.06, официальный пакет и вывод -v однозначнее одного имени пакета.

Распакованный пакет Xpdf Tools для macOS

Содержимое распакованного набора показывает каталоги бинарников, документацию, README, перечень изменений и лицензии. Документация из комплекта соответствует конкретной версии, поэтому при спорном ключе она надёжнее случайной инструкции для старого Xpdf или Poppler.

Автоматизация установки бинарников Xpdf Tools из bin64

Проверка из Terminal и Bash

Команды command -v pdfinfo и which pdfinfo показывают найденный путь, а pdfinfo -v идентифицирует реализацию. Сообщение command not found означает проблему PATH, имени или права исполнения — PDF ещё не читался.

cd "$HOME/Tools/xpdf-tools/bin64"
./pdfinfo -v
./pdftotext -h
./pdfinfo "$HOME/Documents/sample.pdf"

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

Общий синтаксис

Большинство утилит строится по схеме опции — исходный PDF — имя или корень результата. pdfinfo печатает отчёт; pdftotext принимает имя TXT; pdftopng получает корень, к которому добавляются номера страниц; pdfimages создаёт серию файлов. Перед автоматизацией команду запускают на одном документе и изучают точное именование.

Ключи чувствительны к регистру, а значения передаются отдельными аргументами. Диапазон страниц, разрешение, пароль и конфигурация указываются до имени PDF. Общие опции включают первую и последнюю страницу, пользовательский или владельческий пароль, альтернативный файл конфигурации, тихий режим, версию и справку. Точный набор сверяют для каждой программы.

# PowerShell
$xpdf = 'C:\Tools\xpdf-tools-win-4.06\bin64\pdfinfo.exe'
& $xpdf 'D:\PDF\annual report.pdf'

# Bash
xpdf="$HOME/Tools/xpdf-tools/bin64/pdfinfo"
"$xpdf" "$HOME/PDF/annual report.pdf"

Если аргументом является корень имени, не следует без проверки добавлять расширение: программа может сформировать двойной суффикс. Для серии результатов заранее создают отдельную папку на документ, иначе файлы разных запусков смешиваются или перезаписываются.

pdftotext: извлечение текстового слоя

pdftotext — наиболее востребованный компонент Xpdf Tools. Он читает текстовые объекты PDF и записывает символы в обычный текст. Это не распознавание изображения: программа использует уже существующий текстовый слой, таблицы сопоставления символов и геометрию размещения. Цифровой PDF из офисной программы обычно даёт полезный результат, а скан без OCR — пустой или почти пустой файл.

Простейший вызов состоит из исходного и выходного имени. В автоматизации результат лучше указывать явно, чтобы не зависеть от рабочей папки. Специальное имя - в поддерживаемом синтаксисе направляет текст в stdout и позволяет передать его следующей команде.

pdftotext "report.pdf" "report.txt"
pdftotext -layout "invoice.pdf" "invoice-layout.txt"
pdftotext -f 3 -l 7 "manual.pdf" "chapter.txt"

PDF хранит не абзацы и колонки, а команды рисования текста в координатах страницы. Xpdf восстанавливает порядок чтения эвристически. На одноколоночной странице с нормальным Unicode-сопоставлением результат близок к оригиналу. В газетной верстке, форме, таблице или документе с повернутыми подписями порядок может оказаться неожиданным. Это следствие модели PDF, а не простая ошибка экспорта.

Режимы расположения текста

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

В Xpdf имеются режимы, ориентированные на табличную, фиксированную или сырую выдачу; их доступность и точное поведение проверяют по справке 4.06. Сырой порядок ближе к последовательности строк в потоке содержимого и полезен для диагностики, но обычно хуже читается человеком. Фиксированный шаг помогает отчётам терминального типа.

Практический выбор делается сравнением вариантов одного проблемного листа. Для регулярного выражения удобнее естественный поток, для позиционной таблицы — -layout, для расследования порядка объектов — сырой режим. Ни один вариант не гарантирует семантическую реконструкцию, поэтому критические данные валидируют.

Автоматизация извлечения строки через pdftotext

На рабочем сценарии путь выбранного PDF передаётся в pdftotext -layout, результат сохраняется в переменную, а затем обрабатывается регулярным выражением. Xpdf отвечает за извлечение; поиск нужного номера и отображение выполняет внешняя система автоматизации.

Кодировка и невидимые символы

Выходная кодировка задаётся параметрами утилиты и доступными таблицами. Для русскоязычного процесса обычно выбирают Unicode-кодировку, совместимую со следующим редактором или скриптом. Если текст выглядит повреждённым, сначала проверяют кодировку просмотра: корректный UTF-8, открытый как однобайтовая кодовая страница, показывает неверные знаки, хотя байты сформированы правильно.

Другая причина — отсутствие или ошибка карты ToUnicode внутри PDF. Документ визуально отображается, потому что шрифт содержит глифы, но связь глиф — символ отсутствует. Тогда копирование из просмотрщика и pdftotext дают одинаково бессмысленный результат. Смена кодировки не восстановит данные; потребуется OCR, альтернативный парсер или ручное сопоставление.

Переводы строк могут быть Unix-, Windows- или классического Mac-типа. Современные редакторы обычно понимают варианты, но старые импортёры способны воспринимать весь файл как одну строку. Перед массовым запуском результат проверяют техническим редактором.

Разрывы страниц часто представлены символом form feed. Он сохраняет границы листов, но мешает системам, ожидающим только обычные переводы строк. Отключение разрывов подходит полнотекстовому индексу, однако лишает точной привязки к странице. Выбор определяется дальнейшей задачей.

Пароли, диапазоны и stdout

Для защищённых документов инструменты принимают пользовательский и владельческий пароли. Пароль как аргумент может попасть в историю оболочки, журнал или список процессов. В рабочей среде его передают через защищённый механизм вызывающего приложения и не хранят в общем BAT-файле.

Параметры первой и последней страницы позволяют не читать весь документ. Нумерация начинается с единицы. Перед обработкой неизвестного файла удобно получить число страниц через pdfinfo и проверить границы. Ошибочный диапазон может дать пустой результат или код отказа.

Стандартный вывод полезен в конвейере, но данные нужно отделять от stderr. Тихий режим подавляет часть сообщений, однако код завершения остаётся обязательным. Непустой stdout не является единственным признаком успеха, а пустой результат может быть нормальным для скана.

Вызов pdftotext для выбранной страницы

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

Рабочие процессы с pdftotext

Для локального поиска в фонде документов разумный конвейер состоит из проверки PDF, извлечения текста во временную папку, индексирования TXT и сохранения связи с исходным именем. Сам PDF остаётся неизменным. Если документ обновился, текст пересоздают; хэш или время изменения предотвращает использование устаревшего индекса.

При обработке счетов -layout сохраняет расстояния между полями, после чего регулярное выражение ищет номер, дату и сумму. Надёжность повышается, если сначала определить поставщика и применять отдельный шаблон для каждого макета. Универсальный шаблон нестабилен: визуально похожие формы имеют разный порядок текстовых объектов.

Для корпуса обычно удаляют повторяющиеся колонтитулы, нормализуют переносы слов и сохраняют границы страниц. Эти действия выполняются после Xpdf. Сырой TXT держат рядом с очищенным, чтобы отличать ошибку парсера от ошибки собственного фильтра.

Пакетное преобразование PDF через pdftotext

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

pdfinfo: свойства документа

pdfinfo печатает информационный словарь и дополнительные технические сведения. В типичном отчёте присутствуют заголовок, автор, тема, ключевые слова, даты, количество страниц, размер страницы, состояние шифрования и версия PDF. Состав зависит от документа: отсутствие строки не означает сбой, если поле не записано.

Утилита служит первым фильтром перед дорогой операцией. Количество страниц помогает оценить объём рендеринга, шифрование — понять необходимость пароля, размер страницы — обнаружить плакат или ошибочный формат. Но отчёт не проверяет смысл текста и не гарантирует полную структурную корректность.

pdfinfo "contract.pdf"
pdfinfo -f 1 -l 5 "manual.pdf"
pdfinfo -upw "пароль" "protected.pdf"

При автоматизации нельзя полагаться на фиксированное число строк: версии и документы добавляют поля. Скрипт ищет конкретные подписи, учитывает пустые значения и сохраняет исходный вывод. Xpdf Tools не делает основной отчёт JSON, поэтому структурирование выполняет внешняя программа.

Даты и авторские поля являются заявленными метаданными. Они могут быть неполными, ошибочными или унаследованными от шаблона. Для юридической проверки нужны подписи, хэши и независимые журналы, которых pdfinfo не создаёт.

pdffonts: диагностика шрифтов

pdffonts перечисляет шрифты выбранных страниц. Таблица показывает имя, тип, факт встраивания, подмножество, кодировку или Unicode-сопоставление и идентификаторы объектов. Эти сведения объясняют неправильное извлечение текста и различия отображения на другой системе.

Встроенный шрифт путешествует вместе с PDF; подмножество содержит только использованные глифы. Невстроенная гарнитура может быть заменена при просмотре или печати. Для долгого хранения важна политика стандарта и качество встраивания, а не просто число строк в отчёте.

pdffonts "brochure.pdf"
pdffonts -f 10 -l 20 "book.pdf"

Если pdftotext выдаёт неправильные буквы, наличие Unicode-сопоставления — один из диагностических признаков. Однако карта не гарантирует правильный порядок чтения, а её отсутствие не всегда делает извлечение невозможным.

Утилита ничего не исправляет. Встраивание шрифтов выполняется повторным экспортом из исходной программы, редактором или допечатным процессором. В автоматизации отчёт используется для предупреждения или карантина.

pdfimages: извлечение растров

pdfimages извлекает растровые объекты из PDF. Это отличается от снимка страницы. Встроенный JPEG можно сохранить близко к исходному потоку без повторного рендеринга; текст, вектор, фон и маски не объединяются в один кадр. Для точного вида страницы применяют pdftopng или pdftoppm.

Команда получает PDF и корень имён. Для нескольких объектов создаётся последовательность. Формат зависит от потока и ключей: возможен исходный JPEG, сырые данные или преобразованный растр. Маски и альфа-компоненты могут появиться отдельно, поэтому количество файлов не равно числу видимых иллюстраций.

pdfimages -list "catalog.pdf"
pdfimages -j "catalog.pdf" "out/image"
pdfimages -f 5 -l 8 -png "report.pdf" "out/page-image"

Режим списка показывает размеры, цветовое пространство, глубину, сжатие и страницу. Если скан хранит одну полноформатную картинку на лист, извлечение часто даёт хороший материал для OCR без повторной растеризации. Поворот, обрезка и цветовые преобразования страницы при этом могут не применяться.

Иллюстрация может быть собрана из фрагментов или закрыта маской, а векторный рисунок вообще не является растровым объектом. Отсутствие ожидаемого PNG не всегда ошибка: на странице могло не быть самостоятельной картинки.

pdftopng и pdftoppm: рендеринг страниц

pdftopng превращает выбранные страницы в PNG. Это полноценный рендеринг: текст, вектор, растры и эффекты сводятся в кадр. Результат подходит для превью, визуального контроля, публикации миниатюр и передачи в систему компьютерного зрения. Номера страниц добавляются к корню имени.

Качество и размер зависят от DPI. Удвоение разрешения примерно в четыре раза увеличивает площадь растра и расход памяти. Для экрана достаточно умеренного значения; для мелкого текста или OCR требуется большее. Оптимум выбирают по документу, а не по максимальному числу.

pdftopng -r 150 "manual.pdf" "preview/page"
pdftopng -f 12 -l 12 -r 300 "drawing.pdf" "render/drawing"

pdftoppm решает сходную задачу, но основной вывод — PBM, PGM и PPM для монохромных, серых и цветных растров. Форматы просты для технических конвейеров, хотя занимают больше места, чем сжатый PNG. Дополнительные параметры формата и сглаживания проверяют по справке сборки.

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

Имена и объём серии

Обе утилиты создают файл на страницу. Папка в корне имени должна существовать. В пакетной работе создают отдельный каталог для каждого PDF, иначе одинаковые имена смешиваются. Перед рендерингом через pdfinfo узнают число и размер страниц и ограничивают диапазон.

Плакат при 300 DPI может потребовать сотни мегабайт. После завершения сверяют ожидаемое количество кадров и ненулевой размер каждого. Для миниатюр рендерят с разумным разрешением, затем уменьшают внешним инструментом; увеличение маленького PNG не возвращает деталей.

pdftops: преобразование в PostScript

pdftops читает PDF и создаёт PostScript, включая уровни, поддерживаемые опциями, а также EPS для подходящих задач. Инструмент востребован в печатных процессах и системах, которые принимают PS, но не современный PDF. Для обычного просмотра он редко нужен.

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

pdftops "document.pdf" "document.ps"
pdftops -f 2 -l 2 "page.pdf" "page.ps"

EPS имеет иные ожидания, чем многостраничный PS. Нельзя считать любой PDF корректной основой одного EPS без выбора страницы и проверки ограничивающей рамки. Если современная очередь печати принимает PDF, прямой процесс обычно сохраняет больше свойств.

pdftohtml: HTML-представление

pdftohtml преобразует PDF в HTML и сопутствующие ресурсы. Это не восстановление исходного веб-документа: PDF хранит координаты страницы, а HTML — поток и стили. Поэтому результат может содержать позиционированные элементы, отдельные картинки и технические файлы. Он полезен как промежуточное представление, но редко готов к публикации.

В простом одноколоночном документе получается основа, доступная поиску. Сложная верстка даёт неудобный порядок элементов. Таблицы не обязаны превращаться в семантические теги: часто это набор размещённых фрагментов.

pdftohtml "manual.pdf" "manual.html"
pdftohtml -f 4 -l 9 "report.pdf" "section.html"

Выход размещают в пустой папке и переносят комплектом. Копирование только главного HTML теряет изображения и стили. Для доступного веб-материала требуется ручная реконструкция заголовков, порядка чтения, подписей и адаптивных таблиц.

pdfdetach: файловые вложения

PDF способен содержать прикреплённые таблицы, XML, изображения и другие документы. pdfdetach перечисляет вложения и сохраняет выбранный файл или весь набор. Это полезно для электронных счетов, инженерных пакетов и комплектов с машинными данными.

Сначала запускают список. Выходной каталог изолируют, а имена вложений считают недоверенными: автоматизация предотвращает выход за разрешённую папку, перезапись и автоматический запуск. После извлечения тип проверяют по сигнатуре, а файл — средствами безопасности организации.

pdfdetach -list "package.pdf"
pdfdetach -save 1 -o "attachment.bin" "package.pdf"
pdfdetach -saveall -o "attachments" "package.pdf"

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

xpdfrc: общий файл конфигурации

Утилиты читают общий xpdfrc. В Unix-подобных системах проверяется пользовательский ~/.xpdfrc, затем системное расположение, зависящее от сборки. В Windows файл называется xpdfrc без точки и расширения и лежит рядом с EXE. Ключ -cfg выбирает альтернативный файл.

Формат построчный: пустые строки и комментарии игнорируются, значения чувствительны к регистру, пути с пробелами заключаются в кавычки. Конфигурация управляет шрифтами, кодировками, сопоставлением символов и другими общими параметрами. Ошибочный путь к таблице порождает Config Error ещё до конверсии.

pdftotext -cfg "C:\Project\xpdfrc" -enc UTF-8 "input.pdf" "output.txt"

Для переносимого проекта конфигурацию хранят рядом со сценарием и передают явно. Глобальный файл не меняют ради одного документа: правка затронет все утилиты. После изменения проверяют контрольные PDF с кириллицей, латиницей, таблицами и встроенными шрифтами.

Пакетная обработка в PowerShell

PowerShell перечисляет файлы как объекты, не разбивая имена по пробелам, и предоставляет код внешней программы через $LASTEXITCODE. Базовый сценарий создаёт отдельную папку результата, не перезаписывает оригиналы и записывает ошибку каждого документа. Перед запуском на всём фонде его проверяют на тестовом наборе.

$tool = 'C:\Tools\xpdf-tools-win-4.06\bin64\pdftotext.exe'
$source = 'D:\IncomingPDF'
$target = 'D:\TextIndex'
New-Item -ItemType Directory -Path $target -Force | Out-Null

Get-ChildItem -LiteralPath $source -Filter *.pdf -File | ForEach-Object {
    $out = Join-Path $target ($_.BaseName + '.txt')
    & $tool -layout -enc UTF-8 $_.FullName $out
    if ($LASTEXITCODE -ne 0) {
        Write-Warning "Ошибка $LASTEXITCODE: $($_.FullName)"
    }
}

В производственном варианте учитывают одинаковые базовые имена из разных каталогов, существующий TXT и частично записанный результат. Надёжная схема пишет во временное имя, проверяет код и размер, затем переименовывает. Если процесс оборвался, старый готовый файл остаётся целым.

Пароль не включают в журнал. Для входа от внешних пользователей проверяют число страниц, свободное место и допустимое время. PowerShell может вызвать pdfinfo, отклонить чрезмерный документ и только затем запускать конверсию. Тайм-аут задаётся вызывающему процессу.

Расширенный пакетный процесс pdftotext

Реальная автоматизация включает выбор файла, вызов Xpdf, фильтрацию, формирование имени и запись. Разделение шагов облегчает диагностику. Если TXT пуст, отдельно проверяют Xpdf; если команда успешна, ищут проблему в регулярном выражении или условии записи.

Пакетная обработка в Bash

В Bash безопасный цикл читает имена с нулевым разделителем. Конструкция for f in $(find ...) ломает пути с пробелами и переводами строк, поэтому для массового фонда не подходит. Результат сначала создают временно и перемещают только после успеха.

tool="$HOME/Tools/xpdf-tools/bin64/pdftotext"
source_dir="$HOME/incoming-pdf"
out_dir="$HOME/text-index"
mkdir -p "$out_dir"

find "$source_dir" -maxdepth 1 -type f -name '*.pdf' -print0 |
while IFS= read -r -d '' file; do
  base=$(basename "${file%.pdf}")
  tmp="$out_dir/$base.txt.tmp"
  out="$out_dir/$base.txt"
  if "$tool" -layout -enc UTF-8 "$file" "$tmp"; then
    mv -f "$tmp" "$out"
  else
    code=$?
    rm -f "$tmp"
    printf 'Ошибка %s: %s\n' "$code" "$file" >&2
  fi
done

Несколько тяжёлых рендеров нельзя запускать без ограничения параллелизма. Для pdfinfo умеренная параллельность ускоряет работу, но pdftopng на больших листах быстро расходует память. Число процессов выбирают по измерениям контрольного набора.

stdout отделяют от stderr. В длинном конвейере включают контроль всех стадий, иначе успешный последний фильтр скроет сбой Xpdf. Для больших текстов используют потоковое чтение или файл, а не собирают весь вывод в памяти.

Интеграция с приложениями

Xpdf Tools часто вызывается как внешний процесс из Python, PHP, Java, .NET, AppleScript и систем автоматизации. Это не библиотечный API: приложение формирует список аргументов, запускает бинарник, читает stdout и stderr, ждёт завершения и проверяет код. Передавать команду одной строкой через shell нежелательно из-за кавычек и риска внедрения.

Безопасный вызов использует массив аргументов и отключённую оболочку. Имена файлов передаются отдельными значениями, а не склеиваются с пользовательским вводом. Для процесса задают тайм-аут, предел размера результата и рабочую папку. Недоверенный PDF обрабатывают с минимальными правами.

Интеграция pdftotext с выбранным PDF

Интеграционный экран показывает, что путь к выбранному файлу приходит из переменной, а Xpdf является одним действием цепочки. Ошибка command not found в автоматизаторе часто вызвана его собственным PATH. Решение — полный путь к pdftotext или явная настройка окружения.

При обновлении версии прогоняют регрессионный набор. Даже при неизменном синтаксисе порядок текста, рендер редкого шрифта или сообщение об ошибке может отличаться. Версию бинарника сохраняют рядом с результатом.

Поддерживаемые форматы и границы конвертации

Общим входом является PDF. Набор не является универсальным конвертером DOCX, ODT, EPUB или изображений в PDF. Если исходник другого типа, его сначала обрабатывает соответствующая программа. Каждый инструмент работает со своим слоем PDF — текстом, растрами, вложениями, шрифтами, метаданными или отображением страницы.

Выходы распределены по назначению: текст, HTML, PNG, семейство Netpbm, PostScript/EPS, исходные изображения, вложенные файлы и отчёты. Нельзя выбрать произвольный формат для любой команды. pdfinfo не создаёт новый PDF, а pdftopng не выдаёт редактируемый текст.

Результат бывает множественным. Рендер и извлечение картинок создают серии, HTML сопровождается ресурсами, вложения сохраняются со своими именами. Автоматизация должна собирать весь набор и не предполагать один файл на вход.

Версия PDF в метаданных не гарантирует отсутствие расширений, повреждений или редких фильтров. Для необычного документа проверяют фактический результат Xpdf 4.06 и при необходимости сравнивают с альтернативным движком.

Ограничения Xpdf Tools

Первое ограничение — отсутствие графического интерфейса. Пользователь не видит страницу до запуска и не выбирает область мышью. Все параметры задаются текстом, поэтому требуется понимание путей, оболочки и именования результата. Для одной ручной операции редактор быстрее; для сотен однотипных файлов команда обычно эффективнее.

Второе — отсутствие OCR. Изображение букв не становится текстом. pdfimages и pdftopng готовят растр для отдельной системы распознавания, но языковая модель и добавление текстового слоя находятся вне пакета.

Третье — отсутствие редактирования существующего PDF. Набор не меняет слова, не удаляет конфиденциальный объект, не переставляет листы и не сохраняет аннотацию. Преобразование в HTML или TXT и обратная сборка создаёт другой документ и обычно меняет верстку.

Четвёртое — зависимость от внутренней структуры. Визуально идеальный PDF может иметь неправильный порядок чтения, отсутствующую Unicode-карту и фрагментированные изображения. Xpdf применяет алгоритмы к объектам страницы и не знает авторского смысла.

Пятое — пересечение имён с Poppler. Всегда фиксируют полный путь и версию, когда результат участвует в рабочем процессе.

Сканированные документы и OCR

Сканированный PDF обычно содержит картинку на каждой странице. Если сканер не добавил скрытый текстовый слой, pdftotext не найдёт слов. Быстрый тест сочетает размер TXT, возможность выделить текст в просмотрщике и отчёт pdfimages -list. Пустой текст при крупных растрах означает необходимость OCR.

Конвейер состоит из рендеринга или извлечения, распознавания и проверки. pdfimages предпочтителен, когда лист хранится одним исходным растром без сложных трансформаций. pdftopng нужен для точного вида страницы с поворотом, фоном и несколькими слоями.

Разрешение выбирают по высоте букв и качеству скана. Слишком низкое ухудшает распознавание, слишком высокое увеличивает время и память без новых деталей. Оригинальный PDF сохраняют, потому что OCR может ошибаться.

Если текстовый слой уже есть, повторное распознавание способно создать дубли и изменить порядок. Сначала извлекают существующий текст и направляют на OCR только действительно пустые страницы.

Зашифрованные PDF и разрешения

PDF может иметь пользовательский пароль открытия и владельческий пароль разрешений. Многие команды принимают соответствующие параметры. Без правильного секрета документ не откроется либо операция завершится кодом прав. Поведение официальной реализации учитывает ограничения PDF.

Техническая возможность передать пароль не означает право извлекать содержание. Пользователь должен иметь законное разрешение. Постоянную ошибку пароля не отправляют в бесконечный автоматический повтор.

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

TXT и извлечённые вложения могут раскрывать больше данных, чем исходный просмотрщик. Папка результата должна иметь не менее строгие права, чем исходник.

Производительность и большие файлы

Xpdf запускает отдельный процесс на каждую команду. Накладные расходы малы для крупного документа, но заметны для десятков тысяч одностраничных файлов. Ускорение достигается умеренной параллельностью, кэшированием и отказом от повторной обработки неизменившихся PDF.

Рендеринг потребляет больше ресурсов, чем метаданные. Размер несжатого цветного растра зависит от ширины, высоты и каналов; высокий DPI на большой странице быстро увеличивает память. Диапазон страниц и предварительное чтение размеров защищают сервер от неожиданной нагрузки.

Извлечение JPEG через pdfimages бывает быстрее рендера, но это другой результат. Для визуального превью нужен рендер, для исходной фотографии — извлечение объекта. Заменять одно другим только ради скорости нельзя.

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

Безопасность при обработке чужих PDF

PDF — сложный контейнер, и парсер работает с недоверенными данными. Даже актуальную версию запускают в изолированной учётной записи, контейнере или песочнице с минимальным доступом. Утилите нужны чтение входной папки и запись в выделенный каталог, а не доступ ко всему домашнему профилю.

Процесс ограничивают по времени, памяти, числу файлов и объёму вывода. Специально сформированный документ способен создать много изображений или вложений. Имена нормализуют, тип проверяют по сигнатуре, а извлечённый файл не запускают автоматически.

Обновление движка важно для исправления парсера. В долгоживущем сервисе фиксируют версию и периодически сверяют её с официальной. Если обновление задержано, усиливают изоляцию входящих файлов.

Журналы не содержат пароли и полный конфиденциальный текст. Для диагностики достаточно хэша входа, версии, кода и ограниченного stderr. Результаты хранят по той же политике, что оригинал.

Коды завершения

Утилиты Xpdf используют коды завершения: 0 означает успех, 1 — ошибку открытия PDF, 2 — ошибку выходного файла, 3 — проблему разрешений PDF, 99 — другую ошибку. Текст stderr добавляет подробности.

КодЧто проверятьДействие
0Размер и содержание результатаПродолжить после валидации
1Путь, доступ, сигнатуру, повреждениеИсправить вход или поместить в карантин
2Папку, права, место, имяСоздать каталог или сменить путь
3Пароль и право на операциюПолучить разрешённые данные доступа
99stderr, конфигурацию, редкую структуруПовторить тест и сравнить движок

Код 0 не гарантирует полезный текст: скан без слоя корректно создаёт пустой TXT. После успеха проверяют ожидаемый тип — размер, число страниц-картинок, обязательное поле или открываемость HTML. Это бизнес-валидация поверх Xpdf.

В Windows код доступен через %ERRORLEVEL% или $LASTEXITCODE, в Bash — через $? сразу после команды. Другая программа перезапишет значение, поэтому его читают немедленно.

Ошибка открытия PDF

Путь с пробелами без кавычек превращается в несколько аргументов. Затем проверяют существование, права чтения и сигнатуру: расширение .pdf может скрывать HTML-страницу или другой формат. Если просмотрщик открывает файл, а Xpdf отказывает, сравнивают актуальную 4.06 и альтернативный движок.

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

Ошибка создания результата

Папка должна существовать, если утилита не создаёт её сама. Проверяют права, место, допустимость имени и блокировку открытым приложением. Для серии изображений проверяют весь каталог, а не один файл.

Временный результат лучше создавать на том же диске и переименовывать после успеха. Это снижает риск частичной записи и упрощает восстановление после сбоя.

Config Error

Сообщение о невозможности открыть nameToUnicode, карту кодировки или шрифт означает устаревший путь в конфигурации. Частая причина — старый домашний .xpdfrc. Запуск с чистым файлом через -cfg подтверждает диагноз.

Не нужно просто скрывать ошибку тихим режимом: неверная карта способна незаметно испортить текст. После исправления проверяют документ на том языке, для которого была настроена таблица.

Почему текст получается неправильным

Перемешанные колонки связаны с порядком текстовых блоков. Сравнивают обычный режим, -layout и другие доступные варианты. Для поиска отдельного номера иногда достаточно извлечь страницу и применить шаблон, не восстанавливая идеальную верстку.

Неправильные буквы указывают на кодировку просмотра или плохое сопоставление глифов. Файл открывают как UTF-8, затем изучают pdffonts. Если копирование из нескольких просмотрщиков даёт те же знаки, проблема находится внутри PDF.

Пропавшие слова могут быть контурами или частью изображения. pdftopng покажет их визуально, но не превратит в символы. Для таких областей нужен OCR.

Лишние пробелы возникают из координатного восстановления. В -layout они могут обозначать колонки. Не удаляйте их до решения, нужна ли позиционная структура.

Фильтрация результата pdftotext

Фильтрация после извлечения должна рассматривать отсутствие совпадения как нормальный случай, а не подставлять случайное число. Сценарий хранит исходный текст, проверяет шаблон и только затем переименовывает документ.

Почему изображения отличаются от вида страницы

PDF может размещать один растр несколько раз, накладывать маску, поворачивать, обрезать и окрашивать его графическими операторами. pdfimages извлекает объект, а не снимок композиции. Поэтому исходник бывает повернут, разделён на фон и маску или выглядит без профиля.

Для точного вида страницы используют рендер. Для исходного JPEG без повторной потери — извлечение. Это разные задачи, и сравнивать их качество как один метод неправильно.

Маленькие объекты бывают масками, узорами или значками. Список помогает фильтровать по размеру и странице, но нельзя автоматически удалять всё ниже произвольного порога, если документ содержит штрихкоды или пиктограммы.

Почему HTML требует доработки

PDF ориентирован на фиксированную страницу, а HTML — на поток. Чтобы сохранить положение, конвертер использует координаты, стили и фрагменты. Чем сложнее верстка, тем менее семантичным получается результат.

Для публикации HTML Xpdf рассматривают как сырьё: извлекают текст и картинки и заново строят логическую структуру. Автоматический файл подходит для поиска или миграции, но доступность и адаптивность требуют редактора.

Если нужен только текст, pdftotext проще. Для визуальной копии PNG предсказуемее. pdftohtml выбирают, когда одновременно нужны текстовые элементы и веб-обёртка.

Совместимость и версия 4.06

Официальная версия Xpdf Tools 4.06 доступна отдельными пакетами для Windows, macOS и Linux. Windows-комплект содержит 32- и 64-разрядные бинарники; выбор делается по каталогу. Пакет запускается локально и не требует браузера. Поддержку конкретного старого выпуска ОС следует проверять на целевой системе, а не выводить только из общего слова Windows или macOS.

Версию подтверждают ключом -v. Имя пакета можно переименовать, а в PATH способен находиться другой бинарник. Для воспроизводимого процесса сохраняют SHA-256 дистрибутива, полный путь, архитектуру и вывод версии. Такой набор данных позволяет понять, чем создан старый результат.

При переходе между ветками нельзя слепо копировать прежний xpdfrc. Формат узнаваем, но пути к шрифтам и языковым данным устаревают. Сравнивают документацию поставки и переносят только нужные строки. После обновления прогоняют документы с кириллицей, таблицами, масками и шифрованием.

Сценарий должен проверять наличие требуемой опции при развёртывании. Это особенно важно, когда Windows использует Xpdf, а Linux — одноимённые команды Poppler. Похожее имя не означает полную совместимость ключей и вывода.

Лицензия и распространение

Xpdf предлагается по GPL и коммерческой лицензии разработчика. Конечный пользователь может запускать официальный бинарный пакет, но распространение в составе закрытого продукта требует выбора условий. Слово бесплатно на странице каталога не отвечает на вопрос о встраивании и передаче третьим лицам.

При распространении неизменённых бинарников сохраняют лицензионные тексты и выполняют требования выбранной GPL-версии. Если код Xpdf встраивается, модифицируется или поставляется в закрытом решении, может понадобиться коммерческая лицензия. Решение зависит от способа распространения, а не от того, вызывается ли EXE внешним процессом.

Для внутреннего использования ведут учёт компонента, версии, хэша и исходного пакета. Это упрощает аудит и обновление. Юридические условия следует оценивать применительно к конкретному продукту; техническая статья не заменяет заключение специалиста.

Отличие от XpdfReader и одноимённых продуктов

XpdfReader — отдельное графическое приложение для просмотра PDF. Оно имеет окно, навигацию и команды чтения. Xpdf Tools — консольные анализаторы и конвертеры. Скриншоты просмотрщика нельзя считать интерфейсом Tools, а наличие XpdfReader не означает, что он включён в пакет инструментов.

Xpdf иногда обозначает весь проект или движок, поэтому каталоги описывают продукт шире конкретного ZIP. При загрузке проверяют раздел command line tools и имя пакета xpdf-tools-…. Поставка просмотрщика имеет другое имя и назначение.

xPDFsuite относится к научной обработке pair distribution function в рентгеновской дифракции. Совпадение букв PDF не связано с Portable Document Format. У него другие разработчики, данные, интерфейс и задачи.

xpdf-utils может быть историческим или дистрибутивным названием инструментов. poppler-utils содержит похожие команды, поскольку Poppler исторически связан с Xpdf, но это другая реализация. Точную идентичность определяют разработчик, путь и вывод версии.

Сравнение Xpdf Tools с аналогами

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

ПрограммаЛучше подходит дляГлавное ограничение
Xpdf ToolsПакетного извлечения текста, изображений, свойств и рендерингаНет графического редактора и OCR
PDF CommanderРучного редактирования, сборки и оформления PDF в понятном окнеНе заменяет серверный набор CLI
Poppler utilitiesLinux-конвейеров и широкого набора родственных командОдноимённые ключи не всегда совпадают с Xpdf
MuPDF и mutoolБыстрого рендеринга, проверки и операций с несколькими форматамиДругой синтаксис и модель команд
GhostscriptPostScript/PDF-процессов, печати и растеризацииСложные параметры и иной акцент
qpdfСтруктурных преобразований, шифрования, разделения и объединенияНе извлекает текст и не рендерит страницы как Xpdf

Для автоматического текста и диагностики без графической оболочки выбирают Xpdf Tools. В Linux-среде, где уже стандартизирован Poppler, логичнее использовать его и не смешивать реализации. Для структурной сборки и шифрования подходит qpdf; для PostScript — Ghostscript; для многоформатного рендеринга — MuPDF. Когда нужен визуальный выбор, редактирование и понятные кнопки, практичнее PDF Commander.

Сильные стороны Xpdf Tools

Главное преимущество — узкие самостоятельные команды. Не нужно открывать тяжёлое окно ради числа страниц или текста. Утилита легко вызывается из сценария, возвращает код и не зависит от состояния интерфейса.

Разделение задач упрощает тестирование. pdfimages не смешивает извлечение с рендерингом, pdffonts не исправляет шрифты, а pdfinfo не изменяет файл. Пользователь точно знает, какой слой обрабатывается.

Кроссплатформенные пакеты дают одинаковую базовую модель команд для Windows, macOS и Linux. Сценарий адаптируется заменой пути и правил оболочки. Документация находится рядом с бинарниками.

Набор удобен для массовой обработки: цикл выполняет одинаковую операцию сотни раз и фиксирует ошибки. Диапазон страниц ограничивает объём, а stdout связывает Xpdf с фильтрами и индексаторами.

Сочетание аналитических и конвертирующих инструментов позволяет сначала проверить метаданные, шрифты и изображения, а затем выбрать стратегию. Это диагностический комплект, а не только один текстовый конвертер.

Слабые стороны и неудобства

Порог входа выше, чем у графического приложения. Пользователь осваивает терминал, кавычки, рабочий каталог и коды. Сообщение не подсвечивает поле в диалоге, а требует чтения stderr и справки.

Нет общей очереди, предпросмотра и профилей в окне. Их можно построить внешним сценарием, но ответственность ложится на пользователя. Для одной операции подготовка иногда неоправданна.

Нет редактирования, OCR, объединения, подписания и аннотирования. Набор не заменяет полноценный редактор. Добавление случайных утилит из непроверенных мест загрузки увеличивает риск подмены и конфликтов.

Одноимённые команды Poppler создают путаницу. Инструкция из Linux-форума может описывать другой движок. Без версии нельзя считать результаты однородными.

Извлечение текста и HTML не восстанавливает семантику сложного PDF. Таблицы, формулы и порядок чтения требуют контроля. Для критических данных нужен тест качества, а не только код 0.

Практический выбор команды

Найти PDF без текстового слоя. Получите количество страниц через pdfinfo, извлеките текст первых листов и проверьте размер. Если текст пуст, а pdfimages -list показывает полноформатные растры, направьте документ в OCR-конвейер.

Собрать изображения из каталога. Сначала изучите список pdfimages, затем извлекайте объекты в отдельную папку и сохраняйте связь с номером страницы. Маски не следует принимать за готовые картинки.

Проверить публикацию. Запустите pdffonts, отметьте невстроенные шрифты и отсутствие Unicode-карт. Через pdfinfo проверьте страницы, размер, версию и шифрование. Сложные листы отрендерьте в PNG.

Создать превью. Выберите разумный DPI, ограничьте диапазон и создайте отдельный каталог. Для веб-миниатюры уменьшите результат внешним инструментом, не растягивая маленький растр.

Достать приложение из счёта. Перечислите вложения pdfdetach, извлеките в изолированную папку и проверьте сигнатуру. Не открывайте автоматически неизвестный файл.

Исправить ошибку в договоре. Xpdf Tools не подходит. Используйте редактор или исправьте исходный документ и экспортируйте заново.

Контроль качества пакетного процесса

Надёжный процесс имеет контрольный набор: цифровой текст, кириллицу, таблицу, скан, защищённый файл, вложение, изображение с маской, повреждённый PDF и большую страницу. После обновления весь набор обрабатывается снова, а результаты сравниваются.

Для текста считают символы, долю печатных знаков, ожидаемые слова и разделители страниц. Для изображений — количество, размеры и декодируемость. Для HTML — главный файл и ресурсы. Для отчёта — обязательные поля.

Хэш выявляет любое изменение, но не объясняет качество. Незначительное форматирование меняет SHA-256 целиком. Поэтому дополнительно сравнивают нормализованный текст, число страниц и визуальные эталоны.

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

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

Проверка дистрибутива перед развёртыванием

Скачанный пакет идентифицируют до распаковки: сверяют имя версии, размер, SHA-256, происхождение и сигнатуру ZIP. Расширение само по себе ничего не доказывает. После распаковки изучают структуру, лицензии и документацию, затем вызывают одну утилиту с параметром версии. Для Windows отдельно проверяют каталоги bin32 и bin64. Антивирусная проверка дополняет, но не заменяет происхождение и контрольную сумму.

Обновление без остановки процессов

Новый выпуск распаковывают рядом со старым, а не поверх работающего каталога. Сначала выполняют контрольный набор, затем переключают переменную пути или конфигурацию задачи. Старую версию оставляют на период наблюдения, чтобы откатить процесс и воспроизвести прежний результат. Абсолютные пути проверяют в планировщике и службах: они не обязаны использовать пользовательский PATH.

Организация входа, выхода и карантина

Рабочая структура разделяет исходники, временные данные, готовый результат, журналы и карантин. Xpdf не должен писать рядом с оригиналом, если процесс может повторяться. Серии изображений помещают в отдельный подкаталог документа. Файлы с ошибкой пароля, превышением лимита или подозрительной структурой переносят в карантин и не запускают по кругу автоматически.

Метрики извлечённого текста

Размер TXT — слабый показатель: файл из пробелов и управляющих знаков может быть большим. Полезнее считать печатные символы, долю неизвестных знаков, среднюю длину слова, количество страниц и наличие ожидаемого языка. Для формы проверяют обязательные поля. Небольшую выборку всегда просматривает человек, потому что автоматическая метрика не доказывает правильный порядок колонок и формул.

Разбор таблиц после pdftotext

Xpdf не выдаёт структурированные ячейки. В режиме layout таблица представлена строками и пробелами. Надёжный парсер сначала находит заголовки колонок, затем вычисляет интервалы или применяет шаблон конкретного поставщика. Простое разделение по одному пробелу ломает многострочные ячейки и объединённые колонки. Для финансовых данных результат сверяют с итогами и контрольными суммами.

Визуальное сравнение двух PDF

Для визуального сравнения одинаковые страницы рендерят одним бинарником, DPI и цветовыми параметрами, затем изображения сопоставляет внешняя программа. Разные версии движка способны дать небольшие отличия сглаживания, поэтому номер Xpdf фиксируют. Пиксельное различие не всегда означает смысловое изменение: динамическая дата, профиль или антиалиасинг тоже меняют значения.

Многоязычные документы

Один PDF может сочетать кириллицу, латиницу, греческий, азиатские письменности и символы. Unicode-выход необходим, но каждый шрифт всё равно должен иметь корректное сопоставление. После извлечения можно выполнить нормализацию Unicode для поиска, однако сырой вариант сохраняют отдельно. Лигатуры и переносы слов требуют языковой обработки, которую Xpdf сам не выполняет.

Стандартный вывод в длинной цепочке

Передача текста через stdout сокращает временные файлы, но вызывающее приложение должно читать поток, а не собирать гигабайты в одну строку. stdout и stderr разделяют, после чтения дожидаются завершения процесса и проверяют код. В Bash включают pipefail, иначе успешный grep скроет отказ pdftotext. Для больших документов временный файл часто надёжнее.

Тестирование защищённых документов

Для проверки сценария создают искусственный PDF с тестовым паролем, чтобы различить отсутствие секрета, неверный пароль и запрещённую операцию. Реальные пароли не помещают в общий журнал и публичную команду. Повтор с набором вариантов не превращают в перебор: система запрашивает разрешённый пароль у владельца или направляет документ на ручную обработку.

Когда подключать другой движок

Если один документ обрабатывается аномально, его сравнивают с Poppler, MuPDF или доверенным просмотрщиком. Совпадающая ошибка у нескольких движков указывает на структуру PDF; различие — на реализацию. Альтернативный результат маркируют именем программы и не подменяют бинарник в PATH незаметно. Постоянные исключения оформляют отдельным маршрутом и тестируют при обновлении.

Пути в Windows

Текущий каталог и абсолютные пути особенно важны в Планировщике задач. Сетевой диск, подключённый интерактивно, может отсутствовать у службы; используют доступный UNC-путь и отдельные права. Длинные имена, амперсанд и скобки защищают кавычками по правилам оболочки. Команда where подтверждает фактический EXE, но в сценарии надёжнее хранить полный путь.

Пути в macOS

Автоматизаторы macOS часто запускают shell с сокращённым PATH. Команда работает в Terminal, но не находится внутри приложения, пока не задан полный путь. На Apple Silicon каталоги пакетных менеджеров отличаются от старых инструкций для Intel. Для официального пакета собственная переменная пути делает интеграцию независимой от Homebrew и пользовательских настроек.

Пути в Linux

Cron и systemd получают другое окружение и домашний каталог. Пользовательский .xpdfrc может не читаться, а относительный результат появиться в неожиданной папке. В задании явно задают PATH, HOME, рабочий каталог и файл конфигурации. При запуске от отдельной учётной записи проверяют право чтения входа и записи только в выделенный выход.

Целостность созданных файлов

Ненулевой размер ещё не доказывает завершённость. PNG открывают декодером, HTML проверяют вместе со всеми ресурсами, а для серии сверяют последовательность номеров. Частично повреждённый PDF способен отрендерить первые страницы и завершиться ошибкой позже. Поэтому наличие первого кадра не заменяет код процесса и проверку полного диапазона.

Удаление временных данных

Временный файл удаляют только после подтверждённого импорта или атомарного переименования. При ошибке его можно оставить в ограниченном карантине на заданный срок, чтобы исследовать причину. Рекурсивная очистка сначала убеждается, что путь действительно указывает на временную папку. Такая проверка защищает от опасной переменной с пустым или корневым значением.

Кодировка Windows-консоли

Кодовая страница окна влияет на отображение сообщений, но не обязательно на байты TXT, если кодировка выхода задана явно. Не следует судить по виду команды type: файл открывают редактором с явным UTF-8 или проверяют байты. Если Xpdf записал правильный Unicode, смена шрифта консоли и режима отображения устраняет ложную кракозябру без новой конверсии.

Поворот и область страницы

Рендерер учитывает поворот и видимую область страницы, а исходное изображение из pdfimages может храниться без этих преобразований. Для OCR сравнивают ориентацию и при необходимости применяют сведения страницы внешним инструментом. CropBox и MediaBox способны различаться; выбор области влияет на поля, метки печати и итоговый размер кадра.

Страницы разных размеров

В одном PDF встречаются A4, широкая таблица, квитанция и плакат. Один DPI даёт разное количество пикселей и объём памяти. Процесс превью сначала узнаёт размер страницы, затем вписывает готовый растр в требуемую рамку без искажения пропорций. Автоматическая подгонка до рендера может скрыть факт изменения формата документа.

Прозрачность, фон и цвет

PNG поддерживает прозрачность, но фон рендера влияет на тонкие светлые элементы и последующий OCR. Для сравнения задают одинаковые параметры. Профессиональный печатный результат дополнительно зависит от ICC-профилей, overprint и цветоделения. Экранный кадр Xpdf удобен для контроля, но не заменяет специализированную допечатную проверку.

Вложения с одинаковыми именами

Несколько вложений способны иметь одинаковые отображаемые имена. Сохранение всех файлов в один каталог рискует перезаписью. Сначала получают список, затем формируют безопасные уникальные имена и сохраняют исходное название в журнале. Расширение не считается доказательством типа: сигнатура и антивирусная проверка обязательны.

Редкие форматы изображений

Извлечённый поток может быть JPEG2000, JBIG2 или другим форматом, который не открывается стандартным просмотрщиком. Это не обязательно повреждение. Режим списка сообщает тип и параметры, после чего выбирают подходящий декодер. Принудительное преобразование в PNG облегчает просмотр, но изменяет способ хранения и иногда увеличивает объём.

Подмножества шрифтов

Префикс в имени шрифта обычно означает встроенное подмножество, содержащее использованные глифы. Сам по себе он не является дефектом. Важнее наличие всех нужных символов, корректная карта ToUnicode и соответствие стандарту долгого хранения или печати. pdffonts сообщает признаки, но решение о допустимости принимает политика публикации.

Сравнение метаданных

Метаданные удобно сравнивать после нормализации порядка строк, однако даты, Producer и идентификаторы могут меняться при каждом экспорте. Содержательные поля отделяют от технических, иначе тест сообщает об ожидаемых различиях. Значение Author не подтверждает личность, а CreationDate не заменяет надёжную временную метку.

Имена, начинающиеся с дефиса

Редкое имя файла, начинающееся с дефиса, способно выглядеть как опция. Безопаснее передавать абсолютный путь и использовать предусмотренный разделитель аргументов, если он документирован для конкретной команды. Внешнему пользователю нельзя позволять формировать флаги через имя. Массив аргументов надёжнее одной склеенной строки shell.

Локаль числовых параметров

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

Сохранение доказательств

Для важной обработки сохраняют SHA-256 исходного PDF, версию Xpdf, параметры без секретов, код завершения и хэш результата. Эти данные не доказывают правильность интерпретации, но позволяют воспроизвести технический этап и обнаружить подмену. Если результат нормализован, отдельно хранят сырой вывод и описание применённых фильтров.

Частые вопросы о Xpdf Tools

Есть ли русский интерфейс?

Графического интерфейса нет, а ключи и сообщения англоязычные. Кириллица в PDF извлекается, если документ имеет корректное сопоставление символов и выбрана подходящая кодировка результата.

Нужно ли устанавливать программу?

Официальные пакеты распаковываются без мастера. Бинарники запускают из каталога или добавляют его в PATH. В macOS и Linux проверяют право исполнения и системное разрешение запуска.

Можно ли редактировать PDF?

Нет. Инструменты читают, анализируют и конвертируют. Для изменения текста, страниц, аннотаций и форм нужен PDF-редактор.

Почему pdftotext создаёт пустой файл?

Наиболее частая причина — скан без текстового слоя. Также проверяют диапазон, пароль, права, код завершения и не нарисованы ли буквы контурами.

Почему в Linux другие ключи?

Вероятно, запущена одноимённая утилита Poppler. Посмотрите полный путь и вывод -v. Не переносите параметры между реализациями без проверки справки.

Можно ли запускать Xpdf Tools на сервере?

Да, консольная модель подходит серверу, но недоверенные PDF изолируют, ограничивают ресурсами и обрабатывают актуальной версией. Лицензия зависит от способа интеграции и распространения.

Что использовать для OCR?

Xpdf подготавливает изображения через pdfimages или pdftopng, а распознавание выполняет отдельная система. После OCR текст проверяют и при необходимости создают новый слой.

Итоговая оценка

Xpdf Tools — специализированный набор для тех, кому нужна не визуальная правка, а надёжная команда. Он особенно полезен в индексировании, технической диагностике, извлечении ресурсов, создании превью и подготовке данных для других систем. Девять утилит закрывают разные слои PDF и позволяют строить прозрачные, тестируемые конвейеры.

Пакет требует дисциплины: явно указывать пути, проверять версию, сохранять stderr и код, изолировать чужие документы и валидировать результат. От него нельзя ожидать OCR, редактирования и идеального восстановления таблиц. При таком понимании ограничения предсказуемы, а скорость, автоматизация и воспроизводимость раскрываются полностью.

Для единичного ручного исправления разумнее выбрать графический редактор. Для сотен файлов, где нужно одинаково получить текст, свойства, картинки, вложения или растровые страницы, Xpdf Tools остаётся практичным инструментом. Начинайте с одного контрольного PDF, фиксируйте рабочую команду и только после проверки переносите её на весь массив документов.