Initial commit: Script MD to Print avec Docker
This commit is contained in:
360
README.md
Normal file
360
README.md
Normal 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.
|
||||
|
||||
Reference in New Issue
Block a user