Files
aurak/docs/1.0/PDF_PREVIEW_FIX.md
Developer 0a9588abb7 feat: implement QuestionBank CRUD with pagination and template query
- Add pagination support to findAll (page, limit query params)
- Add findByTemplateId method to service
- Add GET /by-template/:templateId endpoint to controller
- Service already includes CRUD for QuestionBank and QuestionBankItem
2026-04-23 17:19:11 +08:00

91 lines
4.5 KiB
Markdown

# PDF プレビュー機能の修正に関する説明
## 問題の分析
これまでの PDF プレビュー機能には、以下の問題がありました:
1. プレビューボタンをクリックした際、PDF のステータスチェックのみが行われ、変換処理が能動的に実行されていませんでした。
2. フロントエンドで HEAD リクエストによるプリロードを行っていましたが、これではバックエンドの変換ロジックをトリガーできませんでした。
3. LibreOffice サービスから返されるパスの処理が不適切でした。
4. エラー処理が不足しており、ユーザーへのフィードバックが不十分でした。
## 修正内容
### 1. バックエンドの修正 (knowledge-base.service.ts)
- `ensurePDFExists` メソッドを修正し、PDF ファイルのパスを正しく処理するようにしました。
- `getPDFStatus` メソッドを改善し、ステータスチェックの正確性を確保しました。
- LibreOffice の変換ロジックを最適化し、PDF ファイルが正しい場所に保存されるようにしました。
### 2. LibreOffice サービスの修正 (libreoffice.service.ts)
- 変換ロジックを修正し、PDF ファイルがローカルファイルシステムに保存されるようにしました。
- 重複した変換を避けるため、PDF ファイルの存在チェックを追加しました。
- インターフェース定義を更新し、多様なレスポンス形式に対応しました。
### 3. フロントエンドの修正 (PDFPreview.tsx)
- ステータスチェックのロジックを変更し、`pending` 状態の際、能動的に変換をトリガーするようにしました。
- エラー処理を改善し、ダウンロードや新しいウィンドウでの表示オプションを追加しました。
- ユーザー体験向上のため、iframe のエラーハンドリングを追加しました。
- UI へのフィードバックを最適化し、変換の進捗を分かりやすく表示するようにしました。
### 4. サービス層の修正 (pdfPreviewService.ts)
- プリロードメソッドを GET リクエストに変更し、変換をトリガーするようにしました。
- 長時間の待機を避けるため、タイムアウト制御を追加しました。
## 新しいワークフロー
1. **ユーザーがプレビューボタンをクリック**
- PDF プレビューのポップアップが開きます。
- 「PDF を変換する準備をしています...」と表示されます。
2. **PDF ステータスのチェック**
- `/api/knowledge-bases/:id/pdf-status` を呼び出します。
- ステータスが `pending` の場合、次のステップに進みます。
3. **変換のトリガー**
- `/api/knowledge-bases/:id/pdf` を呼び出します(GET リクエスト)。
- バックエンドが `ensurePDFExists` メソッドを実行します。
- 変換が必要な場合、LibreOffice サービスを呼び出します。
4. **ステータスのポーリング**
- 3秒ごとにステータスをチェックします。
- 「PDF を変換しています...」と表示されます。
- ステータスが `ready` または `failed` になるまで継続します。
5. **結果の表示**
- 成功:iframe 内に PDF を表示します。
- 失敗:エラーメッセージと代替案(ダウンロード、新しいウィンドウで開く)を表示します。
## テスト手順
1. すべてのサービスを起動します:
```bash
docker-compose up -d elasticsearch tika libreoffice
yarn dev
```
2. PDF 以外のファイル(Word 文書、PPT など)をアップロードします。
3. ファイルの横にある「目」のアイコンをクリックします。
4. 変換プロセスを確認します:
- 「PDF を変換しています...」と表示されるはずです。
- 数分後、PDF の内容が表示されます。
- 失敗した場合は、エラーメッセージと代替案が表示されます。
## サポートされるファイル形式
- Microsoft Office: .doc, .docx, .ppt, .pptx, .xls, .xlsx
- OpenDocument: .odt, .odp, .ods
- その他: .rtf, .txt
## 注意事項
- 大容量ファイルの場合、変換には数分かかることがあります。
- 変換に失敗した場合は、元のファイルのダウンロードを試みてください。
- 重複した変換を避けるため、一度変換された PDF はキャッシュ(保存)されます。