Διαχείριση Εξαίρεσης
Διαχείριση Εξαίρεσεων
Αυτός ο οδηγός δείχνει πώς το Aspose.PDF FOSS για .NET σηματοδοτεί αποτυχίες μέσω μιας τυποποιημένης ιεραρχίας εξαιρέσεων που έχει ρίζα στο 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}");
}Σφάλματα Γραμματοσειράς
Τα σφάλματα που σχετίζονται με γραμματοσειρές χωρίζονται σε τρεις ξεχωριστούς τύπους εξαιρέσεων, ανάλογα με το τι πήγε στραβά:
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)μόνο ως εναλλακτική λύση για οτιδήποτε άλλο προκαλεί η βιβλιοθήκη. - Ελέγξτε το
Form.IsXfaή τοForm.Typeπριν καλέσετε μεθόδους ειδικές για XFA ώστε να αποφύγετε τοInvalidFormTypeOperationException. - Αναζητήστε τις γραμματοσειρές με
FontRepository.FindFontπριν από την απόδοση, ώστε οι ελλιπείς γραμματοσειρές να μπορούν να αντιμετωπίζονται ρητά, αντί να βασίζεστε αποκλειστικά στη διαχείριση εξαιρέσεων. - Όταν ένα απροσδόκητο
PdfExceptionφτάσει στον ανώτερο χειριστή σας, δημιουργήστε έναCrashReportOptionsμε την πιασμένη εξαίρεση και καλέστε τοex.GenerateCrashReport(options)για να καταγράψετε μια διαγνωστική αναφορά για αιτήματα υποστήριξης. - Πάντα να περνάτε τον κωδικό πρόσβασης του εγγράφου μέσω του υπερφορτωμένου κατασκευαστή
Documentαντί να ανοίγετε το αρχείο πρώτα και να προσπαθείτε ξανά.
Συνηθισμένα Προβλήματα
| Πρόβλημα | Αιτία | Διόρθωση |
|---|---|---|
InvalidPasswordException κατά το άνοιγμα του εγγράφου | Δόθηκε λανθασμένος ή ελλιπής κωδικός πρόσβασης | Περάστε τον σωστό κωδικό πρόσβασης στον κατασκευαστή Document(filename, password) |
InvalidPdfFileFormatException κατά το άνοιγμα του εγγράφου | Το αρχείο δεν είναι PDF, ή είναι κατεστραμμένο ή αποκομμένο | Επαληθεύστε την κεφαλίδα του αρχείου και αποκτήστε ξανά το αρχικό αρχείο |
FontNotFoundException κατά τη διάρκεια της απόδοσης | Η ζητούμενη γραμματοσειρά δεν είναι εγκατεστημένη και δεν έχει καταχωρηθεί υποκατάστατο | Καταχωρίστε μια πηγή γραμματοσειράς ή ελέγξτε το FontRepository.Substitutions |
UnsupportedFontTypeException από FontRepository.OpenFont | Το παρεχόμενο αρχείο δεν είναι αναγνωρισμένο πρόγραμμα γραμματοσειράς | Επιβεβαιώστε ότι το αρχείο είναι έγκυρη γραμματοσειρά πριν το ανοίξετε |
InvalidFormTypeOperationException σε λειτουργίες φόρμας | Μέθοδος ειδική για XFA κλήθηκε σε μη XFA φόρμα, ή το αντίστροφο | Ελέγξτε το Form.IsXfa ή το Form.Type πριν καλέσετε μεθόδους ειδικές για τύπο |
FAQ
Πρέπει να πιάσω PdfException ή την συγκεκριμένη υποκατηγορία;
Πιάσε την συγκεκριμένη υποκατηγορία, όπως το InvalidPasswordException, όταν χρειάζεται να αντιδράς διαφορετικά σε αυτήν την αποτυχία. Πρόσθεσε ένα τελικό μπλοκ catch (PdfException) ως εναλλακτική λύση για οποιοδήποτε άλλο σφάλμα που δημιουργείται από τη βιβλιοθήκη.
Προέρχονται όλες οι εξαιρέσεις ειδικές για PDF από το PdfException;
Ναι. Τα PdfTextDecodingException, IncorrectFontUsageException, InvalidPasswordException, InvalidPdfFileFormatException, FontNotFoundException, UnsupportedFontTypeException και InvalidFormTypeOperationException προέρχονται όλα από το PdfException, το οποίο με τη σειρά του προέρχεται από το System.Exception.
Για ποιο σκοπό χρησιμοποιείται το PdfExceptionMessages;
Το PdfExceptionMessages είναι μια στατική κλάση που κεντρικοποιεί τις συμβολοσειρές μηνυμάτων που προβάλλονται από τις εξαιρέσεις της βιβλιοθήκης και τις διαγνωστικές ασφαλείας, συμπεριλαμβανομένου του μηνύματος DangerousFile.
Μπορώ να δημιουργήσω μια διαγνωστική αναφορά όταν συμβαίνει μια εξαίρεση;
Ναι. Δημιούργησε μια παρουσία του CrashReportOptions με την παγιδευμένη εξαίρεση, προαιρετικά όρισε ιδιότητες όπως ApplicationTitle και CrashReportDirectory, και κάλεσε το GenerateCrashReport(options) στο PdfException για να γράψεις μια λεπτομερή αναφορά κατάρρευσης.
API Reference Περίληψη
| Κλάση | Περιγραφή |
|---|---|
PdfException | Βασική εξαίρεση για σφάλματα κατά την εκτέλεση της εφαρμογής PDF |
PdfTextDecodingException | Εκπεμπόμενο όταν το κείμενο δεν μπορεί να αποκωδικοποιηθεί |
IncorrectFontUsageException | Εκπεμπόμενο όταν ένας τελεστής εμφάνισης κειμένου εμφανίζεται χωρίς να έχει οριστεί γραμματοσειρά στην κατάσταση γραφικών |
InvalidPasswordException | Εμφανίζεται όταν επιχειρείται μια λειτουργία προστατευμένη με κωδικό πρόσβασης χωρίς έγκυρο κωδικό πρόσβασης |
InvalidPdfFileFormatException | Εμφανίζεται όταν δεν μπορεί να ανοίξει μια ροή ως PDF |
FontNotFoundException | Εμφανίζεται όταν δεν μπορεί να εντοπιστεί η ζητούμενη γραμματοσειρά |
UnsupportedFontTypeException | Εμφανίζεται όταν δεν μπορεί να ανοιχτεί ένα αρχείο ως γραμματοσειρά επειδή η μορφή του δεν υποστηρίζεται |
InvalidFormTypeOperationException | Εκτοξεύεται όταν προσπαθείται μια λειτουργία σε λανθασμένο τύπο φόρμας |
PdfExceptionMessages | Κεντρικές συμβολοσειρές μηνυμάτων που προβάλλονται από τις εξαιρέσεις της βιβλιοθήκης και τις διαγνωστικές ασφαλείας |