use clap::{Args, Parser};
#[derive(Args)]
pub struct ConvertLayoutFlags {
#[arg(long)]
pub landscape: bool,
#[arg(long)]
pub no_background: bool,
}
#[derive(Args)]
pub struct ConvertBehaviorFlags {
#[arg(long)]
pub detect_forms: bool,
#[arg(long)]
pub convert_forms: bool,
}
#[derive(Parser)]
pub struct ConvertArgs {
pub input: String,
#[arg(short, long)]
pub output: Option<String>,
#[arg(long, default_value = "A4")]
pub page_size: String,
#[arg(long)]
pub width: Option<String>,
#[arg(long)]
pub height: Option<String>,
#[arg(long, default_value = "10mm")]
pub margin: String,
#[command(flatten)]
pub layout: ConvertLayoutFlags,
#[arg(long, default_value = "1.0")]
pub scale: f64,
#[arg(long)]
pub page_ranges: Option<String>,
#[arg(long)]
pub header: Option<String>,
#[arg(long)]
pub footer: Option<String>,
#[command(flatten)]
pub behavior: ConvertBehaviorFlags,
#[arg(long, default_value = "30s")]
pub timeout: String,
#[arg(long)]
pub boundaries: Option<String>,
#[arg(long)]
pub boundaries_output: Option<String>,
#[arg(long)]
pub forms_output: Option<String>,
#[arg(long)]
pub validate_forms: Option<String>,
#[arg(long)]
pub validation_output: Option<String>,
#[arg(long)]
pub font: Vec<String>,
#[arg(long)]
pub title: Option<String>,
#[arg(long)]
pub author: Option<String>,
#[arg(long)]
pub subject: Option<String>,
#[arg(long)]
pub keywords: Option<String>,
#[arg(long)]
pub creator: Option<String>,
#[arg(long)]
pub producer: Option<String>,
}
#[cfg(feature = "forms")]
#[derive(Parser)]
pub struct FormsArgs {
pub input: String,
#[arg(short, long)]
pub output: String,
#[arg(long)]
pub text_field: Vec<String>,
#[arg(long)]
pub checkbox: Vec<String>,
#[arg(long)]
pub dropdown: Vec<String>,
#[arg(long)]
pub signature_field: Vec<String>,
}
#[cfg(feature = "signing")]
#[derive(Parser)]
pub struct SignArgs {
pub input: String,
#[arg(short, long)]
pub output: String,
#[arg(long)]
pub certificate: String,
#[arg(long)]
pub password: Option<String>,
#[arg(long)]
pub password_file: Option<String>,
#[arg(long)]
pub password_env: Option<String>,
#[arg(long)]
pub reason: Option<String>,
#[arg(long)]
pub location: Option<String>,
#[arg(long, default_value = "B")]
pub level: String,
#[arg(long)]
pub timestamp_url: Option<String>,
#[arg(long)]
pub visible: Option<String>,
#[arg(long)]
pub position: Option<String>,
#[arg(long)]
pub certify: bool,
#[arg(long, default_value = "2")]
pub mdp: String,
}
#[cfg(feature = "signing")]
#[derive(Parser)]
pub struct VerifyArgs {
pub input: String,
#[arg(long, default_value = "text")]
pub format: String,
#[arg(long)]
pub use_system_trust: bool,
}
#[cfg(feature = "signing")]
#[derive(Parser)]
pub struct ListFieldsArgs {
pub input: String,
#[arg(long, default_value = "text")]
pub format: String,
}
#[cfg(feature = "encrypt")]
#[derive(Args)]
pub struct PrintPermissionFlags {
#[arg(long)]
pub allow_print: bool,
#[arg(long)]
pub allow_print_hq: bool,
}
#[cfg(feature = "encrypt")]
#[derive(Args)]
pub struct ContentPermissionFlags {
#[arg(long)]
pub allow_copy: bool,
#[arg(long)]
pub allow_accessibility: bool,
}
#[cfg(feature = "encrypt")]
#[derive(Args)]
pub struct EditPermissionFlags {
#[arg(long)]
pub allow_modify: bool,
#[arg(long)]
pub allow_annotate: bool,
#[arg(long)]
pub allow_assemble: bool,
}
#[cfg(feature = "encrypt")]
#[derive(Args)]
pub struct FormPermissionFlags {
#[arg(long)]
pub allow_fill_forms: bool,
#[arg(long)]
pub allow_all: bool,
}
#[cfg(feature = "encrypt")]
#[derive(Parser)]
pub struct EncryptArgs {
pub input: String,
#[arg(short, long)]
pub output: String,
#[arg(long)]
pub owner_password: Option<String>,
#[arg(long)]
pub owner_password_file: Option<String>,
#[arg(long)]
pub owner_password_env: Option<String>,
#[arg(long)]
pub user_password: Option<String>,
#[arg(long)]
pub user_password_file: Option<String>,
#[arg(long)]
pub user_password_env: Option<String>,
#[command(flatten)]
pub print_perms: PrintPermissionFlags,
#[command(flatten)]
pub content_perms: ContentPermissionFlags,
#[command(flatten)]
pub edit_perms: EditPermissionFlags,
#[command(flatten)]
pub form_perms: FormPermissionFlags,
#[arg(long, default_value = "aes256")]
pub algorithm: String,
}
#[cfg(feature = "encrypt")]
#[derive(Parser)]
pub struct DecryptArgs {
pub input: String,
#[arg(short, long)]
pub output: String,
#[arg(long)]
pub password: Option<String>,
#[arg(long)]
pub password_file: Option<String>,
#[arg(long)]
pub password_env: Option<String>,
}
#[cfg(feature = "watermark")]
#[derive(Parser)]
pub struct WatermarkArgs {
pub input: String,
#[arg(short, long)]
pub output: String,
#[arg(long)]
pub text: Option<String>,
#[arg(long)]
pub image: Option<String>,
#[arg(long, default_value = "center")]
pub position: String,
#[arg(long, default_value = "0")]
pub rotation: f32,
#[arg(long, default_value = "0.3")]
pub opacity: f32,
#[arg(long, default_value = "72")]
pub font_size: f32,
#[arg(long, default_value = "gray")]
pub color: String,
#[arg(long)]
pub foreground: bool,
#[arg(long)]
pub pages: Option<String>,
#[arg(long, default_value = "1.0")]
pub scale: f32,
}
#[cfg(feature = "bookmarks")]
#[derive(Parser)]
pub struct BookmarksArgs {
pub input: String,
#[arg(short, long)]
pub output: Option<String>,
#[arg(long)]
pub add: Vec<String>,
#[arg(long)]
pub extract: Option<String>,
#[arg(long)]
pub from_json: Option<String>,
#[arg(long, default_value = "text")]
pub format: String,
}
#[cfg(feature = "annotations")]
#[derive(Parser)]
pub struct AnnotateArgs {
pub input: String,
#[arg(short, long)]
pub output: Option<String>,
#[arg(long)]
pub highlight: Vec<String>,
#[arg(long)]
pub note: Vec<String>,
#[arg(long)]
pub underline: Vec<String>,
#[arg(long)]
pub strikeout: Vec<String>,
#[arg(long)]
pub square: Vec<String>,
#[arg(long)]
pub list: bool,
#[arg(long)]
pub remove: bool,
#[arg(long)]
pub page: Option<u32>,
#[arg(long, default_value = "#FFFF00")]
pub color: String,
#[arg(long, default_value = "text")]
pub format: String,
}
#[cfg(feature = "pdfa")]
#[derive(Parser)]
pub struct PdfaValidateArgs {
pub input: String,
#[arg(long, default_value = "2b")]
pub level: String,
#[arg(long, default_value = "text")]
pub format: String,
}
#[cfg(feature = "pdfa")]
#[derive(Parser)]
pub struct PdfaConvertArgs {
pub input: String,
#[arg(short, long)]
pub output: String,
#[arg(long, default_value = "2b")]
pub level: String,
#[arg(long)]
pub title: Option<String>,
#[arg(long)]
pub author: Option<String>,
}
#[cfg(feature = "pdfua")]
#[derive(Parser)]
pub struct PdfuaValidateArgs {
pub input: String,
#[arg(long, default_value = "1")]
pub level: String,
#[arg(long, default_value = "text")]
pub format: String,
}
#[cfg(feature = "pdfua")]
#[derive(Parser)]
pub struct PdfuaConvertArgs {
pub input: String,
#[arg(short, long)]
pub output: String,
#[arg(long, default_value = "1")]
pub level: String,
#[arg(long)]
pub title: Option<String>,
#[arg(long, default_value = "en")]
pub language: String,
}
#[derive(Parser)]
pub struct ConvertBatchArgs {
#[arg(required = true)]
pub inputs: Vec<String>,
#[arg(short, long, default_value = ".")]
pub output_dir: String,
#[arg(long, default_value = "4")]
pub workers: usize,
#[arg(long, default_value = "A4")]
pub page_size: String,
#[arg(long)]
pub background: bool,
#[arg(long)]
pub landscape: bool,
}
#[derive(Parser)]
pub struct InfoArgs {
#[arg(long)]
pub renderer: bool,
pub input: Option<String>,
}