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ốicatch (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.IsXfahoặcForm.Typetrước khi gọi các phương thức đặc thù XFA để tránhInvalidFormTypeOperationException. - Tra cứu phông chữ bằng
FontRepository.FindFonttrướ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
PdfExceptionkhông mong đợi đến trình xử lý cấp cao nhất của bạn, tạo mộtCrashReportOptionsvới ngoại lệ đã bắt và gọiex.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
Documentthay vì mở tệp trước và thử lại.
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Khắc phục |
|---|---|---|
InvalidPasswordException khi mở tài liệu | Mật khẩu sai hoặc chưa cung cấp | Cung cấp mật khẩu đúng cho hàm khởi tạo Document(filename, password) |
InvalidPdfFileFormatException khi mở tài liệu | Tệp không phải là PDF, hoặc bị hỏng hoặc bị cắt ngắn | Xác minh tiêu đề tệp và tải lại tệp nguồn |
FontNotFoundException trong quá trình render | Phô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.OpenFont | Tệp được cung cấp không phải là chương trình phông chữ được nhận dạng | Xá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ẫu | Phươ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ại | Kiể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ớp | Mô tả |
|---|---|
PdfException | Ngoạ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ợ |
InvalidFormTypeOperationException | Bị ném khi một thao tác được thực hiện trên kiểu biểu mẫu không đúng |
PdfExceptionMessages | Cá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 |