Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 36 additions & 36 deletions src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,76 +91,76 @@ pub struct Chrome {
pub pdf_landscape: bool,
#[env_config(
name = "ZO_PDF_DISPLAY_HEADER_FOOTER",
default = false,
help = "Display header and footer in the PDF"
default = "",
help = "Display header and footer in the PDF. Set to 'true' or 'false'. When empty, uses browser default"
)]
pub pdf_display_header_footer: bool,
pub pdf_display_header_footer: String,
#[env_config(
name = "ZO_PDF_PRINT_BACKGROUND",
default = false,
help = "Print background graphics in the PDF"
default = "",
help = "Print background graphics in the PDF. Set to 'true' or 'false'. When empty, uses browser default"
)]
pub pdf_print_background: bool,
pub pdf_print_background: String,
#[env_config(
name = "ZO_PDF_SCALE",
default = 1.0,
help = "Scale of the webpage rendering. Default is 1.0"
default = "",
help = "Scale of the webpage rendering (e.g., 1.0 for 100%). When empty, uses browser default"
)]
pub pdf_scale: f64,
pub pdf_scale: String,
#[env_config(
name = "ZO_PDF_PAPER_WIDTH",
default = 8.5,
help = "Paper width in inches. Default is 8.5 inches (US Letter)"
default = "",
help = "Paper width in inches (e.g., 8.5 for US Letter). When empty, uses browser default"
)]
pub pdf_paper_width: f64,
pub pdf_paper_width: String,
#[env_config(
name = "ZO_PDF_PAPER_HEIGHT",
default = 11.0,
help = "Paper height in inches. Default is 11 inches (US Letter)"
default = "",
help = "Paper height in inches (e.g., 11.0 for US Letter). When empty, uses browser default"
)]
pub pdf_paper_height: f64,
pub pdf_paper_height: String,
#[env_config(
name = "ZO_PDF_MARGIN_TOP",
default = 0.4,
help = "Top margin in inches. Default is 0.4 inches (~1cm)"
default = "",
help = "Top margin in inches. When empty, uses browser default"
)]
pub pdf_margin_top: f64,
pub pdf_margin_top: String,
#[env_config(
name = "ZO_PDF_MARGIN_BOTTOM",
default = 0.4,
help = "Bottom margin in inches. Default is 0.4 inches (~1cm)"
default = "",
help = "Bottom margin in inches. When empty, uses browser default"
)]
pub pdf_margin_bottom: f64,
pub pdf_margin_bottom: String,
#[env_config(
name = "ZO_PDF_MARGIN_LEFT",
default = 0.4,
help = "Left margin in inches. Default is 0.4 inches (~1cm)"
default = "",
help = "Left margin in inches. When empty, uses browser default"
)]
pub pdf_margin_left: f64,
pub pdf_margin_left: String,
#[env_config(
name = "ZO_PDF_MARGIN_RIGHT",
default = 0.4,
help = "Right margin in inches. Default is 0.4 inches (~1cm)"
default = "",
help = "Right margin in inches. When empty, uses browser default"
)]
pub pdf_margin_right: f64,
pub pdf_margin_right: String,
#[env_config(
name = "ZO_PDF_PREFER_CSS_PAGE_SIZE",
default = false,
help = "Prefer page size as defined by CSS. If false, content will be scaled to fit paper size"
default = "",
help = "Prefer page size as defined by CSS. Set to 'true' or 'false'. When empty, uses browser default"
)]
pub pdf_prefer_css_page_size: bool,
pub pdf_prefer_css_page_size: String,
#[env_config(
name = "ZO_PDF_GENERATE_TAGGED_PDF",
default = false,
help = "Generate tagged (accessible) PDF for screen readers and assistive technologies"
default = "",
help = "Generate tagged (accessible) PDF for screen readers. Set to 'true' or 'false'. When empty, uses browser default"
)]
pub pdf_generate_tagged_pdf: bool,
pub pdf_generate_tagged_pdf: String,
#[env_config(
name = "ZO_PDF_GENERATE_DOCUMENT_OUTLINE",
default = false,
help = "Embed the document outline into the PDF for navigation"
default = "",
help = "Embed the document outline into the PDF. Set to 'true' or 'false'. When empty, uses browser default"
)]
pub pdf_generate_document_outline: bool,
pub pdf_generate_document_outline: String,
}

#[derive(EnvConfig)]
Expand Down
38 changes: 26 additions & 12 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -462,20 +462,34 @@ pub async fn generate_report(
// Convert the page into pdf
let attachment_data = match report_type {
ReportType::PDF => {
// Helper function to convert string to Option<bool>
let parse_bool_opt = |s: &str| -> Option<bool> {
match s.trim().to_lowercase().as_str() {
"true" => Some(true),
"false" => Some(false),
_ => None,
}
};

// Helper function to parse string to Option<f64>
let parse_f64_opt = |s: &str| -> Option<f64> { s.trim().parse::<f64>().ok() };

page.pdf(PrintToPdfParams {
landscape: Some(CONFIG.chrome.pdf_landscape),
display_header_footer: Some(CONFIG.chrome.pdf_display_header_footer),
print_background: Some(CONFIG.chrome.pdf_print_background),
scale: Some(CONFIG.chrome.pdf_scale),
paper_width: Some(CONFIG.chrome.pdf_paper_width),
paper_height: Some(CONFIG.chrome.pdf_paper_height),
margin_top: Some(CONFIG.chrome.pdf_margin_top),
margin_bottom: Some(CONFIG.chrome.pdf_margin_bottom),
margin_left: Some(CONFIG.chrome.pdf_margin_left),
margin_right: Some(CONFIG.chrome.pdf_margin_right),
prefer_css_page_size: Some(CONFIG.chrome.pdf_prefer_css_page_size),
generate_tagged_pdf: Some(CONFIG.chrome.pdf_generate_tagged_pdf),
generate_document_outline: Some(CONFIG.chrome.pdf_generate_document_outline),
display_header_footer: parse_bool_opt(&CONFIG.chrome.pdf_display_header_footer),
print_background: parse_bool_opt(&CONFIG.chrome.pdf_print_background),
scale: parse_f64_opt(&CONFIG.chrome.pdf_scale),
paper_width: parse_f64_opt(&CONFIG.chrome.pdf_paper_width),
paper_height: parse_f64_opt(&CONFIG.chrome.pdf_paper_height),
margin_top: parse_f64_opt(&CONFIG.chrome.pdf_margin_top),
margin_bottom: parse_f64_opt(&CONFIG.chrome.pdf_margin_bottom),
margin_left: parse_f64_opt(&CONFIG.chrome.pdf_margin_left),
margin_right: parse_f64_opt(&CONFIG.chrome.pdf_margin_right),
prefer_css_page_size: parse_bool_opt(&CONFIG.chrome.pdf_prefer_css_page_size),
generate_tagged_pdf: parse_bool_opt(&CONFIG.chrome.pdf_generate_tagged_pdf),
generate_document_outline: parse_bool_opt(
&CONFIG.chrome.pdf_generate_document_outline,
),
..Default::default()
})
.await?
Expand Down
58 changes: 58 additions & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,64 @@ async fn main() -> Result<(), anyhow::Error> {
panic!("Report User email and password must be specified");
}

// Log configured Chrome PDF parameters
log::info!("Chrome PDF Configuration:");
log::info!(" pdf_landscape: {}", CONFIG.chrome.pdf_landscape);

let display_opt = |s: &str| {
if s.is_empty() {
"None (browser default)".to_string()
} else {
format!("Some({})", s)
}
};

log::info!(
" pdf_display_header_footer: {}",
display_opt(&CONFIG.chrome.pdf_display_header_footer)
);
log::info!(
" pdf_print_background: {}",
display_opt(&CONFIG.chrome.pdf_print_background)
);
log::info!(" pdf_scale: {}", display_opt(&CONFIG.chrome.pdf_scale));
log::info!(
" pdf_paper_width: {}",
display_opt(&CONFIG.chrome.pdf_paper_width)
);
log::info!(
" pdf_paper_height: {}",
display_opt(&CONFIG.chrome.pdf_paper_height)
);
log::info!(
" pdf_margin_top: {}",
display_opt(&CONFIG.chrome.pdf_margin_top)
);
log::info!(
" pdf_margin_bottom: {}",
display_opt(&CONFIG.chrome.pdf_margin_bottom)
);
log::info!(
" pdf_margin_left: {}",
display_opt(&CONFIG.chrome.pdf_margin_left)
);
log::info!(
" pdf_margin_right: {}",
display_opt(&CONFIG.chrome.pdf_margin_right)
);
log::info!(
" pdf_prefer_css_page_size: {}",
display_opt(&CONFIG.chrome.pdf_prefer_css_page_size)
);
log::info!(
" pdf_generate_tagged_pdf: {}",
display_opt(&CONFIG.chrome.pdf_generate_tagged_pdf)
);
log::info!(
" pdf_generate_document_outline: {}",
display_opt(&CONFIG.chrome.pdf_generate_document_outline)
);

let haddr: SocketAddr = if CONFIG.http.ipv6_enabled {
format!("[::]:{}", CONFIG.http.port).parse()?
} else {
Expand Down