Logiciels requis
Les progiciels suivants sont disponibles pour les systèmes Windows et Linux et sont requis pour une solution complète et fonctionnelle:
- gvim - Utilisé pour exporter le code source en surbrillance syntaxique vers HTML.
- moria - Jeu de couleurs pour la coloration syntaxique.
- wkhtmltoimage - Utilisé pour convertir des documents HTML en fichiers PNG.
- gawk and sed - Outils de traitement de texte.
- ImageMagick - Utilisé pour découper le PNG et ajouter une bordure.
Étapes générales
Voici comment fonctionne la solution:
- Chargez le code source dans un éditeur qui peut ajouter des touches de couleur.
- Exportez le code source en tant que document HTML (avec des
FONT
balises intégrées ).
- Supprimez l'attribut d'arrière-plan du document HTML (pour permettre la transparence).
- Convertissez le document HTML en fichier PNG.
- Coupez la bordure PNG.
- Ajoutez une petite bordure de 25 pixels autour de l'image.
- Supprimez les fichiers temporaires.
Le script génère des images de même largeur pour les fichiers source contenant des lignes de moins de 80 caractères. Les fichiers source avec des lignes de plus de 80 caractères donnent des images aussi larges que nécessaire pour conserver la ligne entière.
Installation
Installez les composants dans les emplacements suivants:
- gvim -
C:\Program Files\Vim
- moria -
C:\Program Files\Vim\vim73\colors
- wkhtmltoimage -
C:\Program Files\wkhtml
- ImageMagick -
C:\Program Files\ImageMagick
- Gawk et Sed -
C:\Program Files\GnuWin32
Remarque: ImageMagick a un programme appelé convert.exe
, qui ne peut pas remplacer la convert
commande Windows . Pour cette raison, le chemin complet de convert.exe
doit être codé en dur dans le fichier de commandes (par opposition à l'ajout d'ImageMagick à PATH
).
Variables d'environnement
Définissez la variable d'environnement PATH sur:
"C:\Program Files\Vim\vim73";"C:\Program Files\wkhtml";"C:\Program Files\GnuWin32\bin"
Fichier batch
Exécutez-le en utilisant:
src2png.bat src2png.bat
Créez un fichier de commandes appelé src2png.bat
en copiant le contenu suivant:
@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*.
Améliorations et optimisations bienvenues.
Remarque: La dernière version de wkhtmltoimage gère correctement la substitution de la couleur d'arrière-plan. Ainsi, la ligne pour supprimer le CSS pour les couleurs d'arrière-plan n'est plus nécessaire, en théorie.
wkhtmltoimage
et définir la largeur de la page ne suffit-il pas? la hauteur ne peut pas être spécifiée car elle est déterminée par le contenu du contenu html. la largeur à mon humble est tout ce dont vous avez réellement besoin, vous pouvez calculer la largeur nécessaire en fonction du nombre de pixels par pouce que vous souhaitez.