ソフトウェア要件
次のソフトウェアパッケージは、WindowsシステムとLinuxシステムの両方で使用でき、完全で実用的なソリューションに必要です。
一般的な手順
ソリューションの仕組みは次のとおりです。
- 色のしぶきを追加できるエディターにソースコードを読み込みます。
- ソースコードをHTMLドキュメント(埋め込み
FONT
タグ付き)としてエクスポートします。
- HTMLドキュメントから背景属性を取り除きます(透明性を確保するため)。
- HTMLドキュメントをPNGファイルに変換します。
- PNGボーダーをトリミングします。
- 画像の周りに小さな25ピクセルの境界線を追加します。
- 一時ファイルを削除します。
このスクリプトは、長さがすべて80文字未満の行を含むソースファイルに対して、すべて同じ幅の画像を生成します。80文字を超える行を持つソースファイルは、行全体を保持するのに必要な幅の画像になります。
設置
コンポーネントを次の場所にインストールします。
- gvimを -
C:\Program Files\Vim
- モリア -
C:\Program Files\Vim\vim73\colors
- wkhtmltoimage -
C:\Program Files\wkhtml
- ImageMagickの -
C:\Program Files\ImageMagick
- gawkのとセッド -
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幅だけです。1インチあたりのピクセル数に基づいて、必要な幅を計算できます。