# PDF 변환 한글 지원

먼저 Bookstack "설정 &gt; 맞춤 &gt; 헤드 작성"에 아래 코드를 넣어 줍니다. (Google 한글 웹폰트를 사용하기 위함)

```html
<link href=" https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap " rel="stylesheet">
<style>
  body {
  text-rendering: geometricPrecision;
  }  
  body, button, input, select, label, textarea {
font-family: "Noto Sans KR";
  }
</style>
```

Portainer를 통해 Bookstack 콘솔로 진입하시던가 아니면 아래와 같이 ssh로 Bookstack 콘솔로 진입 합니다.

```shell
sudo docker exec -it bookstack bash
```

Font 디렉토리로 이동 합니다.

```shell
cd /usr/share/fonts
```

notosanskr 디렉토리를 생성하고 이동합니다.

```shell
mkdir notosanskr
cd notosanskr
```

Google "Noto Sans KR" 폰트를 다운받습니다.

```shell
curl -o Noto_Sans_KR.zip https://fonts.google.com/download?family=Noto%20Sans%20KR (동작 X)

wget https://gqm.trigem.com/Share/font/Noto_Sans_KR.zip
```

[![bookstack_font1.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/scaled-1680-/Hm4lG5D6fskh4KOb-bookstack-font1.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/Hm4lG5D6fskh4KOb-bookstack-font1.png)

압축을 해제하기 위해 unzip을 설치해 줍니다.

```shell
apk add --no-cache unzip
```

[![bookstack_font2.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/scaled-1680-/PbNyywoav6RE70cq-bookstack-font2.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/PbNyywoav6RE70cq-bookstack-font2.png)

압축을 해제하고 원본 zip파일을 삭제합니다.

```shell
unzip Noto_Sans_KR.zip -d /usr/share/fonts/notosanskr/
rm Noto_Sans_KR.zip
```

[![bookstack_font3.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/scaled-1680-/pUrsxxIr6ZcBVfzr-bookstack-font3.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/pUrsxxIr6ZcBVfzr-bookstack-font3.png)

폰트를 설치 합니다.

```shell
fc-cache -fv
```

[![bookstack_font4.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/scaled-1680-/eIjvFTwYI28KDfQv-bookstack-font4.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/eIjvFTwYI28KDfQv-bookstack-font4.png)

폰트 설치를 확인합니다.

```shell
fc-list | grep noto
```

[![bookstack_font5.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/scaled-1680-/6V8ECtTHsAbkvkyt-bookstack-font5.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/6V8ECtTHsAbkvkyt-bookstack-font5.png)

"bookstack/config/www/" 밑에 있는 ".env" 파일을 열어 아래 내용을 추가해 줍니다.

<p class="callout success">EXPORT\_PDF\_COMMAND="weasyprint {input\_html\_path} {output\_pdf\_path}"</p>

"production.ERROR: PDF Export via command failed due to timeout at 15 second(s)"라는 오류가 발생시 아래 timeout 시간을 추가해 줍니다.

<p class="callout success">EXPORT\_PDF\_COMMAND\_TIMEOUT=120</p>

weasyprint 사용을 위해서는 weasyprint apk 설치가 필요 합니다.

기본적으로 docker 콘솔에 접속해 apk를 설치해 주면 되는데 docker image가 업데이트 될 경우 설치된 apk가 삭제 됩니다.

```shell
sudo docker exec -it bookstack bash
```

```shell
apk add --no-cache weasyprint
```

docker 컨테이너가 시작될 때 weasyprint apk 설치 유무를 확인 후 없을 시 자동으로 설치를 진행하는 절차를 성명 드립니다.

"/volume1/docker/bookstack/config/weasyprint\_apk.sh"에 아래 sh스크립트를 작성 합니다.

```bash
#!/bin/sh

# Check if weasyprint is installed
if ! apk info | grep -q weasyprint; then
    echo "WeasyPrint is not installed. Installing now..."
    # Install weasyprint without cache
    apk add --no-cache weasyprint
else
    echo "WeasyPrint is already installed."
fi

# Keep the container running
tail -f /dev/null
```

docker 콘솔에 접속하여 작성된 sh에 대한 권한을 부여해 줍니다.

```shell
sudo docker exec -it bookstack bash
```

```shell
chmod +x /config/weasyprint_apk.sh
```

docker 컨테이터의 cmd에 "/config/weasyprint.sh"를 입력해 주고, "Deploy the container"를 실행 합니다.

[![docker_cmd.jpg](https://wiki.dhcloud.me/uploads/images/gallery/2024-11/scaled-1680-/Dagfr8dUjXRArPc2-docker-cmd.jpg)](https://wiki.dhcloud.me/uploads/images/gallery/2024-11/Dagfr8dUjXRArPc2-docker-cmd.jpg)

\----------------------------------------------------------------------------------------------------

추가 문자 폰트 설치 (옵션)

\----------------------------------------------------------------------------------------------------

**1. 이모지 폰트 설치**

아래 github ([https://github.com/adobe-fonts/emojione-color](https://github.com/adobe-fonts/emojione-color))에서 폰트를 로컬에 다운로드 합니다.

<p class="callout success">[https://github.com/adobe-fonts/emojione-color/archive/refs/heads/master.zip](https://github.com/adobe-fonts/emojione-color/archive/refs/heads/master.zip)</p>

다운로드 받은 zip 파일을 bookstack의 "config" 디렉토리에 업로드 합니다.

[![bookstack_font6.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/scaled-1680-/hOY0rBhqPtnb0Kcr-bookstack-font6.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/hOY0rBhqPtnb0Kcr-bookstack-font6.png)

Bookstack 콜솔로 진입합니다.

```shell
sudo docker exec -it bookstack bash
```

"config"로 이동 합니다.

```shell
cd /config/
```

업로드한 zip 파일을 폰트 디렉토리로 이동합니다.

```
mv emojione-color-master.zip /usr/share/fonts
```

폰트 디렉토리로 이동합니다.

```
cd /usr/share/fonts
```

압축을 해제 합니다.

```
unzip -d emojionecolor emojione-color-master.zip
```

[![bookstack_font7.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/scaled-1680-/zkDdPLtdwozHiuDO-bookstack-font7.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/zkDdPLtdwozHiuDO-bookstack-font7.png)

폰트를 설치 합니다.

```shell
fc-cache -fv
```

[![bookstack_font8.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/scaled-1680-/H5PtnJcukZihvB6r-bookstack-font8.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/H5PtnJcukZihvB6r-bookstack-font8.png)

설치를 확인 합니다.

```
fc-list | grep emojione
```

[![bookstack_font9.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/scaled-1680-/AOc4eJotBkqyveCV-bookstack-font9.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/AOc4eJotBkqyveCV-bookstack-font9.png)

Bookstack 콜솔에 접속 중이라면 아래 명령어로 빠져나갑니다.

```shell
exit
```

**2. MS 폰트 설치**

Bookstack 콘솔로 진입합니다.

```shell
sudo docker exec -it bookstack bash
```

"config"로 이동 합니다.

```shell
cd /config/www
```

MS 폰트를 설치해 줍니다. (Option 사항 입니다.)

```shell
apk add --no-cache --virtual .build-deps msttcorefonts-installer 
update-ms-fonts  
fc-cache -f  
rm -rf /tmp/*  
apk del .build-deps
```

마지막으로 폰트 리스트를 업데이해 해줍니다.

```
fc-cache -fv
```

[![bookstack_font14.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/scaled-1680-/7pTWPYXEOGT1qhX1-bookstack-font14.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-07/7pTWPYXEOGT1qhX1-bookstack-font14.png)

Bookstack 컨테이너를 재실행해 줍니다.

<p class="callout warning"><span style="color: rgb(224, 62, 45);">**\[주의\]**</span>   
1. 도커 이미지가 업데이트 되면 위 설정은 모두 <span style="color: rgb(224, 62, 45);">**초기화** </span>됩니다. **<span style="color: rgb(224, 62, 45);">Watchtower</span>**를 이용 중이라면 <span style="text-decoration: underline;">**<span style="color: rgb(224, 62, 45); text-decoration: underline;">예외 </span><span style="color: rgb(224, 62, 45); text-decoration: underline;">Lable 처리</span>**</span>를 하셔야 합니다.  
 ([https://wiki.dhcloud.me/books/docker-updater-watchtower/page/94f6d](https://wiki.dhcloud.me/books/docker-updater-watchtower/page/94f6d))  
2. Watchtower를 통한 자동 이미지 업데이트를 사용하신다면 위 본문에 설명명 **<span style="color: rgb(224, 62, 45);">"weasyprint\_apk.sh" CMD</span>**를 설정해 주시기 바랍니다.</p>