Просмотр PDF-файла в терминале

Вопрос или проблема

Просмотр 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.)

Может быть, стоит рассмотреть возможность запуска imgcat1. Вы упомянули, что хотите просматривать удаленные файлы. Это решение не отвечает вашим требованиям по просмотру файлов прямо на кластере, но я полагаю, что оно может быть приемлемым. Используя 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-файлы непосредственно в терминале, выбор конкретного метода зависит от ваших предпочтений и установленных утилит. Если у вас есть дополнительные вопросы или необходимо больше информации по одной из предложенных тем, не стесняйтесь уточнять.

Оцените материал
Добавить комментарий

Капча загружается...