> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-pro.ayaka.space/on-premises/fr/configuration/overleaf-toolkit/pandoc-import-and-export.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 isolé** géré par le `clsi` service, donc la fonctionnalité est désactivée par défaut et doit être activée à l'aide de quelques variables d'environnement.

#### Ce que cela fait

| 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* (rendu du projet via Pandoc)                                     |

***

### Variables d’environnement

Il y a **deux** variables qui comptent, et une variante similaire qui ne **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 distincts avec une configuration distincte :
  * `web` le lit dans `enablePandocConversions` (`services/web/config/settings.defaults.js`). Il contrôle les routes d'importation, les routes d'exportation et le `drapeau ol-ExposedSettings.enablePandocConversions` qui indique au frontend s'il faut afficher l'interface Import/Export.
  * `clsi` le lit dans `enablePandocConversions` (`services/clsi/config/settings.defaults.cjs`). Il contrôle 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 de conteneur que clsi exécute pour convertir

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

### Prérequis

Comme les conversions s'exécutent dans des conteneurs Docker lancés par `clsi`:

1. **`clsi` doit s'exécuter en mode isolé avec accès à Docker.** Dans la pile de développement `clsi` a déjà `SANDBOXED_COMPILES=true` et le socket Docker de l'hôte (`/var/run/docker.sock`) monté.
2. **Le `PANDOC_IMAGE` doit être présent** sur cet hôte Docker (récupérée ou construite localement) avant la première conversion.

***

### Configuration rapide

La pile de développement (`develop/dev.env`) fournit 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
```

Puis redémarrez (ou lancez de nouveau) la pile pour que `clsi` et `web` récupèrent les variables.

***

### Construction de l'image Pandoc

Une image Pandoc standard fonctionne car clsi invoque 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 isolé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 à récupérer).
#   clsi invoque pandoc de manière générique (sans templates/filtres/reference-doc personnalisés), donc une
#   image pandoc standard fonctionne — elle a juste besoin de trois éléments essentiels à l'exécution que clsi suppose :
#
#   1. Pas de ENTRYPOINT `pandoc` — clsi exécute Cmd ["pandoc", ...] ; avec le
#      entrypoint par défaut cela deviendrait `pandoc pandoc ...`.
#   2. `zip` — la deuxième étape de la conversion d'importation 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 UID 1000 — valeur par défaut de dev / microservices.
#        - `www-data` avec UID 33 — les conteneurs *frères* isolé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 avec soit
#          "utilisateur www-data introuvable" ou "permission denied".
#      Alpine fournit déjà un groupe `www-data` avec le GID 82, donc nous le déplaçons vers le GID 33 pour
#      correspondre à l'image hôte/texlive.
#
# Construction (la balise doit correspondre à PANDOC_IMAGE dans develop/dev.env) :
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Remarque : épinglé à `latest` (pandoc 3.10 au moment de la rédaction). Épinglez à une
# balise pandoc/core spécifique pour des compilations parfaitement 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 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 compilations 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` non 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 le défaut privé ; construisez/pointez vers votre propre image |
| Le conteneur s'exécute `pandoc pandoc …` / mauvais arguments           | L'image a un `pandoc` `ENTRYPOINT` ; utilisez `ENTRYPOINT []`                                     |
| La sortie d'importation 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` à 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://ayakaleaf-pro.ayaka.space/on-premises/fr/configuration/overleaf-toolkit/pandoc-import-and-export.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.
