Undantagshantering
Undantagshantering
Denna guide visar hur Aspose.PDF FOSS för .NET signalerar fel genom en typad undantagshierarki med rot i PdfException, som i sin tur ärver från System.Exception, och hur man fångar varje felkategori. Varje PDF-specifikt undantag i biblioteket — ett felaktigt lösenord, en oläsbar fil, ett saknat typsnitt eller en ogiltig formuläroperation — ärver från PdfException, så att fånga bara PdfException är tillräckligt för att avbryta alla fel som biblioteket kastar, medan mer specifika catch-block låter dig reagera olika på varje feltyp.
Lösenords- och säkerhetsfel
InvalidPasswordException kastas när en lösenordsskyddad operation försöks utan att ange ett giltigt lösenord, till exempel vid öppning av ett krypterat dokument med fel lösenord.
try
{
var doc = new Document("encrypted.pdf", "wrong-password");
}
catch (InvalidPasswordException ex)
{
Console.WriteLine($"Password rejected: {ex.Message}");
}Filformatfel
InvalidPdfFileFormatException kastas när en ström inte kan öppnas som en PDF — ett felaktigt huvud, en avkortad fil eller innehåll som överhuvudtaget inte känns igen som PDF.
try
{
var doc = new Document("not-a-pdf.txt");
}
catch (InvalidPdfFileFormatException ex)
{
Console.WriteLine($"Not a valid PDF: {ex.Message}");
}Typsnittsfel
Teckensnittsrelaterade fel faller in i tre distinkta undantagstyper, beroende på vad som gick fel:
FontNotFoundException— ingen systemteckensnitt eller anpassad teckensnittskälla matchar det begärda teckensnittsnamnet.UnsupportedFontTypeException— filen som levererades som teckensnitt är inte ett känt teckensnittprogram.IncorrectFontUsageException— en textvisningsoperator dyker upp i en innehållsström medan inget teckensnitt är inställt i det aktuella grafikläget.
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}");
}Fel vid textutdragning
PdfTextDecodingException kastas när textinnehåll inte kan avkodas, till exempel när den kodning som ett teckensnitt refererar till saknas eller är felaktig.
try
{
var extractor = new PdfExtractor(doc);
extractor.GetText("output.txt");
}
catch (PdfTextDecodingException ex)
{
Console.WriteLine($"Text decoding failed: {ex.Message}");
}Formulärtypfel
InvalidFormTypeOperationException kastas när en operation försöks på fel formulärtyp — till exempel att anropa en XFA-specifik metod på ett formulär som inte är XFA-baserat.
try
{
var form = new Form(doc);
form.AssignXfa(xmlData);
}
catch (InvalidFormTypeOperationException ex)
{
Console.WriteLine($"Wrong form type: {ex.Message}");
}Tips och bästa praxis
- Fånga den mest specifika undantypen först (till exempel,
InvalidPasswordException) och lägg till ett sistacatch (PdfException)-block endast som en reserv för allt annat som biblioteket kastar. - Kontrollera
Form.IsXfaellerForm.Typeinnan du anropar XFA-specifika metoder för att undvikaInvalidFormTypeOperationException. - Sök upp teckensnitt med
FontRepository.FindFontinnan rendering så att saknade teckensnitt kan hanteras explicit, snarare än att enbart förlita sig på undantagshantering. - När ett oväntat
PdfExceptionnår din översta hanterare, bygg ettCrashReportOptionsmed det fångade undantaget och anropaex.GenerateCrashReport(options)för att samla in en diagnostisk rapport för supportförfrågningar. - Skicka alltid dokumentets lösenord via
Document-konstruktörsöverladdningen snarare än att öppna filen först och försöka igen.
Vanliga problem
| Problem | Orsak | Åtgärd |
|---|---|---|
InvalidPasswordException vid dokumentöppning | Fel eller saknat lösenord har angetts | Skicka det korrekta lösenordet till Document(filename, password)-konstruktorn |
InvalidPdfFileFormatException vid dokumentöppning | Filen är inte en PDF, eller är korrupt eller trunkerad | Verifiera filhuvudet och hämta källfilen på nytt |
FontNotFoundException under rendering | Begärt teckensnitt är inte installerat och ingen ersättning är registrerad | Registrera en teckensnittskälla eller kontrollera FontRepository.Substitutions |
UnsupportedFontTypeException från FontRepository.OpenFont | Den angivna filen är inte ett känt teckensnittprogram | Bekräfta att filen är ett giltigt teckensnitt innan du öppnar den |
InvalidFormTypeOperationException på formuläroperationer | XFA-specifik metod anropad på ett icke-XFA-formulär, eller vice versa | Kontrollera Form.IsXfa eller Form.Type innan du anropar typ-specifika metoder |
FAQ
Ska jag fånga PdfException eller den specifika subklassen?
Fånga den specifika subklassen, till exempel InvalidPasswordException, när du behöver reagera annorlunda på det felet. Lägg till ett sista catch (PdfException)-block som en återfalla för alla andra fel som biblioteket kastar.
Deriverar alla PDF-specifika undantag från PdfException?
Ja. PdfTextDecodingException, IncorrectFontUsageException, InvalidPasswordException, InvalidPdfFileFormatException, FontNotFoundException, UnsupportedFontTypeException och InvalidFormTypeOperationException deriverar alla från PdfException, som i sin tur deriverar från System.Exception.
Vad är PdfExceptionMessages för?
PdfExceptionMessages är en statisk klass som centraliserar meddelandestringar som visas av bibliotekets undantag och säkerhetsdiagnostik, inklusive DangerousFile-meddelandet.
Kan jag generera en diagnostisk rapport när ett undantag inträffar?
Ja. Skapa en CrashReportOptions-instans med det fångade undantaget, sätt valfritt egenskaper såsom ApplicationTitle och CrashReportDirectory, och anropa GenerateCrashReport(options) på PdfException för att skriva en detaljerad kraschrapport.
API Reference Sammanfattning
| Klass | Beskrivning |
|---|---|
PdfException | Basundantag för fel under körning av PDF-applikationen |
PdfTextDecodingException | Kastas när textinnehållet inte kan avkodas |
IncorrectFontUsageException | Kastas när en textvisningsoperator förekommer utan att ett typsnitt har ställts in i grafik-tillståndet |
InvalidPasswordException | Kastas när en lösenordsskyddad operation försöks utan ett giltigt lösenord |
InvalidPdfFileFormatException | Kastas när en ström inte kan öppnas som en PDF |
FontNotFoundException | Kastas när det begärda teckensnittet inte kan hittas |
UnsupportedFontTypeException | Kastas när en fil inte kan öppnas som ett teckensnitt eftersom dess format inte stöds |
InvalidFormTypeOperationException | Kastas när en operation utförs på fel formulärtyp |
PdfExceptionMessages | Centrala meddelandestringar som visas av bibliotekets undantag och säkerhetsdiagnostik |