diff options
| -rw-r--r-- | src/main.rs | 39 | 
1 files changed, 34 insertions, 5 deletions
| diff --git a/src/main.rs b/src/main.rs index a943a9f..0577197 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,16 +1,19 @@  use derive_builder::Builder;  use pdf_forms::{Form, FieldType}; -use serde::Serialize; +use serde::{Deserialize, Serialize}; -use std::fs::OpenOptions; -use std::io::Write; +use std::env; +use std::fs::{File, OpenOptions}; +use std::io::{Read, Write}; +use std::path::Path; -#[derive(Debug, Default, Serialize)] +#[derive(Debug, Default, Deserialize, Serialize)]  struct TextForm<'a> { +    #[serde(borrow)]      fields: Vec<Field<'a>>,  } -#[derive(Debug, Builder, Serialize)] +#[derive(Debug, Builder, Deserialize, Serialize)]  struct Field<'a> {      id: usize, @@ -22,8 +25,16 @@ struct Field<'a> {  }  fn main() { +    let args: Vec<String> = env::args().collect(); +      let mut form = Form::load("./f1040.pdf").unwrap(); +    if args.len() == 2 && args[1] == "--fill" { +        fill("./f1040.toml", &mut form); + +        return; +    } +      let mut data = TextForm::default();      for i in 0..form.len() { @@ -61,3 +72,21 @@ fn main() {      form.save("./f1040-new.pdf").unwrap();  } + +fn fill<P: AsRef<Path>>(data_path: P, form: &mut Form) { +    let mut buf = Vec::new(); +    let mut file = File::open(data_path).unwrap(); +    file.read_to_end(&mut buf).unwrap(); + +    let data: TextForm = toml::from_slice(&buf).unwrap(); + +    for field in data.fields { +        if let Some(value) = field.value { +            form.set_text(field.id, value.to_owned()).unwrap(); +        } else if let Some(state) = field.state { +            form.set_check_box(field.id, state).unwrap(); +        } +    } + +    form.save("./f1040-filled.pdf").unwrap(); +} | 
