Обробка виключень
Обробка виключень
У цьому посібнику показано, як 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 | Централізовані рядки повідомлень, які з’являються у виключеннях бібліотеки та діагностичних даних безпеки |