PDF_PREVIEW_FIX.md 4.5 KB

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. すべてのサービスを起動します:

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