例外処理

例外処理

このガイドでは、Aspose.PDF FOSS for .NET が失敗をどのように PdfException を根底とした型付き例外階層を通じてシグナルし、PdfException は System.Exception から派生し、各エラーカテゴリの捕捉方法を示します。ライブラリ内のすべての PDF 固有例外—不正なパスワード、読み取り不能なファイル、欠落フォント、無効なフォーム操作—は PdfException から派生するため、PdfException だけを捕捉すればライブラリが発生させるあらゆるエラーを捕捉できます。一方、より具体的な catch ブロックを使用すれば、各失敗モードに対して異なる対応が可能です。


パスワードおよびセキュリティエラー

InvalidPasswordException は、有効なパスワードを提供せずにパスワード保護された操作を試みたときにスローされます。たとえば、間違ったパスワードで暗号化された文書を開く場合などです。

try
{
    var doc = new Document("encrypted.pdf", "wrong-password");
}
catch (InvalidPasswordException ex)
{
    Console.WriteLine($"Password rejected: {ex.Message}");
}

ファイル形式エラー

InvalidPdfFileFormatException は、ストリームを PDF として開くことができない場合にスローされます—ヘッダーが不正、ファイルが切り詰められている、または内容が PDF とまったく認識できない場合などです。

try
{
    var doc = new Document("not-a-pdf.txt");
}
catch (InvalidPdfFileFormatException ex)
{
    Console.WriteLine($"Not a valid PDF: {ex.Message}");
}

フォントエラー

フォントに関する失敗は、何が問題だったかに応じて、3つの異なる例外タイプに分類されます:

  • FontNotFoundException — 要求されたフォント名に一致するシステムフォントまたはカスタムフォントソースがありません。
  • UnsupportedFontTypeException — フォントとして提供されたファイルが認識されたフォントプログラムではありません。
  • IncorrectFontUsageException — 現在のグラフィックス状態でフォントが設定されていない状態で、コンテンツストリームにテキスト表示オペレータが現れました。
try
{
    var font = FontRepository.FindFont("NonexistentFont");
}
catch (FontNotFoundException ex)
{
    Console.WriteLine($"Font not found: {ex.Message}");
}

try
{
    var font = FontRepository.OpenFont("not-a-font-file.dat");
}
catch (UnsupportedFontTypeException ex)
{
    Console.WriteLine($"Unsupported font file: {ex.Message}");
}

try
{
    var extractor = new PdfExtractor(doc);
    extractor.ExtractText();
}
catch (IncorrectFontUsageException ex)
{
    Console.WriteLine($"Content stream font error: {ex.Message}");
}

テキスト抽出エラー

PdfTextDecodingException はテキストコンテンツをデコードできない場合にスローされます。たとえば、フォントが参照するエンコーディングが欠落しているか、形式が不正な場合です。

try
{
    var extractor = new PdfExtractor(doc);
    extractor.GetText("output.txt");
}
catch (PdfTextDecodingException ex)
{
    Console.WriteLine($"Text decoding failed: {ex.Message}");
}

フォームタイプエラー

InvalidFormTypeOperationException は誤ったフォームタイプに対して操作が試みられたときにスローされます — 例えば、XFA ベースでないフォームで XFA 固有のメソッドを呼び出す場合などです。

try
{
    var form = new Form(doc);
    form.AssignXfa(xmlData);
}
catch (InvalidFormTypeOperationException ex)
{
    Console.WriteLine($"Wrong form type: {ex.Message}");
}

ヒントとベストプラクティス

  • 最も具体的な例外タイプを最初に捕捉してください(例: InvalidPasswordException)。ライブラリが他に投げるすべての例外に対するフォールバックとして、最後に catch (PdfException) ブロックを追加します。
  • XFA 固有のメソッドを呼び出す前に Form.IsXfa または Form.Type をチェックし、InvalidFormTypeOperationException を回避してください。
  • レンダリング前に FontRepository.FindFont でフォントを検索し、欠落フォントを明示的に処理できるようにします。例外処理だけに依存しないようにしてください。
  • 予期しない PdfException がトップレベルハンドラに到達したときは、捕捉した例外を用いて CrashReportOptions を作成し、ex.GenerateCrashReport(options) を呼び出してサポート要求用の診断レポートを取得します。
  • ファイルを先に開いて再試行するのではなく、常に Document コンストラクタのオーバーロードを通じてドキュメントパスワードを渡してください。

一般的な問題

問題原因修正
ドキュメントを開くときのInvalidPasswordExceptionパスワードが間違っているか、欠落しています正しいパスワードをDocument(filename, password)コンストラクタに渡す
ドキュメントを開くときのInvalidPdfFileFormatExceptionファイルがPDFでないか、破損または切り詰められていますファイルヘッダーを確認し、ソースファイルを再取得してください
FontNotFoundException レンダリング中に要求されたフォントがインストールされておらず、代替フォントも登録されていませんフォントソースを登録するか、FontRepository.Substitutions を確認してください
UnsupportedFontTypeException from FontRepository.OpenFont提供されたファイルは認識できるフォントプログラムではありません開く前に、ファイルが有効なフォントであることを確認してください
InvalidFormTypeOperationException フォーム操作時にXFA 固有のメソッドが非 XFA フォームで呼び出された、またはその逆type-specific methods を呼び出す前に Form.IsXfa または Form.Type を確認してください

FAQ

PdfException を捕捉すべきですか、それとも特定のサブクラスですか?

特定のサブクラス(例: InvalidPasswordException)を捕捉してください。そのサブクラスは、その失敗に対して異なる処理が必要なときに使用します。その他のライブラリが投げるエラーすべてのフォールバックとして、最後に catch (PdfException) ブロックを追加してください。

PDF 固有の例外はすべて PdfException から派生していますか?

はい。PdfTextDecodingException、IncorrectFontUsageException、InvalidPasswordException、InvalidPdfFileFormatException、FontNotFoundException、UnsupportedFontTypeException、および InvalidFormTypeOperationException はすべて PdfException から派生しており、PdfException はさらに System.Exception から派生しています。

PdfExceptionMessages は何のためのものですか?

PdfExceptionMessages は、ライブラリの例外やセキュリティ診断で表出されるメッセージ文字列を集中管理する static クラスであり、DangerousFile メッセージも含まれます。

例外が発生したときに診断レポートを生成できますか?

はい。捕捉した例外を使用して CrashReportOptions のインスタンスを作成し、必要に応じて ApplicationTitle や CrashReportDirectory といったプロパティを設定し、PdfException に対して GenerateCrashReport(options) を呼び出して詳細なクラッシュレポートを書き出してください。


API Reference 概要

クラス説明
PdfExceptionPDF アプリケーション実行中のエラー用の基本例外
PdfTextDecodingExceptionテキストコンテンツをデコードできない場合にスローされます
IncorrectFontUsageExceptionグラフィックス状態でフォントが設定されていない状態でテキスト表示オペレータが現れたときにスローされます
InvalidPasswordException有効なパスワードがない状態でパスワード保護された操作が試行されたときにスローされます
InvalidPdfFileFormatExceptionストリームを PDF として開くことができない場合にスローされます
FontNotFoundException要求されたフォントが見つからないときにスローされます
UnsupportedFontTypeExceptionフォーマットがサポートされていないため、ファイルをフォントとして開くことができない場合にスローされます
InvalidFormTypeOperationException間違ったフォームタイプで操作が試みられた場合にスローされます
PdfExceptionMessagesライブラリの例外およびセキュリティ診断で表示される、集中管理されたメッセージ文字列

参照

 日本語