aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs39
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();
+}