broken rendering
This commit is contained in:
parent
457ddf8131
commit
7c2749aefa
@ -14,6 +14,7 @@ edition = "2021"
|
||||
name = "pdf_forge_lib"
|
||||
crate-type = ["staticlib", "cdylib", "rlib"]
|
||||
|
||||
[render]
|
||||
[build-dependencies]
|
||||
tauri-build = { version = "2", features = [] }
|
||||
|
||||
|
||||
43
src-tauri/examples/render.rs
Normal file
43
src-tauri/examples/render.rs
Normal 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(())
|
||||
}
|
||||
@ -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,
|
||||
}
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user