การจัดการข้อยกเว้น
การจัดการข้อยกเว้น
คู่มือนี้แสดงให้เห็นว่า 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)เพื่อบันทึกรายงานการวินิจฉัยสำหรับคำขอสนับสนุน. - ควรส่งรหัสผ่านเอกสารผ่านการ overload ของคอนสตรักเตอร์
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 | สตริงข้อความศูนย์กลางที่ปรากฏจากข้อยกเว้นของไลบรารีและการวินิจฉัยด้านความปลอดภัย |