pub mod annotation;
pub mod document;
pub mod export;
pub mod form;
pub mod hyperlink;
pub mod metadata;
pub mod page;
pub mod reader;
pub mod security;
pub mod types;
pub mod writer;
pub(crate) use crate::pdf::document::*;
pub use crate::pdf::export::*;
pub use crate::pdf::reader::*;
pub use crate::pdf::types::*;
pub use crate::pdf::writer::*;
use crate::core::{Color, Rect, Size};
use crate::pdf::metadata::PdfMetadata;
pub trait PdfPage {
fn size(&self) -> Size;
fn set_size(&mut self, size: Size);
fn draw_text(&mut self, text: &str, x: f32, y: f32, font_size: f32, color: Color);
fn draw_line(&mut self, x1: f32, y1: f32, x2: f32, y2: f32, width: f32, color: Color);
fn draw_rect(&mut self, rect: Rect, width: f32, color: Color);
fn fill_rect(&mut self, rect: Rect, color: Color);
fn draw_image(&mut self, image: &[u8], rect: Rect);
fn add_text_field(&mut self, name: &str, rect: Rect, default_text: &str);
fn add_checkbox(&mut self, name: &str, rect: Rect, checked: bool);
fn add_button(&mut self, name: &str, rect: Rect, text: &str);
fn content(&self) -> Vec<u8>;
fn form_fields(&self) -> Vec<PdfFormField>;
}
pub trait PdfDocument {
fn page_count(&self) -> u32;
fn get_page(&mut self, index: u32) -> Option<&mut dyn PdfPage>;
fn add_page(&mut self, size: Size) -> u32;
fn insert_page(&mut self, index: u32, size: Size) -> u32;
fn remove_page(&mut self, index: u32) -> bool;
fn reorder_pages(&mut self, new_order: &[u32]) -> bool;
fn metadata(&self) -> &PdfMetadata;
fn set_metadata(&mut self, metadata: PdfMetadata);
fn security(&self) -> &PdfSecurity;
fn set_security(&mut self, security: PdfSecurity);
fn set_page_numbering_enabled(&mut self, enabled: bool);
fn set_page_numbering_format(&mut self, prefix: &str, start_at: u32);
fn set_page_numbering_layout(&mut self, right_margin: f32, bottom_margin: f32, font_size: f32);
fn save(&self, path: &str) -> Result<(), std::io::Error>;
fn to_bytes(&self) -> Result<Vec<u8>, std::io::Error>;
}