Persyaratan Perangkat Lunak
Paket perangkat lunak berikut tersedia untuk sistem Windows dan Linux, dan diperlukan untuk solusi yang lengkap dan berfungsi:
- gvim - Digunakan untuk mengekspor sintaks yang disorot kode sumber ke HTML.
- moria - Skema warna untuk penyorotan sintaksis.
- wkhtmltoimage - Digunakan untuk mengonversi dokumen HTML ke file PNG.
- gawk and sed - Alat pengolah teks.
- ImageMagick - Digunakan untuk memotong PNG dan menambahkan perbatasan.
Langkah Umum
Inilah cara solusinya:
- Masukkan kode sumber ke editor yang dapat menambahkan percikan warna.
- Ekspor kode sumber sebagai dokumen HTML (dengan
FONT
tag yang disematkan ).
- Keluarkan atribut latar belakang dari dokumen HTML (untuk memungkinkan transparansi).
- Konversi dokumen HTML ke file PNG.
- Potong perbatasan PNG.
- Tambahkan batas 25 piksel kecil di sekitar gambar.
- Hapus file sementara.
Script menghasilkan gambar dengan lebar yang sama untuk file sumber yang berisi baris yang panjangnya di bawah 80 karakter. Sumber file dengan garis lebih dari 80 karakter menghasilkan gambar selebar yang diperlukan untuk mempertahankan seluruh baris.
Instalasi
Pasang komponen ke lokasi berikut:
- gvim -
C:\Program Files\Vim
- moria -
C:\Program Files\Vim\vim73\colors
- wkhtmltoimage -
C:\Program Files\wkhtml
- ImageMagick -
C:\Program Files\ImageMagick
- Gawk dan Sed -
C:\Program Files\GnuWin32
Catatan: ImageMagick memiliki program yang disebut convert.exe
, yang tidak dapat menggantikan convert
perintah Windows . Karena itu, path lengkap convert.exe
harus hard-coded di file batch (sebagai lawan menambahkan ImageMagick ke PATH
).
Variabel Lingkungan
Setel variabel lingkungan PATH ke:
"C:\Program Files\Vim\vim73";"C:\Program Files\wkhtml";"C:\Program Files\GnuWin32\bin"
File Batch
Jalankan menggunakan:
src2png.bat src2png.bat
Buat file batch yang dipanggil src2png.bat
dengan menyalin konten berikut:
@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*.
Perbaikan dan optimalisasi disambut baik.
Catatan: Versi terbaru wkhtmltoimage dengan benar menangani mengesampingkan warna latar belakang. Dengan demikian, garis untuk menghapus CSS untuk warna latar belakang tidak lagi diperlukan, secara teori.
wkhtmltoimage
dan mengatur lebar halaman tidak cukup? tingginya tidak dapat ditentukan karena ditentukan oleh konten barang html. lebar imho adalah yang Anda butuhkan, Anda dapat menghitung lebar yang dibutuhkan berdasarkan berapa banyak piksel per inci yang Anda inginkan.