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

# Import i eksport Pandoc

### Import/Eksport Pandoc

Overleaf może konwertować dokumenty do i z LaTeX za pomocą [Pandoc](https://pandoc.org/). Konwersja odbywa się wewnątrz **odizolowanego kontenera Docker** zarządzanego przez `clsi` usługę, więc funkcja jest domyślnie wyłączona i trzeba ją włączyć za pomocą kilku zmiennych środowiskowych.

#### Co robi

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

***

### Zmienne środowiskowe

Są **dwie** zmienne, które mają znaczenie, oraz jedna podobnie wyglądająca, która nie **nie**.

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

```bash
ENABLE_PANDOC_CONVERSIONS=true
```

* Typ: boolean (`true` włącza; wszystko inne wyłącza).
* **Musi być ustawiona na OBU `web` i `clsi` usługach.** To oddzielne procesy z oddzielną konfiguracją:
  * `web` odczytuje to do `enablePandocConversions` (`services/web/config/settings.defaults.js`). Steruje trasami importu, trasami eksportu i `ol-ExposedSettings.enablePandocConversions` flagą, która informuje frontend, czy pokazać interfejs Import/Eksport.
  * `clsi` odczytuje to do `enablePandocConversions` (`services/clsi/config/settings.defaults.cjs`). Steruje punktami końcowymi, które uruchamiają Pandoc.
* Jeśli jest włączona 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 sandboxowym z dostępem do Dockera.** W stosie deweloperskim `clsi` już ma `SANDBOXED_COMPILES=true` i zamontowany hostowy socket Dockera (`/var/run/docker.sock`).
2. **Ta `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 lokalny **raz** przed użyciem funkcji:

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

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

***

### Budowanie obrazu Pandoc

Standardowy obraz Pandoc działa, ponieważ clsi wywołuje Pandoc w sposób ogólny (bez własnych szablonów/filtrów). Potrzebuje tylko trzech podstawowych elementów czasu uruchomienia, a wszystko to obsługuje `develop/pandoc/Dockerfile`:

```dockerfile
# Własny obraz Pandoc do sandboxowanych konwersji clsi
# (import/eksport: docx / markdown / html, przez ENABLE_PANDOC_CONVERSIONS).
#
# Dlaczego to istnieje:
#   Oficjalny obraz quay.io/sharelatex/pandoc:3.9 jest prywatny (401, nie można pobrać).
#   clsi wywołuje pandoc w sposób ogólny (bez własnych szablonów/filtrów/reference-doc), więc
#   standardowy obraz pandoc działa — potrzebuje tylko trzech podstawowych elementów czasu uruchomienia, których clsi oczekuje:
#
#   1. Brak ENTRYPOINT `pandoc` — clsi uruchamia Cmd ["pandoc", ...]; z domyślnym
#      entrypointem stałoby się to `pandoc pandoc ...`.
#   2. `zip` — drugi krok konwersji importu uruchamia `zip -r`, aby spakować wynik.
#   3. Użytkownicy dopasowani do sposobu, w jaki clsi uruchamia kontener konwersji (User=$TEXLIVE_IMAGE_USER):
#        - `tex` z UID 1000 — domyślne dla dev / mikroserwisów.
#        - `www-data` z UID 33 — kontenery sandboxowe Server Pro *sibling* ustawiają
#          TEXLIVE_IMAGE_USER=www-data (zob. /etc/overleaf/env.sh). clsi (uruchomione jako
#          www-data) tworzy katalog konwersji należący do 33:33, więc kontener musi działać
#          jako www-data(33), aby móc w nim zapisywać — inaczej pandoc kończy się błędem
#          „nie można odnaleźć użytkownika www-data” albo „odmowa dostępu”.
#      Alpine ma już grupę `www-data` z GID 82, więc zmieniamy ją na GID 33, aby
#      dopasować do hosta/obrazu texlive.
#
# Budowanie (tag musi pasować do 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). Zamiast tego przypnij do konkretnego
# tagu 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 oznacz go tagiem tak, aby tag pasował `PANDOC_IMAGE`:

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

W produkcji przypnij `pandoc/core` do konkretnej wersji zamiast `latest` dla odtwarzalnych kompilacji i ustaw `PANDOC_IMAGE` na ścieżkę w swoim rejestrze.

***

### Rozwiązywanie problemów

| Objaw                                                          | Prawdopodobna przyczyna                                                                         |
| -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| Przyciski Import/Eksport się nie pojawiają                     | `ENABLE_PANDOC_CONVERSIONS` nie `true` na **web**                                               |
| Interfejs się pojawia, ale konwersja kończy się błędem serwera | `ENABLE_PANDOC_CONVERSIONS` nie ustawiono na **clsi**, lub `PANDOC_IMAGE` brak na hoście Docker |
| `clsi` błąd pobierania obrazu (401)                            | `PANDOC_IMAGE` wciąż wskazuje na prywatny domyślny obraz; zbuduj/wskaż swój 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 plikach po konwersji                      | Obraz nie ma użytkownika `tex` 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://overleaf-pro.ayaka.space/on-premises/pl/konfiguracja/overleaf-toolkit/import-i-eksport-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.
