> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/on-premises/fr/configuration/overleaf-toolkit/import-et-export-pandoc.md).

# Import et export Pandoc

### Importation / exportation Pandoc

Overleaf peut convertir des documents vers et depuis LaTeX en utilisant [Pandoc](https://pandoc.org/). La conversion s’exécute dans un **conteneur Docker sandboxé** géré par le `clsi` service, donc la fonctionnalité est désactivée par défaut et doit être activée avec quelques variables d’environnement.

#### Fonctionnement

| Direction       | De → Vers               | Formats                    | Où                                                                                               |
| --------------- | ----------------------- | -------------------------- | ------------------------------------------------------------------------------------------------ |
| **Importation** | document → projet LaTeX | `docx`, `markdown`         | *Nouveau projet → Importer* (importe un `.docx` / `.md` et le transforme en un `.tex` modifiable |
| **Exportation** | projet LaTeX → document | `docx`, `markdown`, `html` | *Menu → Télécharger / Exporter* (rende le projet via Pandoc)                                     |

***

### variables d’environnement

Il y a **deux** variables qui comptent, et une qui y ressemble qui le fait **ne pas**.

1\. `ENABLE_PANDOC_CONVERSIONS` — l’interrupteur principal

```bash
ENABLE_PANDOC_CONVERSIONS=true
```

* Type : booléen (`true` l’active ; toute autre valeur la désactive).
* **Doit être défini sur les DEUX `web` et `clsi` services.** Ce sont des processus séparés avec une configuration distincte :
  * `web` le lit dans `enablePandocConversions` (`services/web/config/settings.defaults.js`). Il conditionne les routes d’import, les routes d’export, et le `ol-ExposedSettings.enablePandocConversions` indicateur qui indique au frontend s’il doit afficher l’interface Import/Export.
  * `clsi` le lit dans `enablePandocConversions` (`services/clsi/config/settings.defaults.cjs`). Il conditionne les points de terminaison qui exécutent Pandoc.
* S’il est activé sur `web` mais pas sur `clsi` (ou inversement), l’interface apparaîtra mais la conversion échouera — gardez-les synchronisés.

2\. `PANDOC_IMAGE` — l’image du conteneur que clsi exécute pour convertir

```bash
PANDOC_IMAGE=your-repo/pandoc:3.9
```

### Prérequis

Parce que les conversions s’exécutent sous forme de conteneurs Docker lancés par `clsi`:

1. **`clsi` doit fonctionner en mode sandboxé avec accès à Docker.** Dans la pile de dev `clsi` dispose déjà de `SANDBOXED_COMPILES=true` et du socket Docker de l’hôte (`/var/run/docker.sock`) montés.
2. **Le `PANDOC_IMAGE` doit être présent** sur cet hôte Docker (tiré ou construit localement) avant la première conversion.

***

### Configuration rapide

La pile de dev (`develop/dev.env`) inclut déjà :

```bash
ENABLE_PANDOC_CONVERSIONS=true
PANDOC_IMAGE=overleaf-pandoc:local
```

Comme l’image officielle est privée, construisez celle fournie **une fois** avant d’utiliser la fonctionnalité :

```bash
docker build -t overleaf-pandoc:local develop/pandoc
```

Ensuite, redémarrez (ou relancez) la pile pour que `clsi` et `web` récupèrent les variables.

***

### Construction de l’image Pandoc

Une image Pandoc standard fonctionne car clsi appelle Pandoc de manière générique (sans modèles/filtres personnalisés). Elle n’a besoin que de trois éléments essentiels à l’exécution, tous gérés par `develop/pandoc/Dockerfile`:

```dockerfile
# Image Pandoc personnalisée pour les conversions sandboxées de clsi
# (import/export : docx / markdown / html, via ENABLE_PANDOC_CONVERSIONS).
#
# Pourquoi cela existe :
#   L’image officielle quay.io/sharelatex/pandoc:3.9 est privée (401, impossible à tirer).
#   clsi invoque pandoc de manière générique (pas de templates/filtres/reference-doc personnalisés), donc une
#   image pandoc standard fonctionne — elle a seulement besoin de trois éléments essentiels à l’exécution que clsi suppose :
#
#   1. Pas de ENTRYPOINT `pandoc` — clsi exécute Cmd ["pandoc", ...] ; avec l’
#      entrypoint par défaut, cela deviendrait `pandoc pandoc ...`.
#   2. `zip` — la deuxième étape de la conversion d’import exécute `zip -r` pour empaqueter la sortie.
#   3. Utilisateurs correspondant à la façon dont clsi exécute le conteneur de conversion (User=$TEXLIVE_IMAGE_USER) :
#        - `tex` avec l’UID 1000 — valeur par défaut de dev / microservices.
#        - `www-data` avec l’UID 33 — les conteneurs *sibling* sandboxés de Server Pro définissent
#          TEXLIVE_IMAGE_USER=www-data (voir /etc/overleaf/env.sh). clsi (exécuté en tant que
#          www-data) crée le répertoire de conversion appartenant à 33:33, donc le conteneur doit s’exécuter
#          en tant que www-data(33) pour y écrire — sinon pandoc échoue soit avec
#          « impossible de trouver l’utilisateur www-data » soit avec « permission refusée ».
#      Alpine fournit déjà un groupe `www-data` avec le GID 82, nous le déplaçons au GID 33 pour
#      correspondre à l’image hôte/texlive.
#
# Construction (le tag doit correspondre à PANDOC_IMAGE dans develop/dev.env) :
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Remarque : épinglé sur `latest` (pandoc 3.10 au moment de la rédaction). Épinglez sur une
# balise pandoc/core spécifique pour des builds entièrement reproductibles.
FROM pandoc/core:latest

ENTRYPOINT []

RUN apk add --no-cache zip \
 && adduser -D -u 1000 tex \
 && (delgroup www-data 2>/dev/null || true) \
 && addgroup -g 33 www-data \
 && adduser -D -u 33 -G www-data www-data
```

Construisez-la et étiquetez-la de sorte que la balise corresponde à `PANDOC_IMAGE`:

```bash
docker build -t overleaf-pandoc:local develop/pandoc
```

Pour la production, épinglez `pandoc/core` à une version spécifique au lieu de `latest` pour des builds reproductibles, et définissez `PANDOC_IMAGE` sur le chemin de votre registre.

***

### Dépannage

| Symptôme                                                               | Cause probable                                                                                                     |
| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| Les boutons Importer/Exporter n’apparaissent pas                       | `ENABLE_PANDOC_CONVERSIONS` ne pas `true` sur **web**                                                              |
| L’interface apparaît mais la conversion échoue avec une erreur serveur | `ENABLE_PANDOC_CONVERSIONS` n’est pas défini sur **clsi**, ou `PANDOC_IMAGE` manquant sur l’hôte Docker            |
| `clsi` erreur lors de la récupération de l’image (401)                 | `PANDOC_IMAGE` pointe toujours vers la valeur par défaut privée ; construisez/dirigez-vous vers votre propre image |
| Le conteneur s’exécute `pandoc pandoc …` / mauvais arguments           | L’image a un `pandoc` `ENTRYPOINT` ; utilisez `ENTRYPOINT []`                                                      |
| La sortie d’import est vide / l’étape zip échoue                       | `zip` n’est pas installé dans l’image                                                                              |
| Erreurs d’autorisation sur les fichiers convertis                      | L’image n’a pas d’utilisateur `tex` au niveau de l’UID 1000                                                        |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/on-premises/fr/configuration/overleaf-toolkit/import-et-export-pandoc.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
