Вимоги до програмного забезпечення
Наступні програмні пакети доступні як для систем 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
недостатньо встановити ширину сторінки? висоту не можна вказати, оскільки вона визначається вмістом html-матеріалу. Ширина imho - це все, що вам потрібно, ви можете обчислити необхідну ширину, виходячи з того, скільки пікселів на дюйм ви хочете.