Преобразовать исходный код в синтаксис выделенного изображения

StackOverflow https://stackoverflow.com/questions/3938953

Вопрос

Задний план

Автор 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

Есть несколько проблем с этим подходом:

  1. Разрешение не хватает (используя -resample а также -density не предлагать улучшения).
  2. Выделение синтаксиса не подходит для белой страницы (возможно, может изменить цветовую тему Anfrice).
  3. С использованием Courier100 производит несколько .png Файлы, которые должны быть сшиты вместе.
  4. То -border 10 Неожиданно меняет цвет фона от белого, чтобы осветить.

Ручное решение

Преобразование исходных файлов в PostScript - полностью избежать ImageMagick - а затем импортировать их в GIMP, будет производить желаемые результаты. К сожалению, это решение включает в себя немного ручной работы, и мой опыт программирования пакетного программирования GIMP - это рядом с Nil.

Это было полезно?

Решение

Требования к программному обеспечению

Следующие программные пакеты доступны как для систем Windows, так и для Linux, и необходимы для полного рабочего решения:

  • господство - Используется для экспорта синтаксиса выделенного исходного кода на HTML.
  • МОРИЯ - Цветовая схема для синтаксиса выделения.
  • wkhtmltopdf. - Преобразует HTML-документы в документы PDF или PostScript (PS).
  • Ghostscript - используется для преобразования PS в PNG.
  • Воображение - используется для обрезки PNG и добавить границу.

Общие этапы

Вот как работает решение:

  1. Загрузите исходный код в редактор, который может добавить брызги цвета.
  2. Экспортируйте исходный код в виде документа HTML (с встроенным FONT Теги).
  3. Преобразуйте HTML-документ в файл PS.
  4. Преобразуйте файл PS в файл PNG.
  5. Обрежьте белую границу PNG и поверхностный кодовый исходный код.
  6. Добавьте границу вокруг изображения, используя тот же цвет фона, что и документ HTML.
  7. Удалить временные файлы.

Установка

Установите компоненты в следующие места:

  • господство - 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top