1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
use std::env::args;
use pdf::error::PdfError;
use pdf::file::{FileOptions};
use pdf::object::{FieldDictionary, FieldType, Resolve};
/// extract and print a PDF's metadata
#[cfg(feature="cache")]
fn main() -> Result<(), PdfError> {
let path = args()
.nth(1)
.expect("Please provide a file path to the PDF you want to explore.");
let file = FileOptions::cached().open(&path).unwrap();
let resolver = file.resolver();
if let Some(ref info) = file.trailer.info_dict {
dbg!(info);
}
if let Some(ref forms) = file.get_root().forms {
for field in forms.fields.iter() {
print_field(field, &resolver);
}
}
Ok(())
}
fn print_field(field: &FieldDictionary, resolve: &impl Resolve) {
if field.typ == Some(FieldType::Signature) {
println!("{:?}", field);
}
for &kid in field.kids.iter() {
let child = resolve.get(kid).unwrap();
print_field(&child, resolve);
}
}
|