diff --git a/docx-core/examples/even_header.rs b/docx-core/examples/even_header.rs new file mode 100644 index 0000000..4544a18 --- /dev/null +++ b/docx-core/examples/even_header.rs @@ -0,0 +1,17 @@ +use docx_rs::*; + +pub fn main() -> Result<(), DocxError> { + let path = std::path::Path::new("./output/even_header.docx"); + let file = std::fs::File::create(&path).unwrap(); + let header = + Header::new().add_paragraph(Paragraph::new().add_run(Run::new().add_text("Hello"))); + let even_header = + Header::new().add_paragraph(Paragraph::new().add_run(Run::new().add_text("Even"))); + Docx::new() + .header(header) + .even_header(even_header) + .add_paragraph(Paragraph::new().add_run(Run::new().add_text("World"))) + .build() + .pack(file)?; + Ok(()) +} diff --git a/docx-core/examples/first_header.rs b/docx-core/examples/first_header.rs new file mode 100644 index 0000000..c9549cb --- /dev/null +++ b/docx-core/examples/first_header.rs @@ -0,0 +1,17 @@ +use docx_rs::*; + +pub fn main() -> Result<(), DocxError> { + let path = std::path::Path::new("./output/first_header.docx"); + let file = std::fs::File::create(&path).unwrap(); + let header = + Header::new().add_paragraph(Paragraph::new().add_run(Run::new().add_text("Hello"))); + let first_header = + Header::new().add_paragraph(Paragraph::new().add_run(Run::new().add_text("First"))); + Docx::new() + .header(header) + .first_header(first_header) + .add_paragraph(Paragraph::new().add_run(Run::new().add_text("World"))) + .build() + .pack(file)?; + Ok(()) +} diff --git a/docx-core/src/documents/document.rs b/docx-core/src/documents/document.rs index c980aed..374cd38 100644 --- a/docx-core/src/documents/document.rs +++ b/docx-core/src/documents/document.rs @@ -150,13 +150,33 @@ impl Document { self } - pub fn header_reference(mut self, r: HeaderReference) -> Self { - self.section_property = self.section_property.header_reference(r); + pub fn header(mut self, h: Header, rid: &str) -> Self { + self.section_property = self.section_property.header(h, rid); self } - pub fn footer_reference(mut self, r: FooterReference) -> Self { - self.section_property = self.section_property.footer_reference(r); + pub fn first_header(mut self, h: Header, rid: &str) -> Self { + self.section_property = self.section_property.first_header(h, rid); + self + } + + pub fn even_header(mut self, h: Header, rid: &str) -> Self { + self.section_property = self.section_property.even_header(h, rid); + self + } + + pub fn footer(mut self, h: Footer, rid: &str) -> Self { + self.section_property = self.section_property.footer(h, rid); + self + } + + pub fn first_footer(mut self, h: Footer, rid: &str) -> Self { + self.section_property = self.section_property.first_footer(h, rid); + self + } + + pub fn even_footer(mut self, h: Footer, rid: &str) -> Self { + self.section_property = self.section_property.even_footer(h, rid); self } } diff --git a/docx-core/src/documents/elements/section_property.rs b/docx-core/src/documents/elements/section_property.rs index 1edf199..1c0428f 100644 --- a/docx-core/src/documents/elements/section_property.rs +++ b/docx-core/src/documents/elements/section_property.rs @@ -2,19 +2,44 @@ use super::*; use crate::documents::BuildXML; use crate::types::*; use crate::xml_builder::*; +use crate::{Footer, Header}; use serde::Serialize; #[derive(Debug, Clone, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] pub struct SectionProperty { - page_size: PageSize, - page_margin: PageMargin, - columns: usize, - doc_grid: DocGrid, - header_reference: Option, - footer_reference: Option, - section_type: Option, + pub page_size: PageSize, + pub page_margin: PageMargin, + pub columns: usize, + pub title_pg: bool, + pub doc_grid: DocGrid, + #[serde(skip_serializing_if = "Option::is_none")] + pub header_reference: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub header: Option
, + #[serde(skip_serializing_if = "Option::is_none")] + pub first_header_reference: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub first_header: Option
, + #[serde(skip_serializing_if = "Option::is_none")] + pub even_header_reference: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub even_header: Option
, + #[serde(skip_serializing_if = "Option::is_none")] + pub footer_reference: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub footer: Option