Gestione delle eccezioni
Gestione delle eccezioni
Questa guida mostra come Aspose.PDF FOSS per .NET segnala i fallimenti attraverso una gerarchia di eccezioni tipizzata con radice in PdfException, che a sua volta deriva da System.Exception, e come catturare ogni categoria di errore. Ogni eccezione specifica per PDF nella libreria — una password errata, un file illeggibile, un font mancante o un’operazione di modulo non valida — deriva da PdfException, quindi catturare solo PdfException è sufficiente per intercettare qualsiasi errore sollevato dalla libreria, mentre blocchi più specifici catch ti consentono di reagire diversamente a ciascuna modalità di fallimento.
Errori di password e sicurezza
InvalidPasswordException viene lanciata quando si tenta un’operazione protetta da password senza fornire una password valida, ad esempio aprendo un documento criptato con la password errata.
try
{
var doc = new Document("encrypted.pdf", "wrong-password");
}
catch (InvalidPasswordException ex)
{
Console.WriteLine($"Password rejected: {ex.Message}");
}Errori di formato file
InvalidPdfFileFormatException viene lanciata quando un flusso non può essere aperto come PDF — un’intestazione errata, un file troncato o contenuti che non sono affatto riconoscibili come PDF.
try
{
var doc = new Document("not-a-pdf.txt");
}
catch (InvalidPdfFileFormatException ex)
{
Console.WriteLine($"Not a valid PDF: {ex.Message}");
}Errori di font
I fallimenti relativi ai font rientrano in tre distinti tipi di eccezione, a seconda di cosa sia andato storto:
FontNotFoundException— nessun font di sistema o fonte di font personalizzato corrisponde al nome del font richiesto.UnsupportedFontTypeException— il file fornito come font non è un programma di font riconosciuto.IncorrectFontUsageException— un operatore di visualizzazione del testo appare in un flusso di contenuti mentre nessun font è impostato nello stato grafico corrente.
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}");
}Errori di estrazione del testo
PdfTextDecodingException viene generato quando il contenuto del testo non può essere decodificato, ad esempio quando la codifica a cui fa riferimento un font è mancante o malformata.
try
{
var extractor = new PdfExtractor(doc);
extractor.GetText("output.txt");
}
catch (PdfTextDecodingException ex)
{
Console.WriteLine($"Text decoding failed: {ex.Message}");
}Errori di tipo di modulo
InvalidFormTypeOperationException viene generato quando si tenta un’operazione sul tipo di modulo sbagliato — ad esempio, chiamare un metodo specifico XFA su un modulo che non è basato su XFA.
try
{
var form = new Form(doc);
form.AssignXfa(xmlData);
}
catch (InvalidFormTypeOperationException ex)
{
Console.WriteLine($"Wrong form type: {ex.Message}");
}Suggerimenti e migliori pratiche
- Cattura per primo il tipo di eccezione più specifico (ad esempio,
InvalidPasswordException) e aggiungi un bloccocatch (PdfException)finale solo come fallback per qualsiasi altra eccezione sollevata dalla libreria. - Verifica
Form.IsXfaoForm.Typeprima di chiamare i metodi specifici XFA per evitareInvalidFormTypeOperationException. - Cerca i caratteri con
FontRepository.FindFontprima del rendering, così i caratteri mancanti possono essere gestiti esplicitamente, invece di fare affidamento esclusivamente sulla gestione delle eccezioni. - Quando un
PdfExceptionimprevisto raggiunge il tuo gestore di livello superiore, crea unCrashReportOptionscon l’eccezione catturata e chiamaex.GenerateCrashReport(options)per acquisire un report diagnostico per le richieste di supporto. - Passa sempre la password del documento tramite il sovraccarico del costruttore
Documentanziché aprire prima il file e riprovare.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
InvalidPasswordException all’apertura del documento | Password errata o mancante fornita | Passa la password corretta al costruttore Document(filename, password) |
InvalidPdfFileFormatException all’apertura del documento | Il file non è un PDF, o è corrotto o troncato | Verifica l’intestazione del file e riottieni il file sorgente |
FontNotFoundException durante il rendering | Il font richiesto non è installato e non è stato registrato alcun sostituto | Registra una fonte di font o controlla FontRepository.Substitutions |
UnsupportedFontTypeException da FontRepository.OpenFont | Il file fornito non è un programma di font riconosciuto | Conferma che il file è un font valido prima di aprirlo |
InvalidFormTypeOperationException sulle operazioni del modulo | Metodo specifico XFA chiamato su un modulo non XFA, o viceversa | Verifica Form.IsXfa o Form.Type prima di chiamare i metodi specifici del tipo |
FAQ
Devo catturare PdfException o la sottoclasse specifica?
Cattura la sottoclasse specifica, ad esempio InvalidPasswordException, quando devi reagire in modo diverso a quel fallimento. Aggiungi un blocco finale catch (PdfException) come fallback per qualsiasi altro errore sollevato dalla libreria.
Tutte le eccezioni specifiche per PDF derivano da PdfException?
Sì. PdfTextDecodingException, IncorrectFontUsageException, InvalidPasswordException, InvalidPdfFileFormatException, FontNotFoundException, UnsupportedFontTypeException e InvalidFormTypeOperationException derivano tutti da PdfException, che a sua volta deriva da System.Exception.
A cosa serve PdfExceptionMessages?
PdfExceptionMessages è una classe statica che centralizza le stringhe di messaggi emerse dalle eccezioni della libreria e dalle diagnosi di sicurezza, incluso il messaggio DangerousFile.
Posso generare un report diagnostico quando si verifica un’eccezione?
Sì. Crea un’istanza di CrashReportOptions con l’eccezione catturata, impostando opzionalmente proprietà come ApplicationTitle e CrashReportDirectory, e chiama GenerateCrashReport(options) sul PdfException per scrivere un report di crash dettagliato.
API Reference Riepilogo
| Classe | Descrizione |
|---|---|
PdfException | Eccezione di base per errori durante l’esecuzione dell’applicazione PDF |
PdfTextDecodingException | Generata quando il contenuto testuale non può essere decodificato |
IncorrectFontUsageException | Generata quando un operatore di visualizzazione del testo appare senza un font impostato nello stato grafico |
InvalidPasswordException | Lanciata quando si tenta un’operazione protetta da password senza una password valida |
InvalidPdfFileFormatException | Lanciata quando un flusso non può essere aperto come PDF |
FontNotFoundException | Lanciata quando il font richiesto non può essere trovato |
UnsupportedFontTypeException | Lanciata quando un file non può essere aperto come font perché il suo formato non è supportato |
InvalidFormTypeOperationException | Generata quando un’operazione viene tentata sul tipo di modulo errato |
PdfExceptionMessages | Stringhe di messaggio centralizzate emerse dalle eccezioni della libreria e dalle diagnosi di sicurezza |