22

Фон

Пакетное преобразование различных исходных файлов с подсветкой синтаксиса (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 ответа3

9

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

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

  • gvim - используется для экспорта выделенного синтаксиса исходного кода в HTML.
  • moria - Цветовая схема для подсветки синтаксиса.
  • wkhtmltoimage - используется для преобразования документов HTML в файлы PNG.
  • gawk and sed - Инструменты для обработки текста.
  • ImageMagick - Используется для обрезки PNG и добавления рамки.

Общие шаги

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

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

Сценарий генерирует изображения одинаковой ширины для исходных файлов, содержащих строки длиной до 80 символов. Исходные файлы со строками длиной более 80 символов приводят к изображениям шириной, необходимой для сохранения всей строки.

Монтаж

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

  • gvim - C:\Program Files\Vim
  • moria - C:\Program Files\Vim\vim73\colors
  • wkhtmltoimage - C:\Program Files\wkhtml
  • ImageMagick - C:\Program Files\ImageMagick
  • Гоук и Сед - C:\Program Files\GnuWin32

Примечание: в ImageMagick есть программа convert.exe , которая не может заменить команду convert Windows. По этой причине полный путь к 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 для фоновых цветов больше не нужна.

3

читая man- wkhtmltoimage:

 -d,    --dpi   <dpi>   Change the dpi explicitly

если это не поможет: собрать простое решение с помощью Qt и (включенного в комплект) Webkit довольно просто.

0

Вы также можете использовать командную строку формы преобразования Open Office для Html-> PDF:

http://www.oooninja.com/2008/02/batch-command-line-file-conversion-with.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .