> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Pandoc 导入与导出

> 在 Kubernetes 部署中使用 Pandoc 导入和导出文档。

Pandoc 转换与编译一样，由每个 Ayakaleaf Pro pod 的 **clsi** 服务执行：clsi 请求节点的 Docker Engine 从 `PANDOC_IMAGE` 启动一个容器。**web** 服务显示导入和导出菜单。该功能的作用以及如何构建镜像，请参见 [Pandoc 导入与导出](https://ayakaleaf-pro.mintlify.site/zh-CN/on-premises/configuration/overleaf-toolkit/pandoc-import-and-export.md)。

| | |
| - | - |
| 服务 | web（菜单和路由）、clsi（执行转换），位于每个 Ayakaleaf Pro pod 中 |
| 节点 | Docker Engine 和 `PANDOC_IMAGE`，位于每个可以运行 Ayakaleaf Pro 的节点上 |
| 依赖 | [沙盒编译](https://ayakaleaf-pro.mintlify.site/zh-CN/on-premises/configuration/kubernetes/sandboxed-compiles.md) |
| 定期任务 | 无 |

### 配置

**1. 将镜像放入每个节点的 Docker 中**

从 [ayakaleaf-pro](https://github.com/ayaka-notes/ayakaleaf-pro) 仓库的 `develop/pandoc` 文件夹构建一次镜像，然后将其加载到每个可以运行 Ayakaleaf Pro 的节点的 Docker 中：

```bash theme={null}
docker build -t overleaf-pandoc:local develop/pandoc
docker save overleaf-pandoc:local | ssh node-1 sudo docker load    # repeat for every node
```

或者将其推送到节点可以访问的镜像仓库，然后在每个节点上执行 `sudo docker pull`。与 TeX Live 镜像一样，它必须位于 **Docker** 中，而不仅仅是 containerd 中。

**2. ConfigMap**

```yaml theme={null}
  ENABLE_PANDOC_CONVERSIONS: "true"
  PANDOC_IMAGE: overleaf-pandoc:local
```

web 和 clsi 都从同一个 ConfigMap 读取 `ENABLE_PANDOC_CONVERSIONS`，因此在 Kubernetes 上二者的设置不会不一致。

**3. 应用并重启**

```bash theme={null}
kubectl apply -f 30-config.yaml
kubectl -n overleaf rollout restart deployment/overleaf     # or statefulset/overleaf
```

### 多个副本

除了确保每个节点上都有该镜像外，无需额外配置：每个副本都在自己的节点上执行转换。

### 在 Kubernetes 上的测试

使用从 `develop/pandoc` 构建、并通过 `docker save | docker load` 加载到每个节点 Docker 中的镜像，在 Kubernetes 1.37 上以单副本运行时，我们针对 Pandoc 的端到端测试全部通过（6 个用例）：将 Markdown 文档导入为 LaTeX 项目、损坏的 Word 文档所显示的错误、导出 Word（可再次导入）、Markdown 和 HTML，以及在未设置 `ENABLE_PANDOC_CONVERSIONS` 时隐藏菜单。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.