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 blokcatch (PdfException)tylko jako zabezpieczenie dla wszystkiego, co może zgłosić biblioteka. - Sprawdź
Form.IsXfalubForm.Typeprzed wywołaniem metod specyficznych dla XFA, aby uniknąćInvalidFormTypeOperationException. - Wyszukaj czcionki przy użyciu
FontRepository.FindFontprzed renderowaniem, aby brakujące czcionki mogły być obsłużone jawnie, zamiast polegać wyłącznie na obsłudze wyjątków. - Gdy nieoczekiwany
PdfExceptiontrafi do twojego handlera najwyższego poziomu, utwórzCrashReportOptionsz przechwyconym wyjątkiem i wywołajex.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
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
InvalidPasswordException przy otwieraniu dokumentu | Podano nieprawidłowe lub brakujące hasło | Przekaż poprawne hasło do konstruktora Document(filename, password) |
InvalidPdfFileFormatException przy otwieraniu dokumentu | Plik nie jest PDF, jest uszkodzony lub ucięty | Zweryfikuj nagłówek pliku i ponownie pobierz plik źródłowy |
FontNotFoundException podczas renderowania | Żądana czcionka nie jest zainstalowana i nie zarejestrowano żadnego zamiennika | Zarejestruj źródło czcionki lub sprawdź FontRepository.Substitutions |
UnsupportedFontTypeException z FontRepository.OpenFont | Dostarczony plik nie jest rozpoznanym programem czcionki | Potwierdź, że plik jest prawidłową czcionką przed jego otwarciem |
InvalidFormTypeOperationException w operacjach formularza | Metoda specyficzna dla XFA wywołana na formularzu nie-XFA lub odwrotnie | Sprawdź 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
| Klasa | Opis |
|---|---|
PdfException | Podstawowy wyjątek dla błędów podczas wykonywania aplikacji PDF |
PdfTextDecodingException | Rzucany, gdy nie można zdekodować treści tekstu |
IncorrectFontUsageException | Rzucany, gdy operator wyświetlający tekst pojawia się bez ustawionej czcionki w stanie graficznym |
InvalidPasswordException | Rzucany, gdy próbowano wykonać operację chronioną hasłem bez ważnego hasła |
InvalidPdfFileFormatException | Rzucany, gdy nie można otworzyć strumienia jako PDF |
FontNotFoundException | Rzucany, gdy nie można zlokalizować żądanego fontu |
UnsupportedFontTypeException | Rzucany, gdy plik nie może zostać otwarty jako font, ponieważ jego format nie jest obsługiwany |
InvalidFormTypeOperationException | Rzucany, gdy operacja jest podejmowana na niewłaściwym typie formularza |
PdfExceptionMessages | Ucentralizowane ciągi komunikatów wyświetlane przez wyjątki biblioteki oraz diagnostykę bezpieczeństwa |