## 新功能 - OCRmyPDF 轉換引擎:將掃描版 PDF 轉換為可搜尋 PDF - 支援 7 種語言:en, zh-TW, zh, ja, ko, de, fr - 與 PDFMathTranslate 風格一致的 UI 格式 (pdf-<lang>) - 自動偵測頁面方向並旋轉 - 自動校正傾斜 - 跳過已有文字層的頁面 - 詳細的 5 階段處理進度輸出 ## 建置 - Dockerfile:安裝 ocrmypdf 與 Tesseract OCR 語言包 ## 文件 - 更新 OCR 功能文件 - 文件目錄結構改為中文名稱 ## 測試 - 修復 BabelDOC 和 PDFMathTranslate 測試的 OCR mock - 所有 345 個測試通過
179 lines
4.1 KiB
Markdown
179 lines
4.1 KiB
Markdown
# 專案結構
|
||
|
||
本文件說明 ConvertX-CN 的程式碼結構與架構。
|
||
|
||
---
|
||
|
||
## 目錄結構
|
||
|
||
```
|
||
ConvertX-CN/
|
||
├── src/ # 前端原始碼
|
||
│ ├── index.tsx # 主入口
|
||
│ ├── main.css # 主樣式
|
||
│ ├── components/ # React 元件
|
||
│ ├── converters/ # 轉換器定義
|
||
│ ├── db/ # 資料庫相關
|
||
│ ├── helpers/ # 工具函數
|
||
│ ├── i18n/ # 國際化
|
||
│ ├── icons/ # 圖示元件
|
||
│ ├── locales/ # 翻譯檔案
|
||
│ ├── pages/ # 頁面元件
|
||
│ ├── theme/ # 主題相關
|
||
│ └── transfer/ # 檔案傳輸
|
||
├── public/ # 靜態資源
|
||
├── api-server/ # Rust API Server(選用)
|
||
│ ├── src/ # Rust 原始碼
|
||
│ ├── docs/ # API 文件
|
||
│ └── tests/ # 測試
|
||
├── docs/ # 文件
|
||
├── tests/ # 測試
|
||
├── scripts/ # 腳本
|
||
├── data/ # 資料目錄(runtime)
|
||
├── Dockerfile # Docker 建構檔
|
||
├── compose.yaml # Docker Compose
|
||
└── package.json # Node.js 依賴
|
||
```
|
||
|
||
---
|
||
|
||
## 技術棧
|
||
|
||
### 前端
|
||
|
||
| 技術 | 用途 |
|
||
| ----------- | -------- |
|
||
| Bun | Runtime |
|
||
| Elysia | Web 框架 |
|
||
| React | UI 元件 |
|
||
| TailwindCSS | 樣式 |
|
||
| TypeScript | 類型安全 |
|
||
|
||
### 後端 (Web UI)
|
||
|
||
| 技術 | 用途 |
|
||
| ------ | -------- |
|
||
| Bun | Runtime |
|
||
| Elysia | Web 框架 |
|
||
| SQLite | 資料庫 |
|
||
|
||
### API Server(選用)
|
||
|
||
| 技術 | 用途 |
|
||
| ------------- | -------- |
|
||
| Rust | 語言 |
|
||
| Axum | Web 框架 |
|
||
| async-graphql | GraphQL |
|
||
|
||
---
|
||
|
||
## 核心模組
|
||
|
||
### src/converters/
|
||
|
||
定義所有轉換器的設定與格式支援。
|
||
|
||
```
|
||
converters/
|
||
├── main.ts # 轉換器主邏輯
|
||
├── types.ts # 類型定義
|
||
├── ffmpeg.ts # FFmpeg 設定
|
||
├── imagemagick.ts # ImageMagick 設定
|
||
├── libreoffice.ts # LibreOffice 設定
|
||
├── pandoc.ts # Pandoc 設定
|
||
├── calibre.ts # Calibre 設定
|
||
└── ...
|
||
```
|
||
|
||
### src/i18n/
|
||
|
||
國際化模組,支援 65 種語言。
|
||
|
||
```
|
||
i18n/
|
||
├── index.ts # i18n 初始化
|
||
└── service.ts # 語言服務
|
||
```
|
||
|
||
### src/locales/
|
||
|
||
翻譯檔案,每個語言一個 JSON 檔案。
|
||
|
||
```
|
||
locales/
|
||
├── en.json # 英文
|
||
├── zh-TW.json # 繁體中文
|
||
├── zh-CN.json # 簡體中文
|
||
├── ja.json # 日文
|
||
└── ...
|
||
```
|
||
|
||
### src/transfer/
|
||
|
||
檔案傳輸模組,處理上傳與下載。
|
||
|
||
```
|
||
transfer/
|
||
├── upload.ts # 上傳邏輯
|
||
├── download.ts # 下載邏輯
|
||
└── chunked.ts # 分段傳輸
|
||
```
|
||
|
||
---
|
||
|
||
## API Server 結構
|
||
|
||
```
|
||
api-server/
|
||
├── src/
|
||
│ ├── main.rs # 入口
|
||
│ ├── lib.rs # 模組定義
|
||
│ ├── config.rs # 設定
|
||
│ ├── auth.rs # JWT 認證
|
||
│ ├── engine.rs # 引擎管理
|
||
│ ├── conversion.rs# 轉換邏輯
|
||
│ ├── rest.rs # REST API
|
||
│ ├── graphql.rs # GraphQL API
|
||
│ ├── models.rs # 資料模型
|
||
│ └── error.rs # 錯誤處理
|
||
├── tests/
|
||
│ ├── api_tests.rs
|
||
│ ├── graphql_tests.rs
|
||
│ └── integration_tests.rs
|
||
└── docs/
|
||
├── API_SPEC.md
|
||
└── ARCHITECTURE.md
|
||
```
|
||
|
||
---
|
||
|
||
## 資料流
|
||
|
||
### 檔案轉換流程
|
||
|
||
```
|
||
1. 使用者上傳檔案
|
||
↓
|
||
2. 儲存到 data/uploads/
|
||
↓
|
||
3. 呼叫對應轉換器
|
||
↓
|
||
4. 輸出到 data/output/
|
||
↓
|
||
5. 使用者下載結果
|
||
```
|
||
|
||
### 檔案傳輸策略
|
||
|
||
| 檔案大小 | 傳輸方式 | 說明 |
|
||
| -------- | -------- | ------------ |
|
||
| ≤ 10MB | 直接傳輸 | 單一請求完成 |
|
||
| > 10MB | 分段傳輸 | 5MB chunks |
|
||
|
||
---
|
||
|
||
## 相關文件
|
||
|
||
- [本地開發](本地開發.md)
|
||
- [貢獻指南](貢獻指南.md)
|
||
- [測試策略](../測試/測試策略.md)
|