use std::path::{Path, PathBuf};
use super::backend::RenderBackend;
use super::config::{ImageFormat, RenderConfig};
use super::error::{RenderError, Result};
use super::traits::RenderedImage;
pub fn render_page_to_png(
pdf_path: &Path,
page_index: usize,
output: &Path,
dpi: u32,
) -> Result<()> {
let config = RenderConfig {
dpi,
format: ImageFormat::Png,
..RenderConfig::default()
};
let renderer = RenderBackend::default_backend().build_renderer(pdf_path)?;
renderer.render_page_to_path(page_index, &config, output)
}
pub fn render_all_pages_to_dir(
pdf_path: &Path,
output_dir: &Path,
dpi: u32,
) -> Result<Vec<PathBuf>> {
std::fs::create_dir_all(output_dir)?;
let config = RenderConfig {
dpi,
format: ImageFormat::Png,
..RenderConfig::default()
};
let renderer = RenderBackend::default_backend().build_renderer(pdf_path)?;
let mut page_count = 0usize;
loop {
match renderer.render_page(page_count, &config) {
Ok(_) => page_count += 1,
Err(RenderError::InvalidPage { .. }) => break,
Err(e) => return Err(e),
}
}
let mut paths = Vec::with_capacity(page_count);
for i in 0..page_count {
let filename = format!("page_{i:03}.png");
let path = output_dir.join(&filename);
renderer.render_page_to_path(i, &config, &path)?;
paths.push(path);
}
Ok(paths)
}
pub fn render_page(
pdf_path: &Path,
page_index: usize,
config: &RenderConfig,
) -> Result<RenderedImage> {
let renderer = RenderBackend::default_backend().build_renderer(pdf_path)?;
renderer.render_page(page_index, config)
}