broken rendering
This commit is contained in:
parent
457ddf8131
commit
7c2749aefa
@ -14,6 +14,7 @@ edition = "2021"
|
|||||||
name = "pdf_forge_lib"
|
name = "pdf_forge_lib"
|
||||||
crate-type = ["staticlib", "cdylib", "rlib"]
|
crate-type = ["staticlib", "cdylib", "rlib"]
|
||||||
|
|
||||||
|
[render]
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
tauri-build = { version = "2", features = [] }
|
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;
|
mod render;
|
||||||
pub mod render;
|
|
||||||
mod retrieval;
|
mod retrieval;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests;
|
mod tests;
|
||||||
|
|
||||||
|
extern crate pdf;
|
||||||
|
|
||||||
use crate::pdf::object::Resolve;
|
use crate::pdf::object::Resolve;
|
||||||
use crate::render::Renderer;
|
use crate::render::Renderer;
|
||||||
use image::DynamicImage;
|
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>>>,
|
files: RwLock<HashMap<String, Arc<SessionFile>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct SessionFile {
|
struct SessionFile {
|
||||||
pdf_file: PdfFile,
|
pdf_file: PdfFile,
|
||||||
cos_file: CosFile,
|
cos_file: CosFile,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,6 @@ use image::{DynamicImage, RgbaImage};
|
|||||||
use pathfinder_geometry::transform2d::Transform2F;
|
use pathfinder_geometry::transform2d::Transform2F;
|
||||||
use pathfinder_rasterize::Rasterizer;
|
use pathfinder_rasterize::Rasterizer;
|
||||||
use pdf_render::{render_page, Cache, SceneBackend};
|
use pdf_render::{render_page, Cache, SceneBackend};
|
||||||
use show_image::{create_window, run_context};
|
|
||||||
|
|
||||||
pub struct Renderer<'a> {
|
pub struct Renderer<'a> {
|
||||||
file: &'a CosFile,
|
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