Конвертировать HTML в изображение
Фон
Пакетное преобразование различных исходных файлов с подсветкой синтаксиса (C, SQL, Java, PHP, batch, bash) в изображения с высоким разрешением (600 точек на дюйм), подходящие для электронных книг и печатных книг.
Неудачные решения
Ряд попыток пока:
- OpenOffice или LibreOffice - приходится повторно импортировать исходный код в документ каждый раз, когда изменяется исходный файл. (То есть решение не может быть легко автоматизировано для сотен или тысяч исходных файлов.)
- EnScript. Не может легко изменить цвета, неправильно отображает вывод, не является исчерпывающим.
- LyX / LaTeX. Несовершенно оказывает вывод.
- gvim to HTML - HTMLDOC в PostScript - GhostScript для PNG. HTMLDOC игнорирует
font
теги. - gvim to HTML - html2ps - GhostScript для PNG. RGB цвета не распознаются
html2ps
, - Firefox для PostScript - GhostScript для PNG. Неприятно обходной.
- gvim to HTML - OmniFormat к чему угодно. Бесплатная версия не подходит для пакетной обработки; много рекламных всплывающих окон.
- pygments. Не может легко изменить разрешение изображения; не имеет диапазона цветовых схем gvim.
Ближайшее решение
Решение, которое почти работает:
- gvim to HTML - wkhtmltopdf to PDF. Потребуется постобработка с ImageMagick (wkhtmltoimage не может установить разрешение изображения, только ширину страницы).
Требования
- Windows и Linux, но любой из них приемлем.
- Бесплатно или OSS
- Только командная строка (подходит для пакетной обработки)
- Легко изменить цветовую гамму
- Поддержка: PHP, Batch, Bash, Java, JavaScript, R, C и SQL
Вопрос
Любые другие способы преобразовать выделенный синтаксисом исходный код в изображение с высоким разрешением (600 точек на дюйм)?
Спасибо!
3 ответа
Требования к программному обеспечению
Следующие пакеты программного обеспечения доступны как для систем Windows, так и для Linux, и необходимы для полного рабочего решения:
- gvim - используется для экспорта выделенного синтаксиса исходного кода в HTML.
- moria - Цветовая схема для подсветки синтаксиса.
- wkhtmltoimage - используется для преобразования документов HTML в файлы PNG.
- gawk and sed - Инструменты для обработки текста.
- ImageMagick - используется для обрезки PNG и добавления рамки.
Общие шаги
Вот как работает решение:
- Загрузите исходный код в редактор, который может добавить всплески цвета.
- Экспорт исходного кода в виде документа HTML (со встроенным
FONT
теги). - Уберите атрибут фона из документа HTML (чтобы обеспечить прозрачность).
- Преобразуйте документ HTML в файл PNG.
- Обрежьте границу PNG.
- Добавьте небольшую 25-пиксельную рамку вокруг изображения.
- Удалить временные файлы.
Сценарий генерирует изображения одинаковой ширины для исходных файлов, содержащих строки длиной до 80 символов. Исходные файлы со строками длиной более 80 символов приводят к изображениям шириной, необходимой для сохранения всей строки.
Монтаж
Установите компоненты в следующих местах:
- гвим -
C:\Program Files\Vim
- Мория -
C:\Program Files\Vim\vim73\colors
- wkhtmltoimage -
C:\Program Files\wkhtml
- ImageMagick -
C:\Program Files\ImageMagick
- Гоук и Сед -
C:\Program Files\GnuWin32
Примечание: в ImageMagick есть программа под названием convert.exe
, который не может заменить Windows convert
команда. Из-за этого полный путь к convert.exe
должны быть жестко запрограммированы в командном файле (в отличие от добавления ImageMagick к PATH
).
Переменные среды
Установите переменную среды PATH в:
"C:\Program Files\Vim\vim73";"C:\Program Files\wkhtml";"C:\Program Files\GnuWin32\bin"
Пакетный файл
Запустите его используя:
src2png.bat src2png.bat
Создайте командный файл с именем src2png.bat
скопировав следующее содержимое:
@ECHO OFF
SET NUMBERS=-c "set number"
IF "%2" == "" SET NUMBERS=
ECHO Converting %1 to %1.html...
gvim -e %1 -c "set nobackup" %NUMBERS% -c ":colorscheme moria" ^
-c :TOhtml -c wq -c :q
REM Remove all background-color occurrences (without being self-referential)
sed -i "s/background-color: #......; \(.*\)}$/\1 }/g" %1.html
ECHO Converting %1.html to %1.png...
wkhtmltoimage --format png --transparent --minimum-font-size 80 ^
--quality 100 --width 3600 ^
%1.html %1.png
move %1.png %1.orig.png
REM If the text file has lines that exceed 80 characters, don't crop the
REM resulting image. (The book automatically shrinks large images to fit.)
REM The 3950 is the 80 point font at 80 characters with padding for line
REM numbers.
SET LENGTH=0
FOR /F %%l IN ('gawk ^
"BEGIN {x=0} {if( length($0)>x ) x=length()} END {print x;}" %1') ^
DO (
SET LENGTH=%%l
)
SET EXTENT=-extent 3950x
IF %LENGTH% GTR 80 SET EXTENT=
REM Trim the image height, then extend the width for 80 columns, if needed.
REM The result is that all images will be resized the same amount, thus
REM making the font size the same maximum for all source listings. Source
REM files beyond the 80 character limit will be scaled as necessary.
ECHO Trimming %1.png...
"C:\programs\ImageMagick\convert.exe" -format png %1.orig.png ^
-density 150x150 ^
-background none -antialias -trim +repage ^
%EXTENT% ^
-bordercolor none -border 25 ^
%1.png
ECHO Removing old files...
IF EXIST %1.orig.png DEL /q %1.orig.png
IF EXIST %1.html DEL /q %1.html
IF EXIST sed*. DEL /q sed*.
Улучшения и оптимизации приветствуются.
Примечание: последняя версия wkhtmltoimage правильно обрабатывает переопределение цвета фона. Таким образом, в теории линия для удаления CSS для фоновых цветов больше не нужна.
Читая справочную страницу wkhtmltoimage
:
-d, --dpi <dpi> Change the dpi explicitly
если это не поможет: собрать простое решение с помощью Qt и (включенного в комплект) Webkit довольно просто.
Вы также можете использовать командную строку формы преобразования Open Office для Html- > PDF:
http://www.oooninja.com/2008/02/batch-command-line-file-conversion-with.html