|
|
3 weken geleden | |
|---|---|---|
| .. | ||
| Dockerfile | 3 weken geleden | |
| README.md | 3 weken geleden | |
| main.py | 3 weken geleden | |
| md_to_pdf.js | 3 weken geleden | |
| package.json | 3 weken geleden | |
| requirements.txt | 3 weken geleden | |
これは FastAPI ベースの独立したドキュメント変換サービスで、Word、PPT、Excel などのドキュメントを PDF に変換するために使用されます。RAG の高精度モードにおけるドキュメント処理パイプラインをサポートします。
/docs にアクセスしてインタラクティブな API ドキュメントを確認可能/health エンドポイントによるサービス状態の監視# 1. 依存関係のインストール
pip install -r requirements.txt
# 2. サービスの起動
uvicorn main:app --reload --port 8100
# 3. ドキュメントへのアクセス
open http://localhost:8100/docs
# 1. イメージのビルド
docker build -t libreoffice-server .
# 2. コンテナの実行
docker run -d \
--name lo-converter \
-p 8100:8100 \
-v ./uploads:/uploads \
-v ./temp:/temp \
libreoffice-server
# 3. ヘルスチェック
curl http://localhost:8100/health
ドキュメントを PDF に変換します。
リクエスト:
curl -X POST -F "file=@test.docx" http://localhost:8100/convert
レスポンス:
{
"pdf_path": "/uploads/test.pdf",
"converted": true,
"original": "test.docx",
"file_size": 102400
}
サポートされている形式:
.pdf - そのまま返却.doc, .docx - Word ドキュメント.ppt, .pptx - PowerPoint プレゼンテーション.xls, .xlsx - Excel スプレッドシートヘルスチェックを行います。
レスポンス:
{
"status": "healthy",
"service": "libreoffice-converter",
"version": "1.0.0",
"uptime": 123.45
}
自動生成される API ドキュメント (Swagger UI) です。
メインプロジェクトの docker-compose.yml に以下を追加してください:
services:
libreoffice:
build: ./libreoffice-server
container_name: lo-converter
volumes:
- ./uploads:/uploads
- ./temp:/temp
ports:
- "8100:8100"
restart: unless-stopped
deploy:
resources:
limits:
memory: 1G
cpus: '1.0'
サービス自体に特別な環境変数は必要ありませんが、ボリュームのマウントによって以下のディレクトリを構成できます:
/uploads - ドキュメントの保存ディレクトリ/temp - 一時ファイルのディレクトリ| ドキュメント形式 | ページ数 | 変換時間 | 備考 |
|---|---|---|---|
| Word | 50ページ | 約10秒 | 書式を保持 |
| PPT | 50ページ | 約15秒 | 各ページを画像として処理 |
| Excel | 10ページ | 約8秒 | 表として変換 |
| 任意 | 約0秒 | 直接返却 |
docker logs -f lo-converter
# テストファイルの準備
echo "test" > test.docx
# 変換テストの実行
curl -X POST -F "file=@test.docx" http://localhost:8100/convert | jq
docker exec -it lo-converter sh
// server/src/libreoffice/libreoffice.service.ts
async convertToPDF(filePath: string): Promise<string> {
const fileName = path.basename(filePath);
const fileBuffer = await fs.readFile(filePath);
const formData = new FormData();
formData.append('file', fileBuffer, fileName);
const response = await axios.post(
`${this.baseUrl}/convert`,
formData,
{ timeout: 300000 }
);
return response.data.pdf_path;
}
| 問題 | 原因 | 解決策 |
|---|---|---|
| 変換失敗 | LibreOffice がインストールされていない | Dockerfile の依存関係を確認してください |
| タイムアウト | ファイルが大きすぎる | タイムアウト時間を増やすか、ファイルを分割してください |
| ポート競合 | 8100 ポートが既に使用されている | ポートマッピングを変更してください |
| 権限エラー | ディレクトリの権限不足 | ボリュームの権限を確認してください |
MIT License