diff options
-rw-r--r-- | Cargo.lock | 100 | ||||
-rw-r--r-- | Cargo.toml | 3 | ||||
-rw-r--r-- | src/main.rs | 52 |
3 files changed, 153 insertions, 2 deletions
@@ -140,6 +140,41 @@ dependencies = [ ] [[package]] +name = "darling" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9d6ddad5866bb2170686ed03f6839d31a76e5407d80b1c334a2c24618543ffa" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9ced1fd13dc386d5a8315899de465708cf34ee2a6d9394654515214e67bb846" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote 1.0.9", + "strsim", + "syn 1.0.69", +] + +[[package]] +name = "darling_macro" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a7a1445d54b2f9792e3b31a3e715feabbace393f38dc4ffd49d94ee9bc487d5" +dependencies = [ + "darling_core", + "quote 1.0.9", + "syn 1.0.69", +] + +[[package]] name = "deflate" version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -161,6 +196,38 @@ dependencies = [ ] [[package]] +name = "derive_builder" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ef25735c9f0d0c547d2794701600c94abf030ecb740fad1673fa64461f3573" +dependencies = [ + "derive_builder_core", + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3150f1e84602847b99d3eeb702487fc364f7d6c94f634e944a68fdbaea09e457" +dependencies = [ + "darling", + "proc-macro2", + "quote 1.0.9", + "syn 1.0.69", +] + +[[package]] +name = "derive_builder_macro" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca1008bddefdc08d1e734aeb27b94f384390af261b4d1a8fb51fe19c577f05c" +dependencies = [ + "derive_builder_core", + "syn 1.0.69", +] + +[[package]] name = "discard" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -255,10 +322,19 @@ dependencies = [ ] [[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] name = "formurapid" version = "0.0.1" dependencies = [ + "derive_builder", "pdf_forms", + "serde", + "toml", ] [[package]] @@ -281,6 +357,12 @@ dependencies = [ ] [[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] name = "image" version = "0.23.14" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -576,6 +658,9 @@ name = "serde" version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171" +dependencies = [ + "serde_derive", +] [[package]] name = "serde_derive" @@ -664,6 +749,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" [[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] name = "syn" version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -755,6 +846,15 @@ dependencies = [ ] [[package]] +name = "toml" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +dependencies = [ + "serde", +] + +[[package]] name = "unicode-xid" version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4,4 +4,7 @@ version = "0.0.1" edition = "2018" [dependencies] +derive_builder = "0.10.0" pdf_forms = "0.3.4" +serde = { version = "1.0.125", features = ["derive"] } +toml = "0.5.8" diff --git a/src/main.rs b/src/main.rs index 2713df4..a943a9f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,15 +1,63 @@ +use derive_builder::Builder; use pdf_forms::{Form, FieldType}; +use serde::Serialize; + +use std::fs::OpenOptions; +use std::io::Write; + +#[derive(Debug, Default, Serialize)] +struct TextForm<'a> { + fields: Vec<Field<'a>>, +} + +#[derive(Debug, Builder, Serialize)] +struct Field<'a> { + id: usize, + + #[builder(default)] + value: Option<&'a str>, + + #[builder(default)] + state: Option<bool>, +} fn main() { let mut form = Form::load("./f1040.pdf").unwrap(); + let mut data = TextForm::default(); + for i in 0..form.len() { let field_type = form.get_type(i); - if let FieldType::Text = field_type { - form.set_text(i, format!("{}", i)).unwrap(); + match field_type { + FieldType::Text => { + form.set_text(i, format!("{}", i)).unwrap(); + + data.fields.push(FieldBuilder::default() + .id(i) + .value(Some("")) + .build() + .unwrap() + ); + }, + FieldType::CheckBox => { + data.fields.push(FieldBuilder::default() + .id(i) + .state(Some(false)) + .build() + .unwrap() + ); + }, + _ => (), } } + let mut toml_file = OpenOptions::new() + .create_new(true) + .write(true) + .open("f1040.toml") + .unwrap(); + toml_file.write_all(&toml::to_vec(&data).unwrap()).unwrap(); + form.save("./f1040-new.pdf").unwrap(); } |