361 lines
8.6 KiB
Markdown
361 lines
8.6 KiB
Markdown
# 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.
|
|
|