J-F-Liu / lopdf

A Rust library for PDF document manipulation.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

File size gets increased or unchanged

amitdixit opened this issue · comments

I had a PDF fie with 58 pages of size 4.5 MB , I removed 50 pages from the file the size was like 4.4 MB for 8 pages, I did use compress and other things but he size remained unchanged.

use lopdf::dictionary;

use std::collections::BTreeMap;
use std::vec;

use lopdf::content::{Content, Operation};
use lopdf::{Bookmark, Document, Object, ObjectId, Stream};

fn main() {
let mut doc = Document::load("PATH_TO_58_page.pdf").unwrap();
doc.compress();
let count = doc.get_pages().len();

let mut page_numbers: Vec<u32> = vec![];
for i in 8..count {
    
    page_numbers.push(i as u32);
}

doc.delete_pages(&page_numbers);

doc.compress();
doc.save("PATH_TO_58_page_new1.pdf").unwrap();
doc.compress();

let mut doc2 = Document::load("PATH_TO_58_page.pdf").unwrap();
let pages = doc2.get_pages();

for (contents_index, page) in pages {

    if !page_numbers.contains(&contents_index){
        println!("{}", contents_index);
        let content = doc2.get_page_content(page).unwrap();
        let mut stream = Stream::new(dictionary! {}, content.clone());
        stream.compress().unwrap();
        let stream_obj = Object::Stream(stream);

        doc2.objects.insert(page, stream_obj);
    }
    
}

doc2.compress();
doc2.save("output.pdf").unwrap();

}