Skip to content

Commit 6b19d6a

Browse files
committed
expose version string in the header
1 parent dbf1257 commit 6b19d6a

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

pdf/examples/metadata.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,17 @@ fn main() -> Result<(), PdfError> {
1212
.expect("Please provide a file path to the PDF you want to explore.");
1313

1414
let file = FileOptions::cached().open(&path).unwrap();
15+
dbg!(file.version());
1516
let resolver = file.resolver();
1617

1718
if let Some(ref info) = file.trailer.info_dict {
1819
dbg!(info);
1920
}
2021

21-
if let Some(ref forms) = file.get_root().forms {
22+
let catalog = file.get_root();
23+
dbg!(&catalog.version);
24+
25+
if let Some(ref forms) = catalog.forms {
2226
for field in forms.fields.iter() {
2327
print_field(field, &resolver);
2428
}
@@ -35,4 +39,4 @@ fn print_field(field: &FieldDictionary, resolve: &impl Resolve) {
3539
let child = resolve.get(kid).unwrap();
3640
print_field(&child, resolve);
3741
}
38-
}
42+
}

pdf/src/file.rs

+12-1
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,17 @@ where
118118
pub fn into_inner(self) -> B {
119119
self.backend
120120
}
121+
pub fn version(&self) -> Result<String> {
122+
Ok(String::from_utf8(self.backend.read(self.start_offset+1..self.start_offset+8)?.to_owned())?)
123+
}
121124
pub fn resolver(&self) -> impl Resolve + '_ {
122125
StorageResolver::new(self)
123126
}
124127
pub fn with_cache(backend: B, options: ParseOptions, object_cache: OC, stream_cache: SC, log: L) -> Result<Self> {
128+
let start_offset = backend.locate_start_offset()?;
129+
125130
Ok(Storage {
126-
start_offset: backend.locate_start_offset()?,
131+
start_offset,
127132
backend,
128133
refs: XRefTable::new(0),
129134
cache: object_cache,
@@ -656,6 +661,12 @@ where
656661
pub fn log(&self) -> &L {
657662
&self.storage.log
658663
}
664+
665+
/// the version string in the file header.
666+
/// if the version field in the Catalog is set, this should be used instead.
667+
pub fn version(&self) -> Result<String> {
668+
self.storage.version()
669+
}
659670
}
660671

661672
#[derive(Object, ObjectWrite, DataSize)]

0 commit comments

Comments
 (0)