pub enum ParseError {
Show 16 variants
Io(Error),
InvalidHeader,
UnsupportedVersion(String),
SyntaxError {
position: usize,
message: String,
},
UnexpectedToken {
expected: String,
found: String,
},
InvalidReference(u32, u16),
MissingKey(String),
InvalidXRef,
InvalidTrailer,
CircularReference,
StreamDecodeError(String),
EncryptionNotSupported,
EmptyFile,
StreamLengthMismatch {
declared: usize,
actual: usize,
},
CharacterEncodingError {
position: usize,
message: String,
},
UnexpectedCharacter {
character: String,
},
}Expand description
PDF Parser errors covering all failure modes during parsing.
§Error Categories
- I/O Errors: File access and reading issues
- Format Errors: Invalid PDF structure or syntax
- Unsupported Features: Encryption, newer PDF versions
- Reference Errors: Invalid or circular object references
- Stream Errors: Decompression or filter failures
§Example
use oxidize_pdf::parser::{PdfReader, ParseError};
match PdfReader::open("missing.pdf") {
Ok(_) => println!("File opened"),
Err(ParseError::Io(e)) => println!("IO error: {}", e),
Err(ParseError::InvalidHeader) => println!("Not a valid PDF"),
Err(e) => println!("Other error: {}", e),
}§Error Recovery and Tolerant Parsing
The parser supports different levels of error tolerance for handling corrupted or non-standard PDF files:
use oxidize_pdf::parser::{PdfReader, ParseOptions};
use std::fs::File;
// Strict parsing (default) - fails on any deviation from PDF spec
let strict_reader = PdfReader::open("document.pdf")?;
// Tolerant parsing - attempts to recover from errors
let file = File::open("corrupted.pdf")?;
let tolerant_reader = PdfReader::new_with_options(file, ParseOptions::tolerant())?;
// Skip errors mode - ignores corrupt streams and returns partial content
let file = File::open("problematic.pdf")?;
let skip_errors_reader = PdfReader::new_with_options(file, ParseOptions::skip_errors())?;Variants§
Io(Error)
I/O error during file operations
InvalidHeader
PDF file doesn’t start with valid header (%PDF-)
UnsupportedVersion(String)
PDF version is not supported
SyntaxError
Syntax error in PDF structure
UnexpectedToken
InvalidReference(u32, u16)
Invalid or non-existent object reference
MissingKey(String)
Required dictionary key is missing
InvalidXRef
InvalidTrailer
CircularReference
StreamDecodeError(String)
Error decoding/decompressing stream data
EncryptionNotSupported
PDF encryption is not currently supported
EmptyFile
Empty file
StreamLengthMismatch
Stream length mismatch (only in strict mode)
CharacterEncodingError
Character encoding error
UnexpectedCharacter
Unexpected character in PDF content
Trait Implementations§
Source§impl Debug for ParseError
impl Debug for ParseError
Source§impl Display for ParseError
impl Display for ParseError
Source§impl Error for ParseError
impl Error for ParseError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
👎Deprecated since 1.42.0: use the Display impl or to_string()
Source§impl From<Error> for ParseError
impl From<Error> for ParseError
Source§impl From<ParseError> for OxidizePdfError
impl From<ParseError> for OxidizePdfError
Source§fn from(err: ParseError) -> Self
fn from(err: ParseError) -> Self
Converts to this type from the input type.
Source§impl From<ParseError> for PdfError
impl From<ParseError> for PdfError
Source§fn from(err: ParseError) -> Self
fn from(err: ParseError) -> Self
Converts to this type from the input type.
Auto Trait Implementations§
impl Freeze for ParseError
impl !RefUnwindSafe for ParseError
impl Send for ParseError
impl Sync for ParseError
impl Unpin for ParseError
impl !UnwindSafe for ParseError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more