0a9588abb7
- 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
91 lines
4.5 KiB
Markdown
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 はキャッシュ(保存)されます。
|