Вопрос или проблема
Просмотр PDF-файла в терминале
Я хочу просматривать pdf
файлы прямо на нашем кластер, а не копировать их на свой локальный компьютер и затем открывать в просмотрщике.
Как я могу просмотреть pdf
файл в своем терминале?
Во многих системах программа less использует lesspipe, которая может автоматически обрабатывать pdftotext. Поэтому вы можете сразу попробовать
less file.pdf
что покажет вывод pdftotext
в less
.
Я предполагаю, что невозможно увидеть PDF файл в терминале, но вы можете проверить его содержимое, преобразовав PDF файл в текст. Вы можете сделать это следующим образом:
pdftotext a.pdf
Это создаст файл a.txt, который вы можете прочитать в VIM.
Для варианта Ubuntu этот бинарный файл доступен в следующем пакете.
poppler-utils
Я попробовал следующее с хорошими результатами:
pdftotext filename.pdf - | less
Когда я хочу “просмотреть pdf файл в терминале”, это означает, что я действительно хочу увидеть некорректированный PDF. Я делаю:
pdftk in.pdf output out.pdf uncompress
Мне всегда было интересно, почему и less in.pdf
, и less out.pdf
дают мне только текстовые строки в PDF (исключая команды PDF, содержащие только текст, которые я ожидал в out.pdf
).
Это происходит потому, что lesspipe предполагает, что я хочу, чтобы pdftotext
был выполнен первым – и так как здесь я этого не хочу, я должен специально отключить lesspipe, установив переменную окружения LESSOPEN
в пустое значение; то есть:
$ LESSOPEN="" less out.pdf
И наконец, я могу просмотреть некорректированный PDF код, используя less
.
Существуют и другие решения… Позвольте мне порекомендовать вам древнюю утилиту mc
.
MC(1) GNU Midnight Commander
mc - Визуальная оболочка для систем, подобным Unix.
mc
разработан для управления файлами на текстовой основе и имеет опцию “просмотреть”
(F3 клавиша), которая автоматически преобразует .pdf в текст для просмотра без GUI. Код, который выполняет это преобразование, является частью mc
сам по себе, поэтому нет необходимости в преобразовании другими утилитами. (Также имеет встроенный просмотрщик .html для WIW.)
Может быть, стоит рассмотреть возможность запуска imgcat
1. Вы упомянули, что хотите просматривать удаленные файлы. Это решение не отвечает вашим требованиям по просмотру файлов прямо на кластере, но я полагаю, что оно может быть приемлемым. Используя wget
, вы можете перенаправить вывод в stdout
, а затем передать его в imgcat
следующим образом:
wget -O- -q https://www.nceas.ucsb.edu/sites/default/files/2020-04/colorPaletteCheatsheet.pdf | imgcat
Это даст следующие результаты:
Замечания
Снова, это не отличное решение, так как вам придется загрузить файл (даже если вы просто перенаправляете его), и imgcat
делает неудобным просмотр конкретной страницы в PDF. Тем не менее, я считаю, что стоит разместить это решение, так как этот маленький трюк оказывается полезным при работе с PDF, содержащими изображения и т. д.
1Стоит добавить, что есть два пакета с одинаковым именем: iTerm’s и тот, который поддерживается.
Это может быть полезно, обратите внимание на следующие моменты:
- Это только для macOS.
- Это не откроет pdf внутри окна терминала, а вместо этого откроет Quick Look, что я считаю очень мощным для быстрого просмотра любых файлов или документов.
Просто используйте:
qlmanage -p <file_name>
Возможно, в Linux есть аналогичная команда (gnome-sushi). Я это не тестировал, но это также может быть полезно. Я обновлю этот пост после тестирования.
lesspipe file.pdf | less
lesspipe предоставляется пакетом less на Debian и Ubuntu.
Еще одно решение – использовать команду gnome-open
gnome-open yourfile.pdf
При условии, что вы вошли на свой сервер с опцией -X (ssh -X).
Если вы запускаете emacs
на своем компьютере (emacs
предварительно установлен на Ubuntu 18.04), вы можете Virtually открыть и увидеть pdf на удаленном сервере, нажав Ctrl-x Ctrl-f
(для find-file
) и затем ввести /user@hostname:/path/to/my.pdf
и нажать Enter (обратите внимание на самый первый /
). Затем вам предложат ввести пароль сервера, и вот оно! Вы можете увидеть pdf внутри emacs.
Навигация по PDF внутри emacs
Используйте space
, чтобы перейти на одну страницу вниз и backspace
, чтобы перейти на одну страницу вверх. Вы также можете использовать стрелки для пролистывания одной страницы, если она не помещается на экране.
Увеличение
Увеличить, нажав Ctrl-x Ctrl-+
. Увеличить еще больше, нажав только +
. Или уменьшить, нажав -
.
Контекст
Да, вы можете подключиться к удаленному серверу из emacs
с помощью встроенного пакета tramp
, который работает так же просто, как я объяснил выше. Этот метод работает не только для pdf, но и для любого другого типа файла, такого как изображения.
python -m pip install pypdfium2
pypdfium2 extract-text ./path/to/doc.pdf |less
Установите imgcat, затем:
imgcat -W 100% file.pdf
Если вы имеете дело с многостраничным pdf, сначала попробуйте это:
pdfseparate multipage.pdf %d.pdf
Этот код создает несколько одноместных pdf из входного файла. Здесь %d относится к однозначному числу для имени выходного файла (каждой страницы). Не стесняйтесь изменять это. Если вы не имеете прав sudo для установки ‘imgcat’, не беспокойтесь! Вот решение. iterm2
Ответ или решение
Для просмотра PDF-файлов непосредственно в терминале без необходимости копирования их на локальную машину существует несколько подходов. Ниже представлены наиболее распространенные методы.
1. Использование less
с pdftotext
Если у вас установлены утилиты poppler-utils
, вы можете использовать pdftotext
для извлечения текста из PDF и передать его в less
для удобного просмотра:
less file.pdf
Если ваш терминал поддерживает lesspipe
, это должно автоматически преобразовать PDF в текст.
Вы также можете выполнить следующую команду для вывода текста в less
:
pdftotext file.pdf - | less
2. Прямой вывод с использованием pdftk
Если вас интересует не просто текст, а внутреннее представление PDF, вы можете сделать его несжатым с помощью pdftk
:
pdftk in.pdf output out.pdf uncompress
LESSOPEN="" less out.pdf
3. Использование mc
(Midnight Commander)
Утилита mc
предоставляет встроенную опцию просмотра, которая автоматически конвертирует PDF-файлы в текст:
mc
Затем используйте клавишу F3
для просмотра.
4. Использование imgcat
Если вы работаете в окружении iTerm2 на macOS, вы можете использовать imgcat
для отображения PDF-файлов. Однако имейте в виду, что это потребует загрузки файла:
wget -O- -q https://example.com/file.pdf | imgcat
5. Просмотр с использованием Emacs
Если у вас установлен Emacs, вы можете открыть PDF-файл удаленно:
C-x C-f /user@hostname:/path/to/file.pdf
Навигация по документу осуществляется с помощью клавиш space
(вниз) и backspace
(вверх).
6. Использование Python и pypdfium2
Вы можете установить библиотеку pypdfium2
, чтобы извлекать текст из PDF:
python -m pip install pypdfium2
pypdfium2 extract-text ./path/to/doc.pdf | less
7. Исследование других альтернатив
Вы также можете использовать gnome-open
(при наличии графического интерфейса):
gnome-open yourfile.pdf
Либо воспользоваться командой для управления файлами в терминале с возможностью просмотра изображений и других форматов.
Заключение
Все эти методы позволяют вам просматривать PDF-файлы непосредственно в терминале, выбор конкретного метода зависит от ваших предпочтений и установленных утилит. Если у вас есть дополнительные вопросы или необходимо больше информации по одной из предложенных тем, не стесняйтесь уточнять.