טיפול בחריגות

טיפול בחריגות

טיפול בחריגות

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

ראה גם

 עברית