broken rendering

This commit is contained in:
Kilian Schuettler 2025-02-15 17:31:11 +01:00
parent 457ddf8131
commit 7c2749aefa
5 changed files with 72 additions and 5 deletions

View File

@ -14,6 +14,7 @@ edition = "2021"
name = "pdf_forge_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[render]
[build-dependencies]
tauri-build = { version = "2", features = [] }

View File

@ -0,0 +1,43 @@
use pdf::file::FileOptions;
use pdf_forge_render::render::Renderer;
use show_image::{create_window, event};
use std::thread::sleep;
use std::time::Duration;
macro_rules! timed {
($func_call:expr, $label:expr) => {{
let start = std::time::Instant::now();
let result = $func_call;
let duration = std::time::Instant::now().duration_since(start);
println!("{} took {:?}", $label, duration);
result
}};
}
#[show_image::main]
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("{:?}", std::env::args());
let pdf_path = std::env::args()
.nth(1)
.expect("Please provide a path to a PDF file as an argument");
let page_num = std::env::args()
.nth(2)
.map(|arg| {
arg.parse::<u32>()
.expect("provide a valid page number as an argument")
})
.expect("Please provide a ");
let file = FileOptions::cached().open(pdf_path.as_str())?;
let mut renderer = Renderer::new(&file, 75);
let window = create_window(format!("page-{}", page_num), Default::default())?;
let img = renderer.render(page_num)?;
let _ = window.set_image(format!("im-{}", page_num), img)?;
for event in window.event_channel()? {
if let event::WindowEvent::CloseRequested(event) = event {
break;
}
}
Ok(())
}

View File

@ -1,10 +1,11 @@
extern crate pdf;
pub mod render;
mod render;
mod retrieval;
#[cfg(test)]
mod tests;
extern crate pdf;
use crate::pdf::object::Resolve;
use crate::render::Renderer;
use image::DynamicImage;
@ -717,11 +718,11 @@ fn get_xref_table_model_with_file(file: &CosFile) -> Result<XRefTableModel, Stri
})
}
pub struct Session {
struct Session {
files: RwLock<HashMap<String, Arc<SessionFile>>>,
}
pub struct SessionFile {
struct SessionFile {
pdf_file: PdfFile,
cos_file: CosFile,
}

View File

@ -6,7 +6,6 @@ use image::{DynamicImage, RgbaImage};
use pathfinder_geometry::transform2d::Transform2F;
use pathfinder_rasterize::Rasterizer;
use pdf_render::{render_page, Cache, SceneBackend};
use show_image::{create_window, run_context};
pub struct Renderer<'a> {
file: &'a CosFile,

View File

@ -252,5 +252,28 @@ mod tests {
);
}
use crate::render::{render, render_with_dpi, Renderer};
#[test]
fn test_render() {
let file = timed!(
FileOptions::cached().open(PDF_SPEC_PATH).unwrap(),
"Loading file"
);
let mut renderer = Renderer::new(&file, 150);
let mut rendered_pages: Vec<DynamicImage> = vec![];
timed!(
for i in 0..1 {
let img = timed!(renderer.render(i), format!("render page {}", i));
rendered_pages.push(img.unwrap())
},
"rendering some pages"
);
timed!(
for (num, image) in rendered_pages.iter().enumerate() {
image.to_rgb8().save(format!("page_{}.jpg", num)).unwrap()
},
"saving images"
);
}
}