Обробка виключень

Обробка виключень

Обробка виключень

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

Дивіться також

 Українська