Wymagania Systemowe
Następujące pakiety oprogramowania są dostępne dla systemów Windows i Linux i są wymagane dla kompletnego, działającego rozwiązania:
- gvim - Używany do eksportowania podświetlonego składni kodu źródłowego do HTML.
- moria - Schemat kolorów do podświetlania składni.
- wkhtmltoimage - Używany do konwersji dokumentów HTML do plików PNG.
- gawk i sed - Narzędzia do przetwarzania tekstu.
- ImageMagick - Używany do przycinania PNG i dodawania ramki.
Ogólne kroki
Oto jak działa to rozwiązanie:
- Załaduj kod źródłowy do edytora, który może dodawać plamy koloru.
- Wyeksportuj kod źródłowy jako dokument HTML (z osadzonymi
FONT
znacznikami).
- Usuń atrybut tła z dokumentu HTML (aby umożliwić przezroczystość).
- Konwertuj dokument HTML na plik PNG.
- Przytnij granicę PNG.
- Dodaj małą, 25-pikselową ramkę wokół obrazu.
- Usuń pliki tymczasowe.
Skrypt generuje obrazy o tej samej szerokości dla plików źródłowych zawierających wiersze o długości poniżej 80 znaków. Pliki źródłowe z liniami o długości ponad 80 znaków dają obrazy tak szerokie, jak to konieczne do zachowania całej linii.
Instalacja
Zainstaluj komponenty w następujących lokalizacjach:
- gvim -
C:\Program Files\Vim
- moria -
C:\Program Files\Vim\vim73\colors
- wkhtmltoimage -
C:\Program Files\wkhtml
- ImageMagick -
C:\Program Files\ImageMagick
- Gawk and Sed -
C:\Program Files\GnuWin32
Uwaga: ImageMagick ma program o nazwie convert.exe
, który nie może zastąpić convert
polecenia systemu Windows . Z tego powodu pełna ścieżka do convert.exe
pliku musi być zakodowana na stałe w pliku wsadowym (w przeciwieństwie do dodawania ImageMagick do PATH
).
Zmienne środowiska
Ustaw zmienną środowiskową PATH na:
"C:\Program Files\Vim\vim73";"C:\Program Files\wkhtml";"C:\Program Files\GnuWin32\bin"
Plik wsadowy
Uruchom go za pomocą:
src2png.bat src2png.bat
Utwórz plik wsadowy o nazwie src2png.bat
, kopiując następującą zawartość:
@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*.
Mile widziane ulepszenia i optymalizacje.
Uwaga: Najnowsza wersja wkhtmltoimage poprawnie obsługuje nadpisywanie koloru tła. Zatem teoretycznie linia do usuwania CSS dla kolorów tła nie jest już potrzebna.
wkhtmltoimage
i ustawienie szerokości strony nie wystarcza? nie można określić wysokości, ponieważ jest ona określana na podstawie zawartości HTML. Szerokość imho jest wszystkim, czego naprawdę potrzebujesz, możesz obliczyć potrzebną szerokość na podstawie liczby pikseli na cal, którą chcesz.