# 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 はキャッシュ（保存）されます。
