aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock100
-rw-r--r--Cargo.toml3
-rw-r--r--src/main.rs52
3 files changed, 153 insertions, 2 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 16a35a0..c1779ef 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -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"
diff --git a/Cargo.toml b/Cargo.toml
index d51bb5b..3697c5d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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();
}