Для того, чтобы сделать скриншот сайта или чтобы конвертировать HTML в картинку или в PDF можно воспользоваться программой wkhtmltopdf. Программа хорошо справляется, делая скриншоты из командной строки, но если попытаться запустить её на безголовой машине (без установленной графической оболочки), то программа потерпит неудачу.
По этой причине мне она не подошла, но я не мог не упомянуть её, поскольку это самый одни из самых простых способов сделать скриншот сайта не выходя из командной строки на домашнем настольном компьютере.
Если мы работаем с сайтами, то нам нужен движок рендерега. По-настоящему безголовый движок веб-рендерега я знаю один – PhantomJS. Им, давайте, и воспользуемся.
Для начала установите его, как описано в инструкции «Как установить PhantomJS на Linux».
Казалось бы, PhantomJS должен прекрасно справляться с тем, для чего он предназначен – рендерегим веб-приложений на безголовых серверах. При тестировании в графическом окружении рабочего стола всё именно так и было. Но при переносе на безголовый сервер, скриншоты стали выглядить странно: при использовании PhantomJS на картинках вместо букв отображались пустые места, квадратики, но только не буквы. Причина стала понятна довольно быстро – отсутствие шрифтов. Следующие наборы шрифтов были подобраны как максимально возможные, они могут быть избыточными, поскольку подбирались так, чтобы без проблем отображать восточные иероглифы, тайские буквы и буквы любого другого редкого алфавита.
Для производных Debian (Kali Linux, Linux Mint, Ubuntu) установите:
sudo apt install gsfonts fonts-arphic-uming fonts-linuxlibertine fonts-thai-tlwg* fonts-tlwg-* fonts-tibetan-machine fonts-khmeros fonts-beng-extra fonts-arphic-ukai
Для Arch Linux установите:
sudo pacman -S gsfonts ttf-arphic-uming ttf-ubuntu-font-family ttf-linux-libertine-g ttf-liberation ttf-tibetan-machine ttf-khmer ttf-freefont ttf-arphic-ukai
Как сохранить HTML в изображение
Нам нужен файл rasterize.js, найдём его расположение:
locate rasterize.js /usr/share/phantomjs/examples/rasterize.js
Команда для создания скриншотов веб-сайтов из командной строки выглядит так:
phantomjs /usr/share/phantomjs/examples/rasterize.js https://mi-al.ru screenshot.png
Где:
- /usr/share/phantomjs/examples/rasterize.js – путь до файла rasterize.js
- https://mi-al.ru – адрес сайта, скриншот которого нам нужен, обязательно следует указывать протокол
- screenshot.png – файл, в который мы хотим сохранить изображение
В принципе сработало, но скриншот выглядит так:
Т.е. сайт выдал свою мобильную версию, поскольку по умолчанию сайту передаётся ширина «браузера» как 600 пиксилей.
Нам нужно отключить строгий режим. Для этого отредактируем файл
vim phantomjs /usr/share/phantomjs/examples/rasterize.js
Закомментируя там самую верхнюю строчку
"use strict";
чтобы получилось так:
//"use strict";
Теперь в качестве дополнительного аргумента мы можем указывать желаемую высоту:
phantomjs /usr/share/phantomjs/examples/rasterize.js https://mi-al.ru screenshot.png 1920px
Теперь скриншот выглядит так:
Можно указывать ширину и высоту:
phantomjs /usr/share/phantomjs/examples/rasterize.js https://mi-al.ru screenshot.png 1920px*400px
Тогда скриншот может получиться обрезанным:
Как конвертировать HTML в PDF
Чтобы сделать скриншот любого сайта и сохранить его в PDF из командной строки, нужно набрать команду:
phantomjs /usr/share/phantomjs/examples/rasterize.js https://mi-al.ru screenshot.pdf
Где:
- /usr/share/phantomjs/examples/rasterize.js – путь до файла rasterize.js
- https://mi-al.ru – адрес сайта, скриншот которого нам нужен, обязательно следует указывать протокол
- screenshot.pdf – PDF файл, в который мы сохраняем результат
Можно указать размер страницы:
phantomjs /usr/share/phantomjs/examples/rasterize.js https://mi-al.ru screenshot.pdf A4
Варианты размеров: "5in*7.5in", "10cm*20cm", "A4", "Letter".
Связанные статьи:
- Ошибка «attempt to perform an operation not allowed by the security policy `PDF'» (РЕШЕНО) (60%)
- Ошибка «convert: cache resources exhausted» (РЕШЕНО) (60%)
- Лучшие терминальные мультиплексные инструменты (50%)
- Как просмотреть или отредактировать метаданные pdf или изображениях из командной строки Linux (50%)
- Как установить 7zip на Linux (50%)
- Как пользоваться командой top для наблюдения за процессами в Linux (RANDOM - 50%)