MD_to_Print - Script automatique Markdown → PDF → Impression

Application CLI complète pour convertir des fichiers Markdown en PDF et les imprimer automatiquement sur Debian/Linux, avec support Docker, prévisualisation, options d'impression avancées, et gestion d'erreurs robuste.

Fonctionnalités

  • Conversion automatique Markdown → PDF avec Pandoc
  • Prévisualisation avant impression (evince/okular/xdg-open)
  • Options d'impression avancées (copies, pages, orientation, qualité, couleur, recto-verso)
  • Fichier de configuration optionnel (format INI)
  • Installation automatique des dépendances
  • Support Docker pour isolation et portabilité
  • Gestion d'erreurs complète avec codes de retour appropriés
  • Système de logging détaillé avec niveaux (DEBUG, INFO, WARN, ERROR)
  • Interface en ligne de commande avec options complètes

Installation

Installation locale

  1. Cloner ou télécharger le projet:
cd MD_to_print
chmod +x md_to_print.sh
  1. Installer les dépendances manuellement ou automatiquement:
# Installation automatique
./md_to_print.sh --install-deps

# Ou installation manuelle
sudo apt-get update
sudo apt-get install -y pandoc texlive-latex-base texlive-fonts-recommended \
    texlive-latex-extra texlive-lang-french cups
  1. (Optionnel) Installation système:
make install

Installation avec Docker

  1. Construire l'image Docker:
make build
# ou
docker build -t md-to-print:latest .
  1. Créer les répertoires nécessaires:
mkdir -p documents output logs

Utilisation

Utilisation locale

Commande de base

./md_to_print.sh document.md

Avec prévisualisation

./md_to_print.sh document.md --preview

Options avancées

./md_to_print.sh document.md \
    --printer HP_LaserJet \
    --copies 2 \
    --color \
    --duplex duplex \
    --quality high \
    --pages 1-5 \
    --orientation landscape \
    --keep-pdf

Avec fichier de configuration

# Créer votre configuration
cp config.example.conf config.conf
# Éditer config.conf selon vos besoins

# Utiliser la configuration
./md_to_print.sh document.md --config config.conf

Utilisation avec Docker

Via le wrapper script

chmod +x docker_run.sh
./docker_run.sh documents/mon_fichier.md --preview

Directement avec docker

docker run --rm -it \
    -v $(pwd)/documents:/workspace/documents:ro \
    -v $(pwd)/output:/workspace/output \
    -v $(pwd)/logs:/workspace/logs \
    --network host \
    md-to-print:latest \
    /workspace/documents/document.md --preview

Via Docker Compose

# Modifier docker-compose.yml si nécessaire
docker-compose run --rm md-to-print \
    /workspace/documents/document.md --preview

Via Makefile

# Construire l'image
make build

# Tester avec fichier exemple
make test

# Ouvrir un shell dans le conteneur
make shell

# Nettoyer les fichiers générés
make clean

Options disponibles

Option Description Défaut
-p, --preview Prévisualiser le PDF avant impression false
-P, --printer NOM Spécifier l'imprimante Imprimante système
-c, --copies N Nombre de copies 1
-r, --pages RANGE Pages à imprimer (ex: 1-3,5,7-9) Toutes
-o, --orientation DIR Orientation (portrait/landscape) portrait
-s, --size SIZE Taille du papier (A4, A3, Letter, etc.) A4
-q, --quality QUALITY Qualité (draft, normal, high) normal
-C, --color Impression en couleur false
-d, --duplex MODE Mode recto-verso (none, simplex, duplex) none
-i, --install-deps Installer les dépendances automatiquement false
-k, --keep-pdf Conserver le fichier PDF après impression false
--config FILE Fichier de configuration Aucun
-v, --verbose Mode verbeux (logging DEBUG) false
-l, --log FILE Fichier de log Aucun
-h, --help Afficher l'aide -
--version Afficher la version -

Configuration

Le fichier de configuration utilise le format INI avec trois sections:

Section [default]

Options d'impression par défaut (printer, copies, orientation, size, quality, color, duplex, preview, keep_pdf)

Section [paths]

Chemins des répertoires (output_dir, log_dir)

Section [logging]

Paramètres de logging (level, file, verbose)

Exemple de fichier config.conf:

[default]
printer=HP_LaserJet
copies=1
orientation=portrait
size=A4
quality=normal
color=false
duplex=none
preview=false
keep_pdf=false

[paths]
output_dir=./output
log_dir=./logs

[logging]
level=INFO
file=md_to_print.log
verbose=false

Structure du projet

MD_to_print/
├── md_to_print.sh          # Script principal
├── config.example.conf      # Fichier de configuration exemple
├── Dockerfile               # Configuration Docker
├── docker-compose.yml       # Configuration Docker Compose
├── docker_run.sh            # Wrapper Docker
├── Makefile                 # Commandes Make
├── .dockerignore            # Fichiers à exclure du build Docker
├── .gitignore               # Fichiers à ignorer dans Git
├── README.md                # Documentation (ce fichier)
├── CHANGELOG.md             # Historique des versions
├── documents/               # Fichiers Markdown sources
├── output/                  # PDFs générés
└── logs/                    # Fichiers de logs

Exemples d'utilisation

Impression simple

./md_to_print.sh rapport.md

Impression avec prévisualisation

./md_to_print.sh rapport.md --preview

Impression recto-verso en couleur

./md_to_print.sh rapport.md --duplex duplex --color --copies 2

Impression de pages spécifiques

./md_to_print.sh rapport.md --pages 1-10,15,20-25

Impression paysage haute qualité

./md_to_print.sh presentation.md --orientation landscape --quality high

Avec logging détaillé

./md_to_print.sh document.md --verbose --log mon_log.txt

Codes de retour

Code Signification
0 Succès
1 Erreur générale
2 Fichier introuvable
3 Dépendances manquantes
4 Erreur conversion PDF
5 Erreur impression
6 Erreur configuration
7 Erreur Docker
8 Permissions insuffisantes
9 Argument invalide
10 Imprimante non disponible

Configuration de l'impression dans Docker

Pour que l'impression fonctionne depuis Docker, vous devez configurer l'accès à CUPS:

  1. Installer CUPS sur l'hôte:
sudo apt-get install cups
  1. Configurer le partage réseau dans /etc/cups/cupsd.conf:
Listen localhost:631
Port 631
  1. Redémarrer CUPS:
sudo systemctl restart cups
  1. Le socket CUPS sera monté automatiquement via docker-compose.yml ou docker_run.sh

Dépannage

Erreur: "pandoc n'est pas installé"

./md_to_print.sh document.md --install-deps

Erreur: "Imprimante non disponible"

# Lister les imprimantes disponibles
lpstat -p

# Utiliser l'imprimante par défaut
./md_to_print.sh document.md

Erreur: "Permission de lecture refusée"

# Vérifier les permissions du fichier
ls -l document.md

# Donner les permissions de lecture
chmod +r document.md

Erreur Docker: "Cannot connect to the Docker daemon"

# Vérifier que Docker est démarré
sudo systemctl status docker

# Démarrer Docker si nécessaire
sudo systemctl start docker

# Ajouter votre utilisateur au groupe docker
sudo usermod -aG docker $USER
# Déconnexion/reconnexion nécessaire

Prévisualisation ne fonctionne pas dans Docker

La prévisualisation graphique nécessite l'accès X11. Assurez-vous que:

  • DISPLAY est défini dans votre environnement
  • /tmp/.X11-unix est accessible
  • Les permissions X11 sont correctes:
xhost +local:docker

Dépendances

Dépendances système

  • pandoc
  • texlive-latex-base
  • texlive-fonts-recommended
  • texlive-latex-extra
  • texlive-lang-french (support français)
  • cups (pour l'impression)
  • evince ou okular (pour la prévisualisation, optionnel)

Toutes les dépendances sont installées automatiquement avec l'option --install-deps ou dans l'image Docker.

Contribution

Les contributions sont les bienvenues! N'hésitez pas à:

  • Signaler des bugs
  • Proposer des améliorations
  • Soumettre des pull requests

Licence

Ce projet est fourni tel quel, sans garantie.

Auteur

MD_to_Print - Script automatique Markdown → PDF → Impression

Historique

Voir CHANGELOG.md pour l'historique des versions.

Description
No description provided
Readme 97 KiB
Languages
Shell 91.6%
Makefile 5.5%
Dockerfile 2.9%