Requisitos de Software
Os seguintes pacotes de software estão disponíveis para sistemas Windows e Linux e são necessários para uma solução completa e funcional:
- gvim - Usado para exportar o código-fonte destacado da sintaxe para HTML.
- moria - Esquema de cores para realçar a sintaxe.
- wkhtmltoimage - Usado para converter documentos HTML em arquivos PNG.
- gawk e sed - Ferramentas de processamento de texto.
- ImageMagick - Usado para aparar o PNG e adicionar uma borda.
Etapas gerais
Aqui está como a solução funciona:
- Carregue o código-fonte em um editor que possa adicionar salpicos de cores.
- Exporte o código-fonte como um documento HTML (com
FONT
tags incorporadas ).
- Retire o atributo de plano de fundo do documento HTML (para permitir transparência).
- Converta o documento HTML em um arquivo PNG.
- Apare a borda PNG.
- Adicione uma borda pequena de 25 pixels ao redor da imagem.
- Exclua arquivos temporários.
O script gera imagens com a mesma largura para arquivos de origem que contêm linhas com menos de 80 caracteres. Os arquivos de origem com linhas com mais de 80 caracteres resultam em imagens com a largura necessária para manter toda a linha.
Instalação
Instale os componentes nos seguintes locais:
- gvim -
C:\Program Files\Vim
- moria -
C:\Program Files\Vim\vim73\colors
- wkhtmltoimage -
C:\Program Files\wkhtml
- ImageMagick -
C:\Program Files\ImageMagick
- Gawk e Sed -
C:\Program Files\GnuWin32
Nota: O ImageMagick possui um programa chamado convert.exe
, que não pode substituir o convert
comando do Windows . Por esse motivo, o caminho completo para convert.exe
deve ser codificado no arquivo em lotes (em vez de adicionar o ImageMagick ao PATH
).
variáveis ambientais
Defina a variável de ambiente PATH para:
"C:\Program Files\Vim\vim73";"C:\Program Files\wkhtml";"C:\Program Files\GnuWin32\bin"
Arquivo em lote
Execute-o usando:
src2png.bat src2png.bat
Crie um arquivo em lotes chamado src2png.bat
, copiando o seguinte conteúdo:
@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*.
Melhorias e otimizações são bem-vindas.
Nota: A versão mais recente do wkhtmltoimage manipula corretamente a substituição da cor do plano de fundo. Portanto, a linha para remover o CSS para cores de segundo plano não é mais necessária, em teoria.
wkhtmltoimage
e definir a largura da página não é suficiente? a altura não pode ser especificada, pois é determinada pelo conteúdo do material html. imho width é tudo o que você realmente precisa, você pode calcular a largura necessária com base em quantos pixels por polegada deseja.