fix: 修復 Dockerfile.lite ARM64 build 問題
- 將 Python 安裝分成多個 RUN 步驟 - 修正 apt-get purge 在 lists 清除後失敗的問題 - 添加動態版本號修改步驟到 docker-build-lite.yml - Lite 版 UI 將顯示 X.Y.Z-lite 版本號
This commit is contained in:
parent
73f2bfd890
commit
d235ba7505
6 changed files with 171 additions and 98 deletions
59
.github/workflows/docker-build-lite.yml
vendored
59
.github/workflows/docker-build-lite.yml
vendored
|
|
@ -65,6 +65,65 @@ jobs:
|
||||||
echo "TAG=${TAG}" >> $GITHUB_OUTPUT
|
echo "TAG=${TAG}" >> $GITHUB_OUTPUT
|
||||||
echo "📦 版本: ${VERSION}"
|
echo "📦 版本: ${VERSION}"
|
||||||
|
|
||||||
|
# ========================================
|
||||||
|
# 動態修改 Lite 版本號(Build-time variant)
|
||||||
|
# 只在 runner workspace 生效,不 commit 回 repo
|
||||||
|
# ========================================
|
||||||
|
- name: Update version for Lite build
|
||||||
|
run: |
|
||||||
|
echo "========================================"
|
||||||
|
echo "🔧 動態修改 Lite 版本號"
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
VERSION="${{ steps.version.outputs.VERSION }}"
|
||||||
|
|
||||||
|
# 確保版本號包含 -lite
|
||||||
|
if [[ "${VERSION}" != *"-lite"* ]]; then
|
||||||
|
LITE_VERSION="${VERSION}-lite"
|
||||||
|
else
|
||||||
|
LITE_VERSION="${VERSION}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "🔍 Detected base version: ${VERSION}"
|
||||||
|
echo "✏️ Lite build detected, updating version to: ${LITE_VERSION}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 修改 package.json
|
||||||
|
if [ -f "package.json" ]; then
|
||||||
|
ORIGINAL_VERSION=$(jq -r '.version' package.json)
|
||||||
|
echo "📄 package.json 原版本: ${ORIGINAL_VERSION}"
|
||||||
|
jq --arg v "${LITE_VERSION}" '.version = $v' package.json > package.json.tmp && mv package.json.tmp package.json
|
||||||
|
echo "✅ package.json 已更新為: ${LITE_VERSION}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 修改 src/version.ts(如存在)
|
||||||
|
if [ -f "src/version.ts" ]; then
|
||||||
|
echo "📄 修改 src/version.ts..."
|
||||||
|
sed -i "s/version.*=.*['\"].*['\"]/version = '${LITE_VERSION}'/" src/version.ts
|
||||||
|
echo "✅ src/version.ts 已更新"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 修改 src/version.js(如存在)
|
||||||
|
if [ -f "src/version.js" ]; then
|
||||||
|
echo "📄 修改 src/version.js..."
|
||||||
|
sed -i "s/version.*=.*['\"].*['\"]/version = '${LITE_VERSION}'/" src/version.js
|
||||||
|
echo "✅ src/version.js 已更新"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 修改 .env(如存在且有 VERSION 變數)
|
||||||
|
if [ -f ".env" ] && grep -q "^VERSION=" .env; then
|
||||||
|
echo "📄 修改 .env..."
|
||||||
|
sed -i "s/^VERSION=.*/VERSION=${LITE_VERSION}/" .env
|
||||||
|
echo "✅ .env 已更新"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "========================================"
|
||||||
|
echo "✅ Version updated for UI build: ${LITE_VERSION}"
|
||||||
|
echo "========================================"
|
||||||
|
echo ""
|
||||||
|
echo "⚠️ 注意:此修改只影響本次 build,不會 commit 回 repo"
|
||||||
|
|
||||||
# ========================================
|
# ========================================
|
||||||
# 清理磁碟空間
|
# 清理磁碟空間
|
||||||
# ========================================
|
# ========================================
|
||||||
|
|
|
||||||
40
.github/workflows/docker-build-remote.yml
vendored
40
.github/workflows/docker-build-remote.yml
vendored
|
|
@ -14,7 +14,7 @@ on:
|
||||||
image_tag:
|
image_tag:
|
||||||
description: "📦 版本號(例如:0.1.15、0.1.15-lite、0.1.15.test)"
|
description: "📦 版本號(例如:0.1.15、0.1.15-lite、0.1.15.test)"
|
||||||
required: true
|
required: true
|
||||||
default: ""
|
default: "0.1.15.test"
|
||||||
type: string
|
type: string
|
||||||
build_target:
|
build_target:
|
||||||
description: "🎯 Build 目標版本(auto = 自動從版本號偵測)"
|
description: "🎯 Build 目標版本(auto = 自動從版本號偵測)"
|
||||||
|
|
@ -61,21 +61,21 @@ jobs:
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo "🔧 解析版本設定"
|
echo "🔧 解析版本設定"
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
|
|
||||||
INPUT_TAG="${{ github.event.inputs.image_tag }}"
|
INPUT_TAG="${{ github.event.inputs.image_tag }}"
|
||||||
BUILD_TARGET_INPUT="${{ github.event.inputs.build_target }}"
|
BUILD_TARGET_INPUT="${{ github.event.inputs.build_target }}"
|
||||||
|
|
||||||
echo "輸入參數:"
|
echo "輸入參數:"
|
||||||
echo " image_tag: ${INPUT_TAG}"
|
echo " image_tag: ${INPUT_TAG}"
|
||||||
echo " build_target: ${BUILD_TARGET_INPUT}"
|
echo " build_target: ${BUILD_TARGET_INPUT}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 驗證版本號不為空
|
# 驗證版本號不為空
|
||||||
if [ -z "${INPUT_TAG}" ]; then
|
if [ -z "${INPUT_TAG}" ]; then
|
||||||
echo "❌ 錯誤:必須填寫版本號"
|
echo "❌ 錯誤:必須填寫版本號"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ========================================
|
# ========================================
|
||||||
# 判斷 build target(auto 時根據 tag 自動判斷)
|
# 判斷 build target(auto 時根據 tag 自動判斷)
|
||||||
# ========================================
|
# ========================================
|
||||||
|
|
@ -93,14 +93,14 @@ jobs:
|
||||||
else
|
else
|
||||||
FINAL_BUILD_TARGET="${BUILD_TARGET_INPUT}"
|
FINAL_BUILD_TARGET="${BUILD_TARGET_INPUT}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ========================================
|
# ========================================
|
||||||
# 根據 build target 決定最終 tag
|
# 根據 build target 決定最終 tag
|
||||||
# ========================================
|
# ========================================
|
||||||
# 移除可能的後綴以獲取基礎版本號
|
# 移除可能的後綴以獲取基礎版本號
|
||||||
BASE_TAG="${INPUT_TAG%-lite}"
|
BASE_TAG="${INPUT_TAG%-lite}"
|
||||||
BASE_TAG="${BASE_TAG%-full}"
|
BASE_TAG="${BASE_TAG%-full}"
|
||||||
|
|
||||||
case "${FINAL_BUILD_TARGET}" in
|
case "${FINAL_BUILD_TARGET}" in
|
||||||
"lite")
|
"lite")
|
||||||
FINAL_TAG="${BASE_TAG}-lite"
|
FINAL_TAG="${BASE_TAG}-lite"
|
||||||
|
|
@ -121,7 +121,7 @@ jobs:
|
||||||
EDITION="一般版(標準版)"
|
EDITION="一般版(標準版)"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# ========================================
|
# ========================================
|
||||||
# 判斷是否為正式版本(決定是否更新 latest)
|
# 判斷是否為正式版本(決定是否更新 latest)
|
||||||
# 正式版本格式:純數字+點號(如 0.1.15、0.1.15.1)
|
# 正式版本格式:純數字+點號(如 0.1.15、0.1.15.1)
|
||||||
|
|
@ -134,7 +134,7 @@ jobs:
|
||||||
IS_OFFICIAL="false"
|
IS_OFFICIAL="false"
|
||||||
echo "⚠️ 測試版本:不更新 ${LATEST_TAG}"
|
echo "⚠️ 測試版本:不更新 ${LATEST_TAG}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo "📋 最終設定:"
|
echo "📋 最終設定:"
|
||||||
|
|
@ -146,7 +146,7 @@ jobs:
|
||||||
echo " Latest Tag: ${LATEST_TAG}"
|
echo " Latest Tag: ${LATEST_TAG}"
|
||||||
echo " 正式版本: ${IS_OFFICIAL}"
|
echo " 正式版本: ${IS_OFFICIAL}"
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
|
|
||||||
# 輸出到 GITHUB_OUTPUT
|
# 輸出到 GITHUB_OUTPUT
|
||||||
echo "image_tag=${FINAL_TAG}" >> $GITHUB_OUTPUT
|
echo "image_tag=${FINAL_TAG}" >> $GITHUB_OUTPUT
|
||||||
echo "base_tag=${BASE_TAG}" >> $GITHUB_OUTPUT
|
echo "base_tag=${BASE_TAG}" >> $GITHUB_OUTPUT
|
||||||
|
|
@ -422,19 +422,19 @@ jobs:
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo "🔨 開始 Multi-Arch Docker Build"
|
echo "🔨 開始 Multi-Arch Docker Build"
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
|
|
||||||
# 使用 parse_version 步驟的輸出
|
# 使用 parse_version 步驟的輸出
|
||||||
FINAL_TAG="${{ steps.parse_version.outputs.image_tag }}"
|
FINAL_TAG="${{ steps.parse_version.outputs.image_tag }}"
|
||||||
DOCKERFILE="${{ steps.parse_version.outputs.dockerfile }}"
|
DOCKERFILE="${{ steps.parse_version.outputs.dockerfile }}"
|
||||||
LATEST_TAG="${{ steps.parse_version.outputs.latest_tag }}"
|
LATEST_TAG="${{ steps.parse_version.outputs.latest_tag }}"
|
||||||
IS_OFFICIAL="${{ steps.parse_version.outputs.is_official }}"
|
IS_OFFICIAL="${{ steps.parse_version.outputs.is_official }}"
|
||||||
EDITION="${{ steps.parse_version.outputs.edition }}"
|
EDITION="${{ steps.parse_version.outputs.edition }}"
|
||||||
|
|
||||||
echo "🔹 Build 目標: ${EDITION}"
|
echo "🔹 Build 目標: ${EDITION}"
|
||||||
echo "🔹 使用 Dockerfile: ${DOCKERFILE}"
|
echo "🔹 使用 Dockerfile: ${DOCKERFILE}"
|
||||||
echo "🔹 版本: v${FINAL_TAG}"
|
echo "🔹 版本: v${FINAL_TAG}"
|
||||||
echo "🔹 映像名稱: ${{ env.DOCKER_IMAGE_REPO }}:${FINAL_TAG}"
|
echo "🔹 映像名稱: ${{ env.DOCKER_IMAGE_REPO }}:${FINAL_TAG}"
|
||||||
|
|
||||||
if [ "${IS_OFFICIAL}" = "true" ]; then
|
if [ "${IS_OFFICIAL}" = "true" ]; then
|
||||||
echo "✅ 正式版本,將同時標記 ${LATEST_TAG}"
|
echo "✅ 正式版本,將同時標記 ${LATEST_TAG}"
|
||||||
ADD_LATEST="true"
|
ADD_LATEST="true"
|
||||||
|
|
@ -528,18 +528,18 @@ jobs:
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo "📤 推送映像到 Docker Hub"
|
echo "📤 推送映像到 Docker Hub"
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
|
|
||||||
# 使用 parse_version 步驟的輸出
|
# 使用 parse_version 步驟的輸出
|
||||||
FINAL_TAG="${{ steps.parse_version.outputs.image_tag }}"
|
FINAL_TAG="${{ steps.parse_version.outputs.image_tag }}"
|
||||||
DOCKERFILE="${{ steps.parse_version.outputs.dockerfile }}"
|
DOCKERFILE="${{ steps.parse_version.outputs.dockerfile }}"
|
||||||
LATEST_TAG="${{ steps.parse_version.outputs.latest_tag }}"
|
LATEST_TAG="${{ steps.parse_version.outputs.latest_tag }}"
|
||||||
IS_OFFICIAL="${{ steps.parse_version.outputs.is_official }}"
|
IS_OFFICIAL="${{ steps.parse_version.outputs.is_official }}"
|
||||||
EDITION="${{ steps.parse_version.outputs.edition }}"
|
EDITION="${{ steps.parse_version.outputs.edition }}"
|
||||||
|
|
||||||
echo "🔹 Push 目標: ${EDITION}"
|
echo "🔹 Push 目標: ${EDITION}"
|
||||||
echo "🔹 版本: v${FINAL_TAG}"
|
echo "🔹 版本: v${FINAL_TAG}"
|
||||||
echo "🔹 映像: ${{ env.DOCKER_IMAGE_REPO }}:${FINAL_TAG}"
|
echo "🔹 映像: ${{ env.DOCKER_IMAGE_REPO }}:${FINAL_TAG}"
|
||||||
|
|
||||||
if [ "${IS_OFFICIAL}" = "true" ]; then
|
if [ "${IS_OFFICIAL}" = "true" ]; then
|
||||||
echo "✅ 正式版本,將同時推送 ${LATEST_TAG}"
|
echo "✅ 正式版本,將同時推送 ${LATEST_TAG}"
|
||||||
ADD_LATEST="true"
|
ADD_LATEST="true"
|
||||||
|
|
@ -641,10 +641,10 @@ jobs:
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo "✅ 驗證 Docker Hub 映像"
|
echo "✅ 驗證 Docker Hub 映像"
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
|
|
||||||
FINAL_TAG="${{ steps.parse_version.outputs.image_tag }}"
|
FINAL_TAG="${{ steps.parse_version.outputs.image_tag }}"
|
||||||
EDITION="${{ steps.parse_version.outputs.edition }}"
|
EDITION="${{ steps.parse_version.outputs.edition }}"
|
||||||
|
|
||||||
echo "🔹 版本類型: ${EDITION}"
|
echo "🔹 版本類型: ${EDITION}"
|
||||||
echo "🔹 版本: v${FINAL_TAG}"
|
echo "🔹 版本: v${FINAL_TAG}"
|
||||||
echo "🔹 映像: ${{ env.DOCKER_IMAGE_REPO }}:${FINAL_TAG}"
|
echo "🔹 映像: ${{ env.DOCKER_IMAGE_REPO }}:${FINAL_TAG}"
|
||||||
|
|
@ -737,7 +737,7 @@ jobs:
|
||||||
echo "✅ Multi-Arch Docker Build & Push 完成!"
|
echo "✅ Multi-Arch Docker Build & Push 完成!"
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 使用 parse_version 步驟的輸出
|
# 使用 parse_version 步驟的輸出
|
||||||
FINAL_TAG="${{ steps.parse_version.outputs.image_tag }}"
|
FINAL_TAG="${{ steps.parse_version.outputs.image_tag }}"
|
||||||
BASE_TAG="${{ steps.parse_version.outputs.base_tag }}"
|
BASE_TAG="${{ steps.parse_version.outputs.base_tag }}"
|
||||||
|
|
@ -745,7 +745,7 @@ jobs:
|
||||||
LATEST_TAG="${{ steps.parse_version.outputs.latest_tag }}"
|
LATEST_TAG="${{ steps.parse_version.outputs.latest_tag }}"
|
||||||
IS_OFFICIAL="${{ steps.parse_version.outputs.is_official }}"
|
IS_OFFICIAL="${{ steps.parse_version.outputs.is_official }}"
|
||||||
EDITION="${{ steps.parse_version.outputs.edition }}"
|
EDITION="${{ steps.parse_version.outputs.edition }}"
|
||||||
|
|
||||||
echo "🏷️ 版本: v${FINAL_TAG}"
|
echo "🏷️ 版本: v${FINAL_TAG}"
|
||||||
echo "📦 版本類型: ${EDITION}"
|
echo "📦 版本類型: ${EDITION}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
|
||||||
|
|
@ -234,7 +234,7 @@ RUN echo "" && \
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# 🔐 PDF Packager 預設簽章憑證 + Python(合併以減少 layer)
|
# 🔐 PDF Packager 預設簽章憑證 + Python
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
ENV PATH="/root/.local/bin:${PATH}"
|
ENV PATH="/root/.local/bin:${PATH}"
|
||||||
ENV PIP_NO_CACHE_DIR=1
|
ENV PIP_NO_CACHE_DIR=1
|
||||||
|
|
@ -244,9 +244,10 @@ ENV PDF_SIGN_REASON="ConvertX-CN Lite PDF Packager"
|
||||||
ENV PDF_SIGN_LOCATION="Taiwan"
|
ENV PDF_SIGN_LOCATION="Taiwan"
|
||||||
ENV PDF_SIGN_CONTACT="convertx-cn@localhost"
|
ENV PDF_SIGN_CONTACT="convertx-cn@localhost"
|
||||||
|
|
||||||
|
# 階段 7:安裝 Python 和編譯依賴
|
||||||
RUN echo "" && \
|
RUN echo "" && \
|
||||||
echo "========================================" && \
|
echo "========================================" && \
|
||||||
echo "🔐 安裝 Python + 產生簽章憑證" && \
|
echo "🔐 階段 7/8:安裝 Python + 編譯工具" && \
|
||||||
echo "========================================" && \
|
echo "========================================" && \
|
||||||
apt-get update --fix-missing && apt-get install -y --no-install-recommends \
|
apt-get update --fix-missing && apt-get install -y --no-install-recommends \
|
||||||
python3 \
|
python3 \
|
||||||
|
|
@ -255,6 +256,13 @@ RUN echo "" && \
|
||||||
gcc \
|
gcc \
|
||||||
libffi-dev \
|
libffi-dev \
|
||||||
&& rm -rf /var/lib/apt/lists/* && \
|
&& rm -rf /var/lib/apt/lists/* && \
|
||||||
|
echo "✅ 階段 7/8 完成:Python + 編譯工具已安裝"
|
||||||
|
|
||||||
|
# 階段 8:安裝 endesive 並產生簽章憑證
|
||||||
|
RUN echo "" && \
|
||||||
|
echo "========================================" && \
|
||||||
|
echo "🔐 階段 8/8:安裝 endesive + 產生憑證" && \
|
||||||
|
echo "========================================" && \
|
||||||
pip3 install --no-cache-dir --break-system-packages endesive && \
|
pip3 install --no-cache-dir --break-system-packages endesive && \
|
||||||
mkdir -p /app/certs && \
|
mkdir -p /app/certs && \
|
||||||
openssl req -x509 -newkey rsa:2048 \
|
openssl req -x509 -newkey rsa:2048 \
|
||||||
|
|
@ -267,8 +275,13 @@ RUN echo "" && \
|
||||||
-passout pass: && \
|
-passout pass: && \
|
||||||
rm -f /tmp/key.pem /tmp/cert.pem && \
|
rm -f /tmp/key.pem /tmp/cert.pem && \
|
||||||
chmod 644 /app/certs/default.p12 && \
|
chmod 644 /app/certs/default.p12 && \
|
||||||
|
echo "✅ 階段 8/8 完成:endesive + 簽章憑證已安裝"
|
||||||
|
|
||||||
|
# 清理編譯工具以減小體積
|
||||||
|
RUN apt-get update && \
|
||||||
apt-get purge -y --auto-remove gcc python3-dev libffi-dev && \
|
apt-get purge -y --auto-remove gcc python3-dev libffi-dev && \
|
||||||
echo "✅ Python + PDF 簽章已安裝"
|
rm -rf /var/lib/apt/lists/* && \
|
||||||
|
echo "✅ 編譯工具已清理"
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# 最終清理 + Locale 設定 + 自訂字型(合併以減少 layer)
|
# 最終清理 + Locale 設定 + 自訂字型(合併以減少 layer)
|
||||||
|
|
|
||||||
14
README.md
14
README.md
|
|
@ -153,13 +153,13 @@ docker compose up -d
|
||||||
|
|
||||||
ConvertX-CN 提供兩個版本,滿足不同需求:
|
ConvertX-CN 提供兩個版本,滿足不同需求:
|
||||||
|
|
||||||
| 特性 | Full 版 | Lite 版 |
|
| 特性 | Full 版 | Lite 版 |
|
||||||
|------|---------|---------|
|
| --------------- | ---------- | ------------- |
|
||||||
| **Image 大小** | 約 8-12 GB | 約 1.5-2.5 GB |
|
| **Image 大小** | 約 8-12 GB | 約 1.5-2.5 GB |
|
||||||
| **部署速度** | 較慢 | 快速 |
|
| **部署速度** | 較慢 | 快速 |
|
||||||
| **適用對象** | 進階使用者 | 一般使用者 |
|
| **適用對象** | 進階使用者 | 一般使用者 |
|
||||||
| **OCR/AI/翻譯** | ✅ | ❌ |
|
| **OCR/AI/翻譯** | ✅ | ❌ |
|
||||||
| **基本轉檔** | ✅ | ✅ |
|
| **基本轉檔** | ✅ | ✅ |
|
||||||
|
|
||||||
### Lite 版快速啟動
|
### Lite 版快速啟動
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,37 +6,38 @@ ConvertX-CN Lite 是專為一般使用者設計的輕量版本,提供快速部
|
||||||
|
|
||||||
## 📦 什麼是 Lite 版?
|
## 📦 什麼是 Lite 版?
|
||||||
|
|
||||||
| 特性 | Full 版 | Lite 版 |
|
| 特性 | Full 版 | Lite 版 |
|
||||||
|------|---------|---------|
|
| -------------- | ---------------------------- | ------------------------ |
|
||||||
| **Image 大小** | 約 8-12 GB | 約 1.2-1.5 GB |
|
| **Image 大小** | 約 8-12 GB | 約 1.2-1.5 GB |
|
||||||
| **部署時間** | 較長(需下載大型模型) | 快速 |
|
| **部署時間** | 較長(需下載大型模型) | 快速 |
|
||||||
| **記憶體需求** | 較高(AI 模型) | 較低 |
|
| **記憶體需求** | 較高(AI 模型) | 較低 |
|
||||||
| **適用場景** | 進階使用者、需要 AI/OCR/翻譯 | 一般使用者、基本轉檔需求 |
|
| **適用場景** | 進階使用者、需要 AI/OCR/翻譯 | 一般使用者、基本轉檔需求 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ✅ Lite 版包含的功能
|
## ✅ Lite 版包含的功能
|
||||||
|
|
||||||
### 核心功能
|
### 核心功能
|
||||||
|
|
||||||
- ✅ **多語言 UI**:完整 i18n 介面(65 種語言)
|
- ✅ **多語言 UI**:完整 i18n 介面(65 種語言)
|
||||||
- ✅ **檔案上傳/轉檔/下載**:完整流程支援
|
- ✅ **檔案上傳/轉檔/下載**:完整流程支援
|
||||||
- ✅ **轉檔進度與錯誤提示**
|
- ✅ **轉檔進度與錯誤提示**
|
||||||
|
|
||||||
### 轉換引擎
|
### 轉換引擎
|
||||||
|
|
||||||
| 引擎 | 功能說明 | 支援格式 |
|
| 引擎 | 功能說明 | 支援格式 |
|
||||||
|------|----------|----------|
|
| ------------------ | ------------------ | -------------------------------------------- |
|
||||||
| **LibreOffice** | 文件轉檔 | DOC, DOCX, XLS, XLSX, PPT, PPTX, ODT, PDF... |
|
| **LibreOffice** | 文件轉檔 | DOC, DOCX, XLS, XLSX, PPT, PPTX, ODT, PDF... |
|
||||||
| **GraphicsMagick** | 圖片轉檔 | PNG, JPG, GIF, WEBP, BMP, TIFF... |
|
| **GraphicsMagick** | 圖片轉檔 | PNG, JPG, GIF, WEBP, BMP, TIFF... |
|
||||||
| **FFmpeg** | 影音轉檔(精簡版) | MP4, MP3, WAV, AVI, MKV, MOV... |
|
| **FFmpeg** | 影音轉檔(精簡版) | MP4, MP3, WAV, AVI, MKV, MOV... |
|
||||||
| **Pandoc** | 文件格式轉換 | Markdown, HTML, DOCX, LaTeX, EPUB... |
|
| **Pandoc** | 文件格式轉換 | Markdown, HTML, DOCX, LaTeX, EPUB... |
|
||||||
|
|
||||||
### PDF 功能
|
### PDF 功能
|
||||||
|
|
||||||
| 功能 | 說明 |
|
| 功能 | 說明 |
|
||||||
|------|------|
|
| ---------------- | ----------------------------------------------- |
|
||||||
| **PDF/A 轉換** | 使用 Ghostscript 轉換為 PDF/A-1b、PDF/A-2b |
|
| **PDF/A 轉換** | 使用 Ghostscript 轉換為 PDF/A-1b、PDF/A-2b |
|
||||||
| **PDF 防修改** | 使用 qpdf 設定權限保護 |
|
| **PDF 防修改** | 使用 qpdf 設定權限保護 |
|
||||||
| **PDF 數位簽章** | 使用 PFX/PKCS#12 憑證簽章(單一簽章,不含 LTV) |
|
| **PDF 數位簽章** | 使用 PFX/PKCS#12 憑證簽章(單一簽章,不含 LTV) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -45,19 +46,19 @@ ConvertX-CN Lite 是專為一般使用者設計的輕量版本,提供快速部
|
||||||
|
|
||||||
以下功能僅在 Full 版中提供:
|
以下功能僅在 Full 版中提供:
|
||||||
|
|
||||||
| 功能類別 | 功能說明 |
|
| 功能類別 | 功能說明 |
|
||||||
|----------|----------|
|
| ------------------- | ------------------------------ |
|
||||||
| **向量圖轉換** | Inkscape(SVG, PDF, PNG, EPS) |
|
| **向量圖轉換** | Inkscape(SVG, PDF, PNG, EPS) |
|
||||||
| **高效能圖片** | VIPS(大型圖片處理) |
|
| **高效能圖片** | VIPS(大型圖片處理) |
|
||||||
| **OCR** | Tesseract OCR 文字辨識 |
|
| **OCR** | Tesseract OCR 文字辨識 |
|
||||||
| **PDF 翻譯** | PDFMathTranslate、BabelDOC |
|
| **PDF 翻譯** | PDFMathTranslate、BabelDOC |
|
||||||
| **PDF 轉 Markdown** | MinerU 智能擷取 |
|
| **PDF 轉 Markdown** | MinerU 智能擷取 |
|
||||||
| **AI 模型** | YOLO、VLM 等深度學習模型 |
|
| **AI 模型** | YOLO、VLM 等深度學習模型 |
|
||||||
| **電子書** | Calibre(ePub、MOBI 轉換) |
|
| **電子書** | Calibre(ePub、MOBI 轉換) |
|
||||||
| **CAD/3D** | assimp、OpenCascade |
|
| **CAD/3D** | assimp、OpenCascade |
|
||||||
| **PDF/A 驗證** | veraPDF |
|
| **PDF/A 驗證** | veraPDF |
|
||||||
| **長期驗證** | LTV、OCSP、CRL、TSA |
|
| **長期驗證** | LTV、OCSP、CRL、TSA |
|
||||||
| **完整 TexLive** | 進階 LaTeX 排版 |
|
| **完整 TexLive** | 進階 LaTeX 排版 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -101,12 +102,12 @@ docker compose up -d
|
||||||
|
|
||||||
## 🏷️ Image Tag 說明
|
## 🏷️ Image Tag 說明
|
||||||
|
|
||||||
| Tag | 說明 |
|
| Tag | 說明 |
|
||||||
|-----|------|
|
| ---------------------------------- | ----------------- |
|
||||||
| `convertx/convertx-cn:latest` | Full 版最新穩定版 |
|
| `convertx/convertx-cn:latest` | Full 版最新穩定版 |
|
||||||
| `convertx/convertx-cn:latest-lite` | Lite 版最新穩定版 |
|
| `convertx/convertx-cn:latest-lite` | Lite 版最新穩定版 |
|
||||||
| `convertx/convertx-cn:0.1.15` | Full 版指定版本 |
|
| `convertx/convertx-cn:0.1.15` | Full 版指定版本 |
|
||||||
| `convertx/convertx-cn:0.1.15-lite` | Lite 版指定版本 |
|
| `convertx/convertx-cn:0.1.15-lite` | Lite 版指定版本 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -158,7 +159,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
```yaml
|
```yaml
|
||||||
services:
|
services:
|
||||||
convertx:
|
convertx:
|
||||||
image: convertx/convertx-cn:latest # Full 版
|
image: convertx/convertx-cn:latest # Full 版
|
||||||
```
|
```
|
||||||
|
|
||||||
### ⚠️ 重要提醒
|
### ⚠️ 重要提醒
|
||||||
|
|
@ -171,33 +172,33 @@ services:
|
||||||
|
|
||||||
## 📊 Lite vs Full 功能對照表
|
## 📊 Lite vs Full 功能對照表
|
||||||
|
|
||||||
| 功能類別 | 功能 | Lite | Full |
|
| 功能類別 | 功能 | Lite | Full |
|
||||||
|----------|------|:----:|:----:|
|
| --------- | ---------------------------- | :--: | :--: |
|
||||||
| **UI** | 多語言介面(65 語言) | ✅ | ✅ |
|
| **UI** | 多語言介面(65 語言) | ✅ | ✅ |
|
||||||
| **UI** | 深色/淺色主題 | ✅ | ✅ |
|
| **UI** | 深色/淺色主題 | ✅ | ✅ |
|
||||||
| **轉檔** | 文件轉檔(LibreOffice) | ✅ | ✅ |
|
| **轉檔** | 文件轉檔(LibreOffice) | ✅ | ✅ |
|
||||||
| **轉檔** | 圖片轉檔(GraphicsMagick) | ✅ | ✅ |
|
| **轉檔** | 圖片轉檔(GraphicsMagick) | ✅ | ✅ |
|
||||||
| **轉檔** | 圖片轉檔(ImageMagick) | ❌ | ✅ |
|
| **轉檔** | 圖片轉檔(ImageMagick) | ❌ | ✅ |
|
||||||
| **轉檔** | 影音轉檔(FFmpeg) | ✅ | ✅ |
|
| **轉檔** | 影音轉檔(FFmpeg) | ✅ | ✅ |
|
||||||
| **轉檔** | 文件格式(Pandoc) | ✅ | ✅ |
|
| **轉檔** | 文件格式(Pandoc) | ✅ | ✅ |
|
||||||
| **轉檔** | 向量圖(Inkscape) | ❌ | ✅ |
|
| **轉檔** | 向量圖(Inkscape) | ❌ | ✅ |
|
||||||
| **轉檔** | 高效能圖片(VIPS) | ❌ | ✅ |
|
| **轉檔** | 高效能圖片(VIPS) | ❌ | ✅ |
|
||||||
| **轉檔** | 電子書(Calibre) | ❌ | ✅ |
|
| **轉檔** | 電子書(Calibre) | ❌ | ✅ |
|
||||||
| **轉檔** | CAD/3D(assimp) | ❌ | ✅ |
|
| **轉檔** | CAD/3D(assimp) | ❌ | ✅ |
|
||||||
| **PDF** | PDF/A 轉換 | ✅ | ✅ |
|
| **PDF** | PDF/A 轉換 | ✅ | ✅ |
|
||||||
| **PDF** | PDF 防修改 | ✅ | ✅ |
|
| **PDF** | PDF 防修改 | ✅ | ✅ |
|
||||||
| **PDF** | PDF 數位簽章 | ✅ | ✅ |
|
| **PDF** | PDF 數位簽章 | ✅ | ✅ |
|
||||||
| **PDF** | PDF/A 驗證(veraPDF) | ❌ | ✅ |
|
| **PDF** | PDF/A 驗證(veraPDF) | ❌ | ✅ |
|
||||||
| **PDF** | 長期驗證(LTV) | ❌ | ✅ |
|
| **PDF** | 長期驗證(LTV) | ❌ | ✅ |
|
||||||
| **OCR** | 文字辨識(Tesseract) | ❌ | ✅ |
|
| **OCR** | 文字辨識(Tesseract) | ❌ | ✅ |
|
||||||
| **OCR** | ocrmypdf | ❌ | ✅ |
|
| **OCR** | ocrmypdf | ❌ | ✅ |
|
||||||
| **AI** | PDF 翻譯(PDFMathTranslate) | ❌ | ✅ |
|
| **AI** | PDF 翻譯(PDFMathTranslate) | ❌ | ✅ |
|
||||||
| **AI** | PDF 翻譯(BabelDOC) | ❌ | ✅ |
|
| **AI** | PDF 翻譯(BabelDOC) | ❌ | ✅ |
|
||||||
| **AI** | PDF 轉 Markdown(MinerU) | ❌ | ✅ |
|
| **AI** | PDF 轉 Markdown(MinerU) | ❌ | ✅ |
|
||||||
| **字型** | 基本 CJK 字型 | ✅ | ✅ |
|
| **字型** | 基本 CJK 字型 | ✅ | ✅ |
|
||||||
| **字型** | 完整 Noto 字型集 | ❌ | ✅ |
|
| **字型** | 完整 Noto 字型集 | ❌ | ✅ |
|
||||||
| **LaTeX** | 基本 LaTeX | ❌ | ✅ |
|
| **LaTeX** | 基本 LaTeX | ❌ | ✅ |
|
||||||
| **LaTeX** | 完整 TexLive CJK | ❌ | ✅ |
|
| **LaTeX** | 完整 TexLive CJK | ❌ | ✅ |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,12 @@
|
||||||
|
|
||||||
### 官方預建版(推薦)
|
### 官方預建版(推薦)
|
||||||
|
|
||||||
| Tag | 說明 |
|
| Tag | 說明 |
|
||||||
| ---------------------------------- | -------------------- |
|
| ---------------------------------- | ----------------- |
|
||||||
| `convertx/convertx-cn:latest` | Full 版最新穩定版 |
|
| `convertx/convertx-cn:latest` | Full 版最新穩定版 |
|
||||||
| `convertx/convertx-cn:latest-lite` | Lite 版最新穩定版 |
|
| `convertx/convertx-cn:latest-lite` | Lite 版最新穩定版 |
|
||||||
| `convertx/convertx-cn:v0.1.x` | Full 版指定版本號 |
|
| `convertx/convertx-cn:v0.1.x` | Full 版指定版本號 |
|
||||||
| `convertx/convertx-cn:v0.1.x-lite` | Lite 版指定版本號 |
|
| `convertx/convertx-cn:v0.1.x-lite` | Lite 版指定版本號 |
|
||||||
|
|
||||||
### Full 版(預設)
|
### Full 版(預設)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue