Obsługa wyjątków

Obsługa wyjątków

Ten przewodnik pokazuje, jak Aspose.PDF FOSS dla .NET sygnalizuje błędy za pomocą typowanej hierarchii wyjątków zaczynającej się od PdfException, który sam dziedziczy po System.Exception, oraz jak przechwytywać każdą kategorię błędów. Każdy specyficzny dla PDF wyjątek w bibliotece — złe hasło, nieczytelny plik, brakująca czcionka lub nieprawidłowa operacja formularza — dziedziczy po PdfException, więc przechwycenie samego PdfException wystarczy, aby przechwycić dowolny błąd wyrzucony przez bibliotekę, podczas gdy bardziej szczegółowe bloki catch pozwalają reagować inaczej na każdy tryb awarii.


Błędy haseł i zabezpieczeń

InvalidPasswordException jest rzucany, gdy operacja chroniona hasłem jest podejmowana bez podania prawidłowego hasła, na przykład przy otwieraniu zaszyfrowanego dokumentu z niewłaściwym hasłem.

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

Błędy formatu pliku

InvalidPdfFileFormatException jest rzucany, gdy strumień nie może być otwarty jako PDF — zły nagłówek, przycięty plik lub zawartość, która w ogóle nie jest rozpoznawalna jako PDF.

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

Błędy czcionek

Błędy związane z czcionkami dzielą się na trzy odrębne typy wyjątków, w zależności od tego, co poszło nie tak:

  • FontNotFoundException — brak systemowej czcionki lub źródła czcionki niestandardowej pasującego do żądanej nazwy czcionki.
  • UnsupportedFontTypeException — dostarczony plik jako czcionka nie jest rozpoznanym programem czcionkowym.
  • IncorrectFontUsageException — w strumieniu zawartości pojawia się operator wyświetlający tekst, podczas gdy w bieżącym stanie graficznym nie ustawiono czcionki.
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}");
}

Błędy ekstrakcji tekstu

PdfTextDecodingException jest rzucany, gdy nie można zdekodować treści tekstowej, na przykład gdy kodowanie odwoływane przez czcionkę jest brakujące lub niepoprawne.

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

Błędy typu formularza

InvalidFormTypeOperationException jest rzucany, gdy operacja jest podejmowana na niewłaściwym typie formularza — na przykład wywołanie metody specyficznej dla XFA w formularzu, który nie opiera się na XFA.

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

Wskazówki i najlepsze praktyki

  • Najpierw przechwyć najbardziej konkretny typ wyjątku (na przykład InvalidPasswordException) i dodaj ostateczny blok catch (PdfException) tylko jako zabezpieczenie dla wszystkiego, co może zgłosić biblioteka.
  • Sprawdź Form.IsXfa lub Form.Type przed wywołaniem metod specyficznych dla XFA, aby uniknąć InvalidFormTypeOperationException.
  • Wyszukaj czcionki przy użyciu FontRepository.FindFont przed renderowaniem, aby brakujące czcionki mogły być obsłużone jawnie, zamiast polegać wyłącznie na obsłudze wyjątków.
  • Gdy nieoczekiwany PdfException trafi do twojego handlera najwyższego poziomu, utwórz CrashReportOptions z przechwyconym wyjątkiem i wywołaj ex.GenerateCrashReport(options), aby uzyskać raport diagnostyczny dla zgłoszeń wsparcia.
  • Zawsze przekazuj hasło dokumentu przez przeciążenie konstruktora Document, zamiast najpierw otwierać plik i ponawiać próbę.

Typowe problemy

ProblemPrzyczynaRozwiązanie
InvalidPasswordException przy otwieraniu dokumentuPodano nieprawidłowe lub brakujące hasłoPrzekaż poprawne hasło do konstruktora Document(filename, password)
InvalidPdfFileFormatException przy otwieraniu dokumentuPlik nie jest PDF, jest uszkodzony lub uciętyZweryfikuj nagłówek pliku i ponownie pobierz plik źródłowy
FontNotFoundException podczas renderowaniaŻądana czcionka nie jest zainstalowana i nie zarejestrowano żadnego zamiennikaZarejestruj źródło czcionki lub sprawdź FontRepository.Substitutions
UnsupportedFontTypeException z FontRepository.OpenFontDostarczony plik nie jest rozpoznanym programem czcionkiPotwierdź, że plik jest prawidłową czcionką przed jego otwarciem
InvalidFormTypeOperationException w operacjach formularzaMetoda specyficzna dla XFA wywołana na formularzu nie-XFA lub odwrotnieSprawdź Form.IsXfa lub Form.Type przed wywołaniem metod specyficznych dla typu

FAQ

Czy powinienem łapać PdfException czy konkretną podklasę?

Przechwytuj konkretną podklasę, taką jak InvalidPasswordException, gdy musisz zareagować inaczej na to niepowodzenie. Dodaj końcowy blok catch (PdfException) jako zabezpieczenie dla wszelkich innych błędów zgłaszanych przez bibliotekę.

Czy wszystkie wyjątki specyficzne dla PDF dziedziczą po PdfException?

Tak. PdfTextDecodingException, IncorrectFontUsageException, InvalidPasswordException, InvalidPdfFileFormatException, FontNotFoundException, UnsupportedFontTypeException i InvalidFormTypeOperationException wszystkie dziedziczą po PdfException, który sam dziedziczy po System.Exception.

Do czego służy PdfExceptionMessages?

PdfExceptionMessages jest klasą statyczną, która centralizuje ciągi komunikatów zgłaszane przez wyjątki biblioteki i diagnostykę zabezpieczeń, w tym komunikat DangerousFile.

Czy mogę wygenerować raport diagnostyczny, gdy wystąpi wyjątek?

Tak. Utwórz instancję CrashReportOptions z przechwyconym wyjątkiem, opcjonalnie ustaw właściwości takie jak ApplicationTitle i CrashReportDirectory, a następnie wywołaj GenerateCrashReport(options) na PdfException, aby zapisać szczegółowy raport awarii.


API Reference Podsumowanie

KlasaOpis
PdfExceptionPodstawowy wyjątek dla błędów podczas wykonywania aplikacji PDF
PdfTextDecodingExceptionRzucany, gdy nie można zdekodować treści tekstu
IncorrectFontUsageExceptionRzucany, gdy operator wyświetlający tekst pojawia się bez ustawionej czcionki w stanie graficznym
InvalidPasswordExceptionRzucany, gdy próbowano wykonać operację chronioną hasłem bez ważnego hasła
InvalidPdfFileFormatExceptionRzucany, gdy nie można otworzyć strumienia jako PDF
FontNotFoundExceptionRzucany, gdy nie można zlokalizować żądanego fontu
UnsupportedFontTypeExceptionRzucany, gdy plik nie może zostać otwarty jako font, ponieważ jego format nie jest obsługiwany
InvalidFormTypeOperationExceptionRzucany, gdy operacja jest podejmowana na niewłaściwym typie formularza
PdfExceptionMessagesUcentralizowane ciągi komunikatów wyświetlane przez wyjątki biblioteki oraz diagnostykę bezpieczeństwa

Zobacz także

 Polski