Преобразовать исходный код в синтаксис выделенного изображения - PullRequest
5 голосов
/ 15 октября 2010

Фон

OpenOffice Writer не имеет возможности ссылаться на исходный текстовый файл ASCII, применять подсветку синтаксиса, переносить его во фрейм и обновлять содержимое фрейма при каждом изменении исходного файла.Однако OpenOffice Writer может связываться с изображениями и автоматически обновляет изображения при их изменении.

Проблема

Изображения должны иметь высокое разрешение (300 точек на дюйм или более) с соответствующей окраской синтаксисадля белого фона (т. е. напечатанной страницы).

Вопрос

Как автоматически создавать высококачественные изображения из файлов исходного кода, например:

  • SQL;
  • Функции PostgreSQL;
  • Java;
  • 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. Подсветка синтаксиса не подходит для белой страницы(возможно, может изменить цветовую тему enscript).
  3. Использование Courier100 создает несколько .png файлов, которые необходимо сшить.
  4. -border 10 неожиданно меняет цвет фона сот белого до светло-серого.

Решение вручную

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

1 Ответ

5 голосов
/ 23 ноября 2010

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

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

  • gvim - Используется для экспорта выделенного синтаксиса исходного кода в HTML.
  • moria - Цветовая схема для подсветки синтаксиса.
  • wkhtmltopdf - Преобразование документов HTML в PDFили PostScript (PS) документы.
  • Ghostscript - используется для преобразования PS в PNG.
  • ImageMagick - используется для обрезки PNG и добавленияborder.

Общие шаги

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

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

Установка

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

  • gvim - C:\Program Files\Vim
  • moria - C:\Program Files\Vim\vim73\colors
  • wkhtmltopdf - C:\Program Files\wkhtml
  • Ghostscript - C:\Program Files\gs
  • ImageMagick - C:\Program Files\ImageMagick

Примечание. ImageMagick имеет программу под названием convert.exe, которая не может заменить команду Windows 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
  • PATH = "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
...