use std::io::{Read, Seek};
use easyofd_core::{OfdPage, OfdResult};
#[allow(deprecated)]
use crate::model::{AnnotionEntity, OfdPageVo};
use crate::ofd_reader_facade::OfdReaderFacade;
use crate::read_options::ReadOptions;
#[derive(Debug)]
#[deprecated(since = "1.0.0", note = "使用 OfdReaderFacade 替代")]
pub struct DlOfdReader {
facade: OfdReaderFacade,
}
#[allow(deprecated)]
impl DlOfdReader {
pub fn open(path: impl AsRef<std::path::Path>) -> OfdResult<Self> {
Ok(Self {
facade: OfdReaderFacade::open(path)?,
})
}
pub fn from_bytes(data: &[u8]) -> OfdResult<Self> {
Ok(Self {
facade: OfdReaderFacade::from_bytes(data)?,
})
}
pub fn from_seek<R: Read + Seek>(source: R, options: ReadOptions) -> OfdResult<Self> {
Ok(Self {
facade: OfdReaderFacade::from_seek(source, options)?,
})
}
#[must_use]
pub fn facade(&self) -> &OfdReaderFacade {
&self.facade
}
#[must_use]
pub fn page_count(&self) -> usize {
self.facade.page_count()
}
#[must_use]
pub fn pages(&self) -> &[OfdPage] {
self.facade.pages()
}
#[must_use]
pub fn get_ofd_page_vo(&self) -> Vec<OfdPageVo> {
self.facade
.pages()
.iter()
.enumerate()
.map(|(i, page)| {
let page_path = page
.base_path
.clone()
.unwrap_or_else(|| format!("Pages/Page_{i}/Content.xml"));
OfdPageVo::new(page_path, None)
})
.collect()
}
#[must_use]
pub fn get_annotations(&self) -> Vec<AnnotionEntity> {
Vec::new()
}
#[must_use]
pub fn extract_all_text(&self) -> String {
self.facade.extract_all_text()
}
}
#[cfg(test)]
mod tests {
#[allow(deprecated)]
use super::*;
use easyofd_core::TextObject;
use easyofd_writer::OfdWriter;
fn build_test_ofd() -> Vec<u8> {
let mut writer = OfdWriter::new();
let mut page = OfdPage::new(210.0, 297.0);
page.add_text(TextObject::new(10.0, 20.0, "DL Test"));
writer.add_page(page);
writer.build().unwrap()
}
#[test]
#[allow(deprecated)]
fn test_dl_ofd_reader_from_bytes() {
let bytes = build_test_ofd();
let reader = DlOfdReader::from_bytes(&bytes).unwrap();
assert_eq!(reader.page_count(), 1);
}
#[test]
#[allow(deprecated)]
fn test_dl_ofd_reader_get_ofd_page_vo() {
let bytes = build_test_ofd();
let reader = DlOfdReader::from_bytes(&bytes).unwrap();
let vos = reader.get_ofd_page_vo();
assert_eq!(vos.len(), 1);
}
#[test]
#[allow(deprecated)]
fn test_dl_ofd_reader_annotations() {
let bytes = build_test_ofd();
let reader = DlOfdReader::from_bytes(&bytes).unwrap();
assert!(reader.get_annotations().is_empty());
}
#[test]
#[allow(deprecated)]
fn test_dl_ofd_reader_extract_text() {
let bytes = build_test_ofd();
let reader = DlOfdReader::from_bytes(&bytes).unwrap();
let text = reader.extract_all_text();
assert!(text.contains("DL Test"));
}
}