> 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/fi/maaritys/overleaf-toolkit/pandoc-tuonti-ja-vienti.md).

# Pandoc-tuonti ja -vienti

### Pandoc-tuonti / vienti

Overleaf voi muuntaa asiakirjoja LaTeXiin ja LaTeXista käyttäen [Pandoc](https://pandoc.org/). Muunnos suoritetaan sisällä **eristetyssä Docker-kontissa** jonka hallinnoi `clsi` palvelu, joten ominaisuus on oletusarvoisesti pois päältä ja se on otettava käyttöön parilla ympäristömuuttujalla.

#### Mitä se tekee

| Suunta     | Mistä → mihin              | Tiedostomuodot             | Missä                                                                                         |
| ---------- | -------------------------- | -------------------------- | --------------------------------------------------------------------------------------------- |
| **Tuonti** | asiakirja → LaTeX-projekti | `docx`, `markdown`         | *Uusi projekti → Tuo* (lataa `.docx` / `.md` ja muuntaa sen muokattavaksi `.tex` projektiksi) |
| **Vienti** | LaTeX-projekti → asiakirja | `docx`, `markdown`, `html` | *Valikko → Lataa / Vie* (renderöi projektin Pandocin kautta)                                  |

***

### Ympäristömuuttujat

On **kaksi** muuttujaa, joilla on merkitystä, ja yksi samannäköinen, joka **ei**.

1\. `ENABLE_PANDOC_CONVERSIONS` — pääkytkin

```bash
ENABLE_PANDOC_CONVERSIONS=true
```

* Tyyppi: totuusarvo (`true` ottaa sen käyttöön; mikä tahansa muu poistaa sen käytöstä).
* **On asetettava MOLEMPIIN `web` ja `clsi` palveluihin.** Ne ovat erillisiä prosesseja, joilla on erilliset asetukset:
  * `web` lukee sen `enablePandocConversions` (`services/web/config/settings.defaults.js`). Se rajoittaa tuontireitit, vientireitit ja `ol-ExposedSettings.enablePandocConversions` lipun, joka kertoo käyttöliittymälle, näytetäänkö Tuonti/Vienti-käyttöliittymä.
  * `clsi` lukee sen `enablePandocConversions` (`services/clsi/config/settings.defaults.cjs`). Se rajoittaa päätepisteet, jotka ajavat Pandocia.
* Jos se on käytössä `web` mutta ei `clsi` (tai päinvastoin), käyttöliittymä näkyy mutta muunnos epäonnistuu — pidä ne synkronoituina.

2\. `PANDOC_IMAGE` — konttikuva, jota clsi käyttää muuntamiseen

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

### Edellytykset

Koska muunnokset ajetaan Docker-kontteina, joita käynnistää `clsi`:

1. **`clsi` sen on toimittava eristetyssä tilassa Docker-yhteydellä.** Kehitysympäristössä `clsi` on jo `SANDBOXED_COMPILES=true` ja isäntä-Dockerin socket (`/var/run/docker.sock`) liitettynä.
2. **Kentän `PANDOC_IMAGE` on oltava olemassa** kyseisellä Docker-isännällä (vedettynä tai rakennettuna paikallisesti) ennen ensimmäistä muunnosta.

***

### Pika-asennus

Kehitysympäristö (`develop/dev.env`) sisältää jo:

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

Koska virallinen kuva on yksityinen, rakenna mukana tuleva **kerran** ennen ominaisuuden käyttöä:

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

Sitten käynnistä pino (uudelleen), jotta `clsi` ja `web` ottaa muuttujat käyttöön.

***

### Pandoc-kuvan rakentaminen

Vakiomuotoinen Pandoc-kuva toimii, koska clsi kutsuu Pandocia yleisellä tavalla (ei mukautettuja malleja/suodattimia). Se tarvitsee vain kolme ajonaikaista perusasiaa, joista huolehtii `develop/pandoc/Dockerfile`:

```dockerfile
# Mukautettu Pandoc-kuva clsin eristettyihin muunnoksiin
# (tuonti/vienti: docx / markdown / html, ENABLE_PANDOC_CONVERSIONSin kautta).
#
# Miksi tämä on olemassa:
#   Virallinen quay.io/sharelatex/pandoc:3.9 -kuva on yksityinen (401, ei voi vetää).
#   clsi kutsuu pandocia yleisesti (ei mukautettuja malleja/suodattimia/reference-docia), joten
#   vakiomuotoinen pandoc-kuva toimii — se tarvitsee vain kolme ajonaikaista perusasiaa, joita clsi olettaa:
#
#   1. Ei `pandoc`-ENTRYPOINTia — clsi ajaa Cmd ["pandoc", ...]; oletusarvoisella
#      entrypointillä siitä tulisi `pandoc pandoc ...`.
#   2. `zip` — tuonnin muunnoksen toinen vaihe ajaa `zip -r` tulosteen paketoimiseksi.
#   3. Käyttäjät, jotka vastaavat sitä, miten clsi ajaa muunnoskontin (User=$TEXLIVE_IMAGE_USER):
#        - `tex` UID:ssa 1000 — kehitys / mikropalveluiden oletus.
#        - `www-data` UID:ssa 33 — Server Pro -ympäristön eristetyt *sisarkontit* asettavat
#          TEXLIVE_IMAGE_USER=www-data (katso /etc/overleaf/env.sh). clsi (ajossa
#          www-data:na) luo muunnoshakemiston, jonka omistaja on 33:33, joten kontin on ajettava
#          www-data(33):na kirjoittaakseen sinne — muuten pandoc epäonnistuu joko
#          "unable to find user www-data" tai "permission denied".
#      Alpine sisältää jo `www-data`-ryhmän GID:ssä 82, joten siirrämme sen GID:hen 33
#      jotta se vastaa isäntää/texlive-kuvaa.
#
# Rakenna (tagin on vastattava PANDOC_IMAGEa tiedostossa develop/dev.env):
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Huom: sidottu `latest`-tagiin (pandoc 3.10 kirjoitushetkellä). Lukitse tiettyyn
# pandoc/core-tagia käyttäen täysin toistettavia rakennuksia varten.
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
```

Rakenna ja tagita se niin, että tagi vastaa `PANDOC_IMAGE`:

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

Tuotantoon, lukitse `pandoc/core` tiettyyn versioon sen sijaan, että `uusinta` toistettavia rakennuksia varten, ja aseta `PANDOC_IMAGE` rekisterisi polkuun.

***

### Vianmääritys

| Oire                                                               | Todennäköinen syy                                                                                     |
| ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------- |
| Tuonti/Vienti-painikkeet eivät näy                                 | `ENABLE_PANDOC_CONVERSIONS` ei `true` sivulla **web**                                                 |
| Käyttöliittymä näkyy, mutta muunnos epäonnistuu palvelinvirheeseen | `ENABLE_PANDOC_CONVERSIONS` ei asetettu kohtaan **clsi**, tai `PANDOC_IMAGE` puuttuu Docker-isännältä |
| `clsi` virhe kuvan vetämisessä (401)                               | `PANDOC_IMAGE` osoittaa yhä yksityiseen oletuskuvaan; rakenna/osoita omaan kuvaasi                    |
| Kontti ajaa `pandoc pandoc …` / väärät argumentit                  | Kuvassa on `pandoc` `ENTRYPOINT`; käytä `ENTRYPOINT []`                                               |
| Tuonnin tuloste on tyhjä / zip-vaihe epäonnistuu                   | `zip` ei ole asennettuna kuvaan                                                                       |
| Käyttöoikeusvirheitä muunnetuissa tiedostoissa                     | Kuvassa ei ole `tex` käyttäjää UID:ssa 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/fi/maaritys/overleaf-toolkit/pandoc-tuonti-ja-vienti.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.
