rust_pdf_box/manipulation/
splitter.rs1use crate::error::PdfResult;
2use crate::manipulation::merger::PDFMerger;
3use crate::pd::document::PDDocument;
4
5pub struct PDFSplitter;
7
8impl PDFSplitter {
9 pub fn split_into_single_pages(doc: &PDDocument) -> PdfResult<Vec<PDDocument>> {
11 Self::split_by_chunk_size(doc, 1)
12 }
13
14 pub fn split_by_chunk_size(doc: &PDDocument, chunk_size: usize) -> PdfResult<Vec<PDDocument>> {
16 let chunk_size = chunk_size.max(1);
17 let mut results = Vec::new();
18 let total_pages = doc.page_count();
19
20 for chunk_start in (0..total_pages).step_by(chunk_size) {
21 let chunk_end = (chunk_start + chunk_size).min(total_pages);
22 let mut sub_doc = PDDocument::new();
23
24 for p_idx in chunk_start..chunk_end {
25 let page = doc.get_page(p_idx)?;
26 let mut temp_single = PDDocument::new();
27 temp_single.add_page(page.clone());
28 PDFMerger::append_document(&mut sub_doc, &temp_single)?;
29 }
30
31 results.push(sub_doc);
32 }
33
34 Ok(results)
35 }
36}