Initial commit: Script MD to Print avec Docker

This commit is contained in:
syoul
2025-12-25 15:20:50 +01:00
commit daa932a0ed
12 changed files with 2754 additions and 0 deletions

360
README.md Normal file
View File

@@ -0,0 +1,360 @@
# 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:
```bash
cd MD_to_print
chmod +x md_to_print.sh
```
2. Installer les dépendances manuellement ou automatiquement:
```bash
# 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
```
3. (Optionnel) Installation système:
```bash
make install
```
### Installation avec Docker
1. Construire l'image Docker:
```bash
make build
# ou
docker build -t md-to-print:latest .
```
2. Créer les répertoires nécessaires:
```bash
mkdir -p documents output logs
```
## Utilisation
### Utilisation locale
#### Commande de base
```bash
./md_to_print.sh document.md
```
#### Avec prévisualisation
```bash
./md_to_print.sh document.md --preview
```
#### Options avancées
```bash
./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
```bash
# 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
```bash
chmod +x docker_run.sh
./docker_run.sh documents/mon_fichier.md --preview
```
#### Directement avec docker
```bash
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
```bash
# Modifier docker-compose.yml si nécessaire
docker-compose run --rm md-to-print \
/workspace/documents/document.md --preview
```
### Via Makefile
```bash
# 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`:
```ini
[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
```bash
./md_to_print.sh rapport.md
```
### Impression avec prévisualisation
```bash
./md_to_print.sh rapport.md --preview
```
### Impression recto-verso en couleur
```bash
./md_to_print.sh rapport.md --duplex duplex --color --copies 2
```
### Impression de pages spécifiques
```bash
./md_to_print.sh rapport.md --pages 1-10,15,20-25
```
### Impression paysage haute qualité
```bash
./md_to_print.sh presentation.md --orientation landscape --quality high
```
### Avec logging détaillé
```bash
./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:
```bash
sudo apt-get install cups
```
2. Configurer le partage réseau dans `/etc/cups/cupsd.conf`:
```
Listen localhost:631
Port 631
```
3. Redémarrer CUPS:
```bash
sudo systemctl restart cups
```
4. Le socket CUPS sera monté automatiquement via docker-compose.yml ou docker_run.sh
## Dépannage
### Erreur: "pandoc n'est pas installé"
```bash
./md_to_print.sh document.md --install-deps
```
### Erreur: "Imprimante non disponible"
```bash
# Lister les imprimantes disponibles
lpstat -p
# Utiliser l'imprimante par défaut
./md_to_print.sh document.md
```
### Erreur: "Permission de lecture refusée"
```bash
# 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"
```bash
# 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:
```bash
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](CHANGELOG.md) pour l'historique des versions.