Penanganan Pengecualian
Penanganan Pengecualian
Panduan ini menunjukkan bagaimana Aspose.PDF FOSS untuk .NET menandai kegagalan melalui hierarki pengecualian bertipe yang berakar pada PdfException, yang sendiri diturunkan dari System.Exception, dan cara menangkap setiap kategori kesalahan. Setiap pengecualian khusus PDF dalam pustaka — kata sandi yang salah, file yang tidak dapat dibaca, font yang hilang, atau operasi formulir yang tidak valid — diturunkan dari PdfException, sehingga menangkap PdfException saja sudah cukup untuk mencegat semua kesalahan yang diangkat oleh pustaka, sementara blok catch yang lebih spesifik memungkinkan Anda bereaksi berbeda terhadap setiap mode kegagalan.
Kesalahan Kata Sandi dan Keamanan
InvalidPasswordException dilempar ketika operasi yang dilindungi kata sandi dicoba tanpa menyediakan kata sandi yang valid, seperti membuka dokumen terenkripsi dengan kata sandi yang salah.
try
{
var doc = new Document("encrypted.pdf", "wrong-password");
}
catch (InvalidPasswordException ex)
{
Console.WriteLine($"Password rejected: {ex.Message}");
}Kesalahan Format File
InvalidPdfFileFormatException dilempar ketika aliran tidak dapat dibuka sebagai PDF — header yang buruk, file terpotong, atau konten yang sama sekali tidak dapat dikenali sebagai PDF.
try
{
var doc = new Document("not-a-pdf.txt");
}
catch (InvalidPdfFileFormatException ex)
{
Console.WriteLine($"Not a valid PDF: {ex.Message}");
}Kesalahan Font
Kegagalan yang terkait dengan font terbagi menjadi tiga jenis pengecualian yang berbeda, tergantung pada apa yang salah:
FontNotFoundException— tidak ada font sistem atau sumber font khusus yang cocok dengan nama font yang diminta.UnsupportedFontTypeException— file yang diberikan sebagai font bukan program font yang dikenali.IncorrectFontUsageException— operator penampilan teks muncul dalam aliran konten sementara tidak ada font yang diatur dalam keadaan grafis saat ini.
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}");
}Kesalahan Ekstraksi Teks
PdfTextDecodingException dilemparkan ketika konten teks tidak dapat didekode, misalnya ketika pengkodean yang dirujuk oleh font tidak ada atau rusak.
try
{
var extractor = new PdfExtractor(doc);
extractor.GetText("output.txt");
}
catch (PdfTextDecodingException ex)
{
Console.WriteLine($"Text decoding failed: {ex.Message}");
}Kesalahan Tipe Formulir
InvalidFormTypeOperationException dilemparkan ketika operasi dicoba pada tipe formulir yang salah — misalnya, memanggil metode khusus XFA pada formulir yang tidak berbasis XFA.
try
{
var form = new Form(doc);
form.AssignXfa(xmlData);
}
catch (InvalidFormTypeOperationException ex)
{
Console.WriteLine($"Wrong form type: {ex.Message}");
}Tips dan Praktik Terbaik
- Tangkap tipe pengecualian yang paling spesifik terlebih dahulu (misalnya,
InvalidPasswordException) dan tambahkan blokcatch (PdfException)akhir hanya sebagai cadangan untuk hal lain yang dihasilkan perpustakaan. - Periksa
Form.IsXfaatauForm.Typesebelum memanggil metode khusus XFA untuk menghindariInvalidFormTypeOperationException. - Cari font dengan
FontRepository.FindFontsebelum merender sehingga font yang hilang dapat ditangani secara eksplisit, alih-alih hanya mengandalkan penanganan pengecualian. - Ketika
PdfExceptionyang tidak terduga mencapai penangan tingkat atas Anda, buatCrashReportOptionsdengan pengecualian yang ditangkap dan panggilex.GenerateCrashReport(options)untuk menangkap laporan diagnostik bagi permintaan dukungan. - Selalu lewati kata sandi dokumen melalui overload konstruktor
Documentalih-alih membuka file terlebih dahulu dan mencoba lagi.
Masalah Umum
| Masalah | Penyebab | Perbaikan |
|---|---|---|
InvalidPasswordException saat dokumen dibuka | Password yang diberikan salah atau tidak ada | Berikan password yang benar ke konstruktor Document(filename, password) |
InvalidPdfFileFormatException saat dokumen dibuka | File bukan PDF, atau rusak atau terpotong | Verifikasi header file dan peroleh kembali file sumber |
FontNotFoundException selama proses rendering | Font yang diminta tidak terpasang dan tidak ada pengganti yang terdaftar | Daftarkan sumber font atau periksa FontRepository.Substitutions |
UnsupportedFontTypeException dari FontRepository.OpenFont | File yang diberikan bukan program font yang dikenali | Pastikan file adalah font yang valid sebelum membukanya |
InvalidFormTypeOperationException pada operasi formulir | Metode khusus XFA dipanggil pada formulir non-XFA, atau sebaliknya | Periksa Form.IsXfa atau Form.Type sebelum memanggil metode khusus tipe |
FAQ
Haruskah saya menangkap PdfException atau subclass spesifiknya?
Tangkap subclass spesifik, seperti InvalidPasswordException, ketika Anda perlu bereaksi secara berbeda terhadap kegagalan tersebut. Tambahkan blok catch (PdfException) akhir sebagai cadangan untuk kesalahan lain yang diangkat oleh perpustakaan.
Apakah semua pengecualian khusus PDF diturunkan dari PdfException?
Ya. PdfTextDecodingException, IncorrectFontUsageException, InvalidPasswordException, InvalidPdfFileFormatException, FontNotFoundException, UnsupportedFontTypeException, dan InvalidFormTypeOperationException semuanya diturunkan dari PdfException, yang sendiri diturunkan dari System.Exception.
Untuk apa PdfExceptionMessages?
PdfExceptionMessages adalah kelas statis yang memusatkan string pesan yang muncul dari pengecualian perpustakaan dan diagnostik keamanan, termasuk pesan DangerousFile.
Bisakah saya menghasilkan laporan diagnostik ketika pengecualian terjadi?
Ya. Buat instance CrashReportOptions dengan pengecualian yang ditangkap, secara opsional atur properti seperti ApplicationTitle dan CrashReportDirectory, dan panggil GenerateCrashReport(options) pada PdfException untuk menulis laporan kerusakan yang terperinci.
API Reference Ringkasan
| Kelas | Deskripsi |
|---|---|
PdfException | Pengecualian dasar untuk kesalahan selama eksekusi aplikasi PDF |
PdfTextDecodingException | Dilempar ketika konten teks tidak dapat didekode |
IncorrectFontUsageException | Dilempar ketika operator penampilan teks muncul tanpa font yang diatur dalam state grafis |
InvalidPasswordException | Dilempar ketika operasi yang dilindungi kata sandi dicoba tanpa kata sandi yang valid |
InvalidPdfFileFormatException | Dilempar ketika aliran tidak dapat dibuka sebagai PDF |
FontNotFoundException | Dilempar ketika font yang diminta tidak dapat ditemukan |
UnsupportedFontTypeException | Dilempar ketika sebuah file tidak dapat dibuka sebagai font karena formatnya tidak didukung |
InvalidFormTypeOperationException | Dilempar ketika operasi dilakukan pada tipe form yang salah |
PdfExceptionMessages | String pesan terpusat yang muncul dari pengecualian dan diagnostik keamanan perpustakaan |