טיפול בחריגות
טיפול בחריגות
מדריך זה מציג כיצד 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 | מחרוזות הודעה ממורכזות המוצגות על ידי החריגות והאבחונים האבטחתיים של הספרייה |