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

# Pandoc-tuonti ja -vienti

### Pandocin tuonti / vienti

Overleaf voi muuntaa asiakirjoja LaTeXiä edestakaisin käyttäen [Pandoc](https://pandoc.org/). Muunnos suoritetaan sisällä **eristetyn Docker-säilön** jota hallinnoi `clsi` -palvelu, joten ominaisuus on oletusarvoisesti pois käytöstä ja se täytyy ottaa käyttöön muutamalla ympäristömuuttujalla.

#### Mitä se tekee

| Suunta  | Mistä → Mihin              | Formaatit                  | Missä                                                                                          |
| ------- | -------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------- |
| **Tuo** | asiakirja → LaTeX-projekti | `docx`, `markdown`         | *Uusi projekti → Tuo* (lataa `.docx` / `.md` ja muuntaa sen muokattavaksi `.tex` -projektiksi) |
| **Vie** | 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 **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ä).
* **Täytyy asettaa MOLEMMAT `web` ja `clsi` palvelut.** Ne ovat erillisiä prosesseja, joilla on erillinen konfiguraatio:
  * `web` lukee sen kohtaan `enablePandocConversions` (`services/web/config/settings.defaults.js`). Se ohjaa tuontireittejä, vientireittejä ja `ol-ExposedSettings.enablePandocConversions` -lippua, joka kertoo käyttöliittymälle, näytetäänkö Tuonti/Vienti-käyttöliittymä.
  * `clsi` lukee sen kohtaan `enablePandocConversions` (`services/clsi/config/settings.defaults.cjs`). Se ohjaa Pandocin suorittavat päätepisteet.
* Jos se on käytössä kohdassa `web` mutta ei kohdassa `clsi` (tai päinvastoin), käyttöliittymä näkyy, mutta muunnos epäonnistuu — pidä ne synkronissa.

2\. `PANDOC_IMAGE` — säilökuva, jota clsi käyttää muuntamiseen

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

### Edellytykset

Koska muunnokset suoritetaan Docker-säilöinä, jotka käynnistää `clsi`:

1. **`clsi` täytyy toimia eristetyssä tilassa Docker-yhteydellä.** Kehitysympäristössä `clsi` on jo valmiina `SANDBOXED_COMPILES=true` ja isäntä-Dockerin socket (`/var/run/docker.sock`) on liitetty.
2. **Se `PANDOC_IMAGE` täytyy olla 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 kuva **kerran** ennen ominaisuuden käyttöä:

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

Käynnistä pino sitten (uudelleen), jotta `clsi` ja `web` poimii muuttujat.

***

### Pandoc-kuvan rakentaminen

Tavallinen Pandoc-kuva toimii, koska clsi kutsuu Pandocia yleisellä tavalla (ei mukautettuja mallipohjia/suodattimia). Se tarvitsee vain kolme ajonaikaista perusasiaa, jotka kaikki hoitaa `develop/pandoc/Dockerfile`:

```dockerfile
# Mukautettu Pandoc-kuva clsi:n eristettyihin muunnoksiin
# (tuonti/vienti: docx / markdown / html, ENABLE_PANDOC_CONVERSIONS-muuttujan 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 mallipohjia/suodattimia/reference-docia), joten
#   tavallinen pandoc-kuva toimii — se tarvitsee vain kolme ajonaikaista perusasiaa, joita clsi olettaa:
#
#   1. Ei `pandoc` ENTRYPOINTiä — clsi ajaa Cmd ["pandoc", ...]; oletus
#      entrypointilla siitä tulisi `pandoc pandoc ...`.
#   2. `zip` — tuonnin muunnoksen toinen vaihe ajaa `zip -r` pakatakseen tuloksen.
#   3. Käyttäjät, jotka vastaavat tapaa, jolla clsi ajaa muunnossäiliön (User=$TEXLIVE_IMAGE_USER):
#        - `tex` UID:ssä 1000 — kehityksen / mikropalvelujen oletus.
#        - `www-data` UID:ssä 33 — Server Pro:n eristetyt *sisar*-säilöt asettavat
#          TEXLIVE_IMAGE_USER=www-data (katso /etc/overleaf/env.sh). clsi (ajossa
#          www-data-käyttäjänä) luo muunnoshakemiston, jonka omistaa 33:33, joten säilön täytyy toimia
#          www-data(33):na kirjoittaakseen siihen — muuten pandoc epäonnistuu joko
#          "unable to find user www-data" tai "permission denied".
#      Alpine toimittaa jo `www-data`-ryhmän GID:ssä 82, joten siirrämme sen GID:hen 33
#      vastaamaan isäntää/texlive-kuvaa.
#
# Rakenna (tagin täytyy vastata kehitysympäristön PANDOC_IMAGE-muuttujaa):
#   docker build -t overleaf-pandoc:local develop/pandoc
#
# Huom: kiinnitetty `latest`:iin (pandoc 3.10 tätä kirjoitettaessa). Kiinnitä tiettyyn
# pandoc/core-tagiin 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 merkitse se siten, että tagi vastaa `PANDOC_IMAGE`:

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

Tuotantokäyttöä varten kiinnitä `pandoc/core` tiettyyn versioon sen sijaan, että `latest` toistettavia rakennuksia varten, ja aseta `PANDOC_IMAGE` oma rekisteripolkusi.

***

### Vianmääritys

| Oire                                                              | Todennäköinen syy                                                                                     |
| ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| Tuonti/Vienti-painikkeet eivät näy                                | `ENABLE_PANDOC_CONVERSIONS` ei `true` kohteessa **web**                                               |
| Käyttöliittymä näkyy, mutta muunnos epäonnistuu palvelinvirheellä | `ENABLE_PANDOC_CONVERSIONS` ei asetettu kohtaan **clsi**, tai `PANDOC_IMAGE` puuttuu Docker-isännältä |
| `clsi` virhe kuvatta vedettäessä (401)                            | `PANDOC_IMAGE` osoittaa yhä yksityiseen oletuskuvaan; rakenna/osoita omaan kuvaasi                    |
| Säilö suorittaa `pandoc pandoc …`  / väärät argumentit            | Kuvassa on `pandoc` `ENTRYPOINT`; käytä `ENTRYPOINT []`                                               |
| Tuonnin tuloste on tyhjä / zip-vaihe epäonnistuu                  | `zip` ei ole asennettu kuvaan                                                                         |
| Käyttöoikeusvirheitä muunnetuissa tiedostoissa                    | Kuvassa ei ole `tex` käyttäjää UID:ssä 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/fi/konfiguraatio/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.
