Requisitos de Software
Los siguientes paquetes de software están disponibles para sistemas Windows y Linux, y son necesarios para una solución completa y funcional:
- gvim : se utiliza para exportar el código fuente resaltado de sintaxis a HTML.
- moria : esquema de color para resaltado de sintaxis.
- wkhtmltoimage : se utiliza para convertir documentos HTML en archivos PNG.
- gawk and sed : herramientas de procesamiento de texto.
- ImageMagick : se utiliza para recortar el PNG y agregar un borde.
Pasos generales
Así es como funciona la solución:
- Cargue el código fuente en un editor que pueda agregar salpicaduras de color.
- Exporte el código fuente como un documento HTML (con
FONT
etiquetas incrustadas ).
- Pele el atributo de fondo del documento HTML (para permitir la transparencia).
- Convierta el documento HTML en un archivo PNG.
- Recorte el borde PNG.
- Agregue un pequeño borde de 25 píxeles alrededor de la imagen.
- Eliminar archivos temporales.
El script genera imágenes que tienen el mismo ancho para los archivos de origen que contienen líneas que tienen menos de 80 caracteres de longitud. Los archivos de origen con líneas de más de 80 caracteres de largo dan como resultado imágenes tan anchas como sea necesario para retener toda la línea.
Instalación
Instale los componentes en las siguientes ubicaciones:
- gvim -
C:\Program Files\Vim
- Moria -
C:\Program Files\Vim\vim73\colors
- wkhtmltoimage -
C:\Program Files\wkhtml
- ImageMagick -
C:\Program Files\ImageMagick
- Gawk y Sed -
C:\Program Files\GnuWin32
Nota: ImageMagick tiene un programa llamado convert.exe
, que no puede reemplazar el convert
comando de Windows . Debido a esto, la ruta completa convert.exe
debe estar codificada en el archivo por lotes (en lugar de agregar ImageMagick a PATH
).
Variables de entorno
Establezca la variable de entorno PATH en:
"C:\Program Files\Vim\vim73";"C:\Program Files\wkhtml";"C:\Program Files\GnuWin32\bin"
Archivo por lotes
Ejecútelo usando:
src2png.bat src2png.bat
Cree un archivo src2png.bat
por lotes llamado copiando los siguientes contenidos:
@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*.
Mejoras y optimizaciones bienvenidas.
Nota: La última versión de wkhtmltoimage maneja correctamente la anulación del color de fondo. Por lo tanto, la línea para eliminar el CSS para los colores de fondo ya no es necesaria, en teoría.
wkhtmltoimage
y establecer el ancho de la página no es suficiente? la altura no se puede especificar ya que está determinada por el contenido del contenido html. En realidad, todo lo que realmente necesita es ancho, puede calcular el ancho necesario en función de la cantidad de píxeles por pulgada que desee.