Преобразовать исходный код в синтаксис выделенного изображения
-
30-09-2019 - |
Вопрос
Задний план
Автор OpenOffice не хватает возможности ссылки на исходный файл текста ASCII, примените подсветку синтаксиса, обернуть его в кадре и обновлять содержимое кадра, когда исходный файл изменяется. Тем не менее, писатель OpenOffice может ссылаться на изображения и автоматически обновит изображения, когда они меняются.
Проблема
Изображения должны быть высокого разрешения (300 DPI или более) со синтаксисом, подходящим для белого фона (т. Е. Напечатанная страница).
Вопрос
Как высококачественные изображения могут создаваться автоматически из файлов исходных кодов, таких как:
- SQL;
- PostgreSQL функции;
- Джава;
- Сценарии Bash; а также
- R и PL / R?
Попытки
Большинство попыток были изменением следующей темы:
$ enscript --color -f Courier12 -B -1 --highlight=sql -h -o - source.sql |\
convert - -trim -border 10 source.png
Есть несколько проблем с этим подходом:
- Разрешение не хватает (используя
-resample
а также-density
не предлагать улучшения). - Выделение синтаксиса не подходит для белой страницы (возможно, может изменить цветовую тему Anfrice).
- С использованием
Courier100
производит несколько.png
Файлы, которые должны быть сшиты вместе. - То
-border 10
Неожиданно меняет цвет фона от белого, чтобы осветить.
Ручное решение
Преобразование исходных файлов в PostScript - полностью избежать ImageMagick - а затем импортировать их в GIMP, будет производить желаемые результаты. К сожалению, это решение включает в себя немного ручной работы, и мой опыт программирования пакетного программирования GIMP - это рядом с Nil.
Решение
Требования к программному обеспечению
Следующие программные пакеты доступны как для систем Windows, так и для Linux, и необходимы для полного рабочего решения:
- господство - Используется для экспорта синтаксиса выделенного исходного кода на HTML.
- МОРИЯ - Цветовая схема для синтаксиса выделения.
- wkhtmltopdf. - Преобразует HTML-документы в документы PDF или PostScript (PS).
- Ghostscript - используется для преобразования PS в PNG.
- Воображение - используется для обрезки PNG и добавить границу.
Общие этапы
Вот как работает решение:
- Загрузите исходный код в редактор, который может добавить брызги цвета.
- Экспортируйте исходный код в виде документа HTML (с встроенным
FONT
Теги). - Преобразуйте HTML-документ в файл PS.
- Преобразуйте файл PS в файл PNG.
- Обрежьте белую границу PNG и поверхностный кодовый исходный код.
- Добавьте границу вокруг изображения, используя тот же цвет фона, что и документ HTML.
- Удалить временные файлы.
Установка
Установите компоненты в следующие места:
- господство -
C:\Program Files\Vim
- МОРИЯ -
C:\Program Files\Vim\vim73\colors
- wkhtmltopdf. -
C:\Program Files\wkhtml
- Ghostscript -
C:\Program Files\gs
- Воображение -
C:\Program Files\ImageMagick
Примечание: ImageMagick имеет программу под названием convert.exe
, который не может заменить окна convert
команда. Из-за этого полный путь к convert.exe
должен быть жестко закодирован в пакетном файле (в отличие от добавления ImageMagick к PATH
).
Переменные среды
Добавить или обновить следующее Переменные среды:
- Gs_lib. =
C:\Program Files\gs\gs9.00\lib
- Gs_prog. =
C:\Program Files\gs\gs9.00\bin\gswin32.exe
- ДОРОЖКА =
"C:\Program Files\Vim\vim73";"C:\Program Files\wkhtml";"C:\Program Files\gs\gs9.00\bin"
Пакетный файл
Вот текст пакетных источников:
@ECHO OFF
ECHO Converting %1 to %1.html ...
gvim -e %1 -c "set nobackup" -c ":colorscheme moria" -c :TOhtml -c wq -c :q
ECHO Converting %1.html to %1.ps ...
wkhtmltopdf --quiet --dpi 1200 %1.html %1.ps
ECHO Converting %1.pdf to %1.png ...
IF EXIST %1.png DEL /q %1.png
gswin32 -q -dBATCH -dNOPAUSE -dSAFER -dNOPROMPT ^
-sDEVICE=png16m -dDEVICEXRESOLUTION=600 -dDEVICEYRESOLUTION=600 ^
-dDEVICEWIDTH=4958 -dDEVICEHEIGHT=7017 -dNOPLATFONTS ^
-dTextAlphaBits=4 -sOutputFile=%1.png %1.ps
ECHO Trimming %1.png ...
move %1.png %1.orig.png
"C:\Program Files\ImageMagick\convert.exe" -trim +repage -trim +repage ^
-bordercolor "#f0f0f0" -border 25x25 %1.orig.png %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 %1.ps DEL /q %1.ps