pdfium_render/pdf/document/page/
structure_tree.rs1use crate::bindgen::{FPDF_PAGE, FPDF_STRUCTTREE};
5use crate::pdfium::PdfiumLibraryBindingsAccessor;
6use std::marker::PhantomData;
7
8#[cfg(doc)]
9use crate::pdf::document::page::PdfPage;
10
11pub struct PdfPageStructureTree<'a> {
17 page_handle: FPDF_PAGE,
18 tree_handle: FPDF_STRUCTTREE,
19 is_open: bool,
20 lifetime: PhantomData<&'a FPDF_STRUCTTREE>,
21}
22
23impl<'a> PdfPageStructureTree<'a> {
24 pub(crate) fn from_pdfium(page_handle: FPDF_PAGE) -> Self {
25 PdfPageStructureTree {
30 page_handle,
31 tree_handle: 0 as FPDF_STRUCTTREE,
32 is_open: false,
33 lifetime: PhantomData,
34 }
35 }
36
37 #[inline]
39 pub(crate) fn handle(&self) -> FPDF_STRUCTTREE {
40 self.tree_handle
41 }
42}
43
44impl<'a> Drop for PdfPageStructureTree<'a> {
45 #[inline]
46 fn drop(&mut self) {
47 if self.is_open {
48 unsafe {
49 self.bindings().FPDF_StructTree_Close(self.handle());
50 }
51 }
52 }
53}
54
55impl<'a> PdfiumLibraryBindingsAccessor<'a> for PdfPageStructureTree<'a> {}
56
57#[cfg(feature = "thread_safe")]
58unsafe impl<'a> Send for PdfPageStructureTree<'a> {}
59
60#[cfg(feature = "thread_safe")]
61unsafe impl<'a> Sync for PdfPageStructureTree<'a> {}