From 5e6b5654437b5017385febbb4918cee3f43c54c2 Mon Sep 17 00:00:00 2001 From: Jerry Wong Date: Wed, 20 Jul 2022 20:40:00 +0800 Subject: [PATCH] use `Reader` trait for providing a better performance (#19) --- src/pdf.rs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/pdf.rs b/src/pdf.rs index 0f04088b..4faff45a 100644 --- a/src/pdf.rs +++ b/src/pdf.rs @@ -1,4 +1,8 @@ -use std::{env, path::PathBuf}; +use std::{ + env, + io::{Read, Seek}, + path::PathBuf, +}; use image::DynamicImage; @@ -28,7 +32,10 @@ fn initialize_pdfium() -> Box { } } } -pub fn render_preview_page(data: &[u8], quailty: PDFQuality) -> DynamicImage { +pub fn render_preview_page(data: R, quailty: PDFQuality) -> DynamicImage +where + R: Read + Seek + 'static, +{ let render_cfg = PdfBitmapConfig::new(); let render_cfg = match quailty { PDFQuality::High => render_cfg.set_target_width(2000), @@ -37,7 +44,7 @@ pub fn render_preview_page(data: &[u8], quailty: PDFQuality) -> DynamicImage { } .rotate_if_landscape(PdfBitmapRotation::Degrees90, true); Pdfium::new(initialize_pdfium()) - .load_pdf_from_bytes(data, None) + .load_pdf_from_reader(data, None) .unwrap() .pages() .get(0) @@ -54,14 +61,11 @@ fn test_multi_pdf_generate() { let tmp_path = dir.path(); println!("temp path: {}", tmp_path.display()); for i in 0..2 { - use std::{fs::File, io::Read}; - let mut pdf_reader = File::open("tests/test.pdf").unwrap(); - - let mut bytes = Vec::new(); - pdf_reader.read_to_end(&mut bytes).unwrap(); + use std::fs::File; + let pdf_reader = File::open("tests/test.pdf").unwrap(); println!("Rendering {}", &i); - let img = render_preview_page(bytes.as_slice(), PDFQuality::High); + let img = render_preview_page(pdf_reader, PDFQuality::High); img.save(tmp_path.join(format!("test{}.png", &i))) .expect("cannot save image");