> 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/pl/konfiguracja/overleaf-toolkit/pandoc-import-and-export.md).

# Import i eksport Pandoc

### Import / eksport Pandoc

Overleaf może konwertować dokumenty do i z LaTeX przy użyciu [Pandoc](https://pandoc.org/). Konwersja uruchamia się w **odizolowanym kontenerze Docker** zarządzanym przez `clsi` usługę, więc funkcja jest domyślnie wyłączona i trzeba ją włączyć kilkoma zmiennymi środowiskowymi.

#### Co robi

| Kierunek    | Z → Do                   | Formaty                    | Gdzie                                                                                        |
| ----------- | ------------------------ | -------------------------- | -------------------------------------------------------------------------------------------- |
| **Import**  | dokument → projekt LaTeX | `docx`, `markdown`         | *Nowy projekt → Import* (przesyła `.docx` / `.md` i zamienia go w edytowalny `.tex` projekt) |
| **Eksport** | projekt LaTeX → dokument | `docx`, `markdown`, `html` | *Menu → Pobierz / eksport* (renderuje projekt przez Pandoc)                                  |

***

### Zmienne środowiskowe

Są **dwie** istotne zmienne i jedna podobna, która robi **nie**.

1\. `ENABLE_PANDOC_CONVERSIONS` — główny przełącznik

```bash
ENABLE_PANDOC_CONVERSIONS=true
```

* Typ: boolean (`true` włącza ją; wszystko inne ją wyłącza).
* **Musi być ustawione na OBU `web` i `clsi` usługach.** To oddzielne procesy z oddzielną konfiguracją:
  * `web` odczytuje to do `enablePandocConversions` (`services/web/config/settings.defaults.js`). Kontroluje trasy importu, trasy eksportu oraz `ol-ExposedSettings.enablePandocConversions` flagi, która mówi frontendowi, czy pokazać interfejs Import/Eksport.
  * `clsi` odczytuje to do `enablePandocConversions` (`services/clsi/config/settings.defaults.cjs`). Kontroluje punkty końcowe uruchamiające Pandoc.
* Jeśli jest włączone na `web` ale nie na `clsi` (lub odwrotnie), interfejs będzie widoczny, ale konwersja się nie powiedzie — utrzymuj je w synchronizacji.

2\. `PANDOC_IMAGE` — obraz kontenera, który clsi uruchamia do konwersji

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

### Wymagania wstępne

Ponieważ konwersje działają jako kontenery Docker uruchamiane przez `clsi`:

1. **`clsi` musi działać w trybie sandbox z dostępem do Dockera.** W stosie deweloperskim `clsi` już ma `SANDBOXED_COMPILES=true` i gniazdo Docker hosta (`/var/run/docker.sock`) zamontowane.
2. **Pole `PANDOC_IMAGE` musi być obecny** na tym hoście Docker (pobrany lub zbudowany lokalnie) przed pierwszą konwersją.

***

### Szybka konfiguracja

Stos deweloperski (`develop/dev.env`) już zawiera:

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

Ponieważ oficjalny obraz jest prywatny, zbuduj dołączony **raz** przed użyciem tej funkcji:

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

Następnie (ponownie) uruchom stos, aby `clsi` i `web` pobrał zmienne.

***

### Budowanie obrazu Pandoc

Standardowy obraz Pandoc działa, ponieważ clsi wywołuje Pandoc w sposób ogólny (bez niestandardowych szablonów/filtrów). Potrzebuje tylko trzech niezbędnych elementów w czasie działania, z których wszystkie obsługuje `develop/pandoc/Dockerfile`:

```dockerfile
# Niestandardowy obraz Pandoc dla sandboxowych konwersji clsi
# (import/eksport: docx / markdown / html, przez ENABLE_PANDOC_CONVERSIONS).
#
# Po co to istnieje:
#   Oficjalny obraz quay.io/sharelatex/pandoc:3.9 jest prywatny (401, nie można go pobrać).
#   clsi wywołuje pandoc w sposób ogólny (bez niestandardowych szablonów/filtrów/reference-doc), więc
#   standardowy obraz pandoc działa — potrzebuje tylko trzech niezbędnych elementów w czasie działania, których clsi zakłada obecność:
#
#   1. Brak `pandoc` ENTRYPOINT — clsi uruchamia Cmd ["pandoc", ...]; z domyślnym
#      entrypointem byłoby to `pandoc pandoc ...`.
#   2. `zip` — drugi krok konwersji importu uruchamia `zip -r`, aby spakować wynik.
#   3. Użytkownicy zgodni z tym, jak clsi uruchamia kontener konwersji (User=$TEXLIVE_IMAGE_USER):
#        - `tex` z UID 1000 — domyślnie w dev / microservices.
#        - `www-data` z UID 33 — sandboxowe kontenery *rodzeństwa* Server Pro ustawiają
#          TEXLIVE_IMAGE_USER=www-data (zob. /etc/overleaf/env.sh). clsi (działający jako
#          www-data) tworzy katalog konwersji należący do 33:33, więc kontener musi działać
#          jako www-data(33), aby móc do niego zapisywać — w przeciwnym razie pandoc kończy się jednym z błędów
#          „unable to find user www-data” albo „permission denied”.
#      Alpine już dostarcza grupę `www-data` z GID 82, więc przenosimy ją na GID 33, aby
#      dopasować się do hosta/obrazu texlive.
#
# Zbuduj (tag musi odpowiadać PANDOC_IMAGE w develop/dev.env):
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Uwaga: przypięte do `latest` (pandoc 3.10 w chwili pisania). Przypnij do konkretnego
# taga pandoc/core, aby uzyskać w pełni odtwarzalne kompilacje.
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
```

Zbuduj i otaguj go tak, aby tag odpowiadał `PANDOC_IMAGE`:

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

W produkcji przypnij `pandoc/core` do konkretnej wersji zamiast `latest` dla odtwarzalnych kompilacji, oraz ustaw `PANDOC_IMAGE` na ścieżkę swojego rejestru.

***

### Rozwiązywanie problemów

| Objaw                                                          | Prawdopodobna przyczyna                                                                          |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| Przyciski Import/Eksport nie pojawiają się                     | `ENABLE_PANDOC_CONVERSIONS` nie `true` na **web**                                                |
| Interfejs pojawia się, ale konwersja kończy się błędem serwera | `ENABLE_PANDOC_CONVERSIONS` nie ustawione na **clsi**, albo `PANDOC_IMAGE` brak na hoście Docker |
| `clsi` błąd pobierania obrazu (401)                            | `PANDOC_IMAGE` nadal wskazuje prywatny domyślny; zbuduj/wskaż własny obraz                       |
| Kontener uruchamia `pandoc pandoc …` / nieprawidłowe argumenty | Obraz ma `pandoc` `ENTRYPOINT`; użyj `ENTRYPOINT []`                                             |
| Wynik importu jest pusty / krok zip kończy się niepowodzeniem  | `zip` nie jest zainstalowany w obrazie                                                           |
| Błędy uprawnień przy przekonwertowanych plikach                | Obraz nie ma `tex` użytkownika z 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/pl/konfiguracja/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.
