diff --git a/crates/images/src/error.rs b/crates/images/src/error.rs index 2bd9dd06c..df7cb64c1 100644 --- a/crates/images/src/error.rs +++ b/crates/images/src/error.rs @@ -27,8 +27,6 @@ pub enum Error { RgbImageConversion, #[error("error with pdfium: {0}")] Pdfium(#[from] pdfium_render::prelude::PdfiumError), - #[error("failed to load pdfium library")] - PdfiumBinding, #[error("error with usvg: {0}")] USvg(#[from] resvg::usvg::Error), #[error("failed to allocate `Pixbuf` while converting an SVG")] diff --git a/crates/images/src/pdf.rs b/crates/images/src/pdf.rs index 0a6d838cc..b0a4205ab 100644 --- a/crates/images/src/pdf.rs +++ b/crates/images/src/pdf.rs @@ -4,7 +4,7 @@ use std::{ path::{Path, PathBuf}, }; -use crate::{consts::PDF_RENDER_WIDTH, Error::PdfiumBinding, ImageHandler, Result}; +use crate::{consts::PDF_RENDER_WIDTH, ImageHandler, Result}; use image::DynamicImage; use once_cell::sync::Lazy; use pdfium_render::prelude::{PdfPageRenderRotation, PdfRenderConfig, Pdfium}; @@ -20,9 +20,9 @@ const BINDING_LOCATION: &str = if cfg!(target_os = "macos") { "../lib/spacedrive" }; -static PDFIUM: Lazy> = Lazy::new(|| { +static PDFIUM_LIB: Lazy = Lazy::new(|| { let lib_name = Pdfium::pdfium_platform_library_name(); - let lib_path = current_exe() + current_exe() .ok() .and_then(|exe_path| { exe_path.parent().and_then(|parent_path| { @@ -46,33 +46,32 @@ static PDFIUM: Lazy> = Lazy::new(|| { .to_str() .expect("We are converting valid strs to PathBuf then back, it should not fail") .to_owned() - }); - - Pdfium::bind_to_library(lib_path) - .or_else(|err| { - error!("{err:#?}"); - Pdfium::bind_to_system_library() }) - .map(Pdfium::new) - .map_err(|err| error!("{err:#?}")) - .ok() +}); + +static PDFIUM_RENDER_CONFIG: Lazy = Lazy::new(|| { + PdfRenderConfig::new() + .set_target_width(PDF_RENDER_WIDTH) + .rotate_if_landscape(PdfPageRenderRotation::Degrees90, true) + .render_form_data(false) + .render_annotations(false) }); pub struct PdfHandler {} impl ImageHandler for PdfHandler { fn handle_image(&self, path: &Path) -> Result { - let pdfium = PDFIUM.as_ref().ok_or(PdfiumBinding)?; + let pdfium = Pdfium::new(Pdfium::bind_to_library(PDFIUM_LIB.as_str()).or_else(|err| { + error!("{err:#?}"); + Pdfium::bind_to_system_library() + })?); - let render_config = PdfRenderConfig::new() - .set_target_width(PDF_RENDER_WIDTH) - .rotate_if_landscape(PdfPageRenderRotation::Degrees90, true); + let pdf = pdfium.load_pdf_from_file(path, None)?; + let first_page = pdf.pages().first()?; + let image = first_page + .render_with_config(&PDFIUM_RENDER_CONFIG)? + .as_image(); - Ok(pdfium - .load_pdf_from_file(path, None)? - .pages() - .first()? - .render_with_config(&render_config)? - .as_image()) + Ok(image) } }