Xử lý Ngoại lệ

Xử lý Ngoại lệ

Hướng dẫn này cho thấy cách Aspose.PDF FOSS cho .NET báo hiệu các lỗi thông qua một cây phân cấp ngoại lệ có kiểu, có gốc tại PdfException, bản thân nó kế thừa từ System.Exception, và cách bắt mỗi loại lỗi. Mỗi ngoại lệ riêng biệt cho PDF trong thư viện — mật khẩu sai, tệp không đọc được, phông chữ thiếu, hoặc thao tác biểu mẫu không hợp lệ — đều kế thừa từ PdfException, vì vậy chỉ cần bắt PdfException là đủ để chặn bất kỳ lỗi nào do thư viện ném ra, trong khi các khối catch cụ thể hơn cho phép bạn phản hồi khác nhau cho mỗi chế độ lỗi.


Lỗi Mật khẩu và Bảo mật

InvalidPasswordException được ném ra khi một thao tác có bảo vệ bằng mật khẩu được thực hiện mà không cung cấp mật khẩu hợp lệ, chẳng hạn như mở một tài liệu được mã hoá bằng mật khẩu sai.

try
{
    var doc = new Document("encrypted.pdf", "wrong-password");
}
catch (InvalidPasswordException ex)
{
    Console.WriteLine($"Password rejected: {ex.Message}");
}

Lỗi Định dạng Tệp

InvalidPdfFileFormatException được ném ra khi một luồng không thể mở dưới dạng PDF — tiêu đề sai, tệp bị cắt ngắn, hoặc nội dung không nhận dạng được là PDF bằng bất kỳ cách nào.

try
{
    var doc = new Document("not-a-pdf.txt");
}
catch (InvalidPdfFileFormatException ex)
{
    Console.WriteLine($"Not a valid PDF: {ex.Message}");
}

Lỗi Phông chữ

Các lỗi liên quan đến phông chữ được chia thành ba loại ngoại lệ riêng biệt, tùy thuộc vào nguyên nhân gây ra lỗi:

  • FontNotFoundException — không có phông chữ hệ thống hoặc nguồn phông chữ tùy chỉnh nào khớp với tên phông chữ được yêu cầu.
  • UnsupportedFontTypeException — tệp được cung cấp làm phông chữ không phải là một chương trình phông chữ được nhận dạng.
  • IncorrectFontUsageException — một toán tử hiển thị văn bản xuất hiện trong luồng nội dung trong khi không có phông chữ nào được đặt trong trạng thái đồ họa hiện tại.
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}");
}

Lỗi Trích xuất Văn bản

PdfTextDecodingException được ném ra khi nội dung văn bản không thể giải mã, ví dụ khi mã hoá được phông chữ tham chiếu thiếu hoặc bị sai định dạng.

try
{
    var extractor = new PdfExtractor(doc);
    extractor.GetText("output.txt");
}
catch (PdfTextDecodingException ex)
{
    Console.WriteLine($"Text decoding failed: {ex.Message}");
}

Lỗi Kiểu Form

InvalidFormTypeOperationException được ném ra khi một thao tác được thực hiện trên kiểu form sai — ví dụ, gọi một phương thức đặc thù XFA trên một form không dựa trên XFA.

try
{
    var form = new Form(doc);
    form.AssignXfa(xmlData);
}
catch (InvalidFormTypeOperationException ex)
{
    Console.WriteLine($"Wrong form type: {ex.Message}");
}

Mẹo và Thực hành tốt nhất

  • Bắt loại ngoại lệ cụ thể nhất trước tiên (ví dụ, InvalidPasswordException) và chỉ thêm khối catch (PdfException) cuối cùng như một phương án dự phòng cho mọi thứ khác mà thư viện phát sinh.
  • Kiểm tra Form.IsXfa hoặc Form.Type trước khi gọi các phương thức đặc thù XFA để tránh InvalidFormTypeOperationException.
  • Tra cứu phông chữ bằng FontRepository.FindFont trước khi render để các phông chữ thiếu có thể được xử lý một cách rõ ràng, thay vì chỉ dựa vào việc xử lý ngoại lệ.
  • Khi một PdfException không mong đợi đến trình xử lý cấp cao nhất của bạn, tạo một CrashReportOptions với ngoại lệ đã bắt và gọi ex.GenerateCrashReport(options) để ghi lại báo cáo chẩn đoán cho các yêu cầu hỗ trợ.
  • Luôn truyền mật khẩu tài liệu qua hàm khởi tạo Document thay vì mở tệp trước và thử lại.

Các vấn đề thường gặp

Vấn đềNguyên nhânKhắc phục
InvalidPasswordException khi mở tài liệuMật khẩu sai hoặc chưa cung cấpCung cấp mật khẩu đúng cho hàm khởi tạo Document(filename, password)
InvalidPdfFileFormatException khi mở tài liệuTệp không phải là PDF, hoặc bị hỏng hoặc bị cắt ngắnXác minh tiêu đề tệp và tải lại tệp nguồn
FontNotFoundException trong quá trình renderPhông chữ yêu cầu chưa được cài đặt và không có thay thế nào được đăng kýĐăng ký nguồn phông chữ hoặc kiểm tra FontRepository.Substitutions
UnsupportedFontTypeException từ FontRepository.OpenFontTệp được cung cấp không phải là chương trình phông chữ được nhận dạngXác nhận tệp là phông chữ hợp lệ trước khi mở
InvalidFormTypeOperationException trên các thao tác biểu mẫuPhương thức đặc thù XFA được gọi trên một biểu mẫu không phải XFA, hoặc ngược lạiKiểm tra Form.IsXfa hoặc Form.Type trước khi gọi các phương thức đặc thù kiểu

FAQ

Tôi có nên bắt PdfException hay lớp con cụ thể?

Bắt lớp con cụ thể, chẳng hạn InvalidPasswordException, khi bạn cần phản hồi khác nhau với lỗi đó. Thêm một khối catch (PdfException) cuối cùng làm dự phòng cho bất kỳ lỗi nào khác do thư viện ném ra.

Tất cả các ngoại lệ đặc thù PDF có kế thừa từ PdfException không?

Có. PdfTextDecodingException, IncorrectFontUsageException, InvalidPasswordException, InvalidPdfFileFormatException, FontNotFoundException, UnsupportedFontTypeException, và InvalidFormTypeOperationException đều kế thừa từ PdfException, mà PdfException lại kế thừa từ System.Exception.

PdfExceptionMessages dùng để làm gì?

PdfExceptionMessages là một lớp tĩnh tập trung các chuỗi thông điệp được thư viện ném ra trong các ngoại lệ và chẩn đoán bảo mật, bao gồm thông điệp DangerousFile.

Tôi có thể tạo báo cáo chẩn đoán khi xảy ra ngoại lệ không?

Có. Tạo một thể hiện CrashReportOptions với ngoại lệ đã bắt, tùy chọn đặt các thuộc tính như ApplicationTitle và CrashReportDirectory, và gọi GenerateCrashReport(options) trên PdfException để ghi một báo cáo lỗi chi tiết.


API Reference Tóm tắt

LớpMô tả
PdfExceptionNgoại lệ cơ bản cho các lỗi trong quá trình thực thi ứng dụng PDF
PdfTextDecodingExceptionĐược ném khi nội dung văn bản không thể giải mã
IncorrectFontUsageExceptionĐược ném khi một toán tử hiển thị văn bản xuất hiện mà không có phông chữ nào được đặt trong trạng thái đồ họa
InvalidPasswordExceptionĐược ném khi một thao tác được bảo vệ bằng mật khẩu được thực hiện mà không có mật khẩu hợp lệ
InvalidPdfFileFormatExceptionĐược ném khi một luồng không thể mở dưới dạng PDF
FontNotFoundExceptionĐược ném khi phông chữ yêu cầu không thể được tìm thấy
UnsupportedFontTypeExceptionĐược ném khi một tệp không thể mở dưới dạng phông chữ vì định dạng của nó không được hỗ trợ
InvalidFormTypeOperationExceptionBị ném khi một thao tác được thực hiện trên kiểu biểu mẫu không đúng
PdfExceptionMessagesCác chuỗi thông báo tập trung được hiển thị bởi các ngoại lệ và chẩn đoán bảo mật của thư viện

Xem thêm

 Tiếng Việt