pdfium_render/pdf/document/page/annotation/
variable_text.rs1use crate::error::{PdfiumError, PdfiumInternalError};
2use crate::pdf::document::form::PdfForm;
3use crate::pdf::document::page::annotation::private::internal::PdfPageAnnotationPrivate;
4use crate::pdf::points::PdfPoints;
5use std::ffi::c_float;
6
7#[cfg(any(
8 feature = "pdfium_future",
9 feature = "pdfium_7215",
10 feature = "pdfium_7123",
11 feature = "pdfium_6996",
12 feature = "pdfium_6721",
13 feature = "pdfium_6666",
14 feature = "pdfium_6611",
15 feature = "pdfium_6569",
16 feature = "pdfium_6555",
17))]
18use {crate::pdf::color::PdfColor, std::ffi::c_uint};
19
20#[cfg(doc)]
21use crate::pdf::document::page::annotation::PdfPageAnnotation;
22
23pub trait PdfPageAnnotationVariableText<'a> {
26 fn get_font_size(&self, form: &PdfForm) -> Result<PdfPoints, PdfiumError>;
30
31 fn is_font_auto_sized(&self, form: &PdfForm) -> bool;
34
35 #[cfg(any(
36 feature = "pdfium_future",
37 feature = "pdfium_7215",
38 feature = "pdfium_7123",
39 feature = "pdfium_6996",
40 feature = "pdfium_6721",
41 feature = "pdfium_6666",
42 feature = "pdfium_6611",
43 feature = "pdfium_6569",
44 feature = "pdfium_6555",
45 ))]
46 fn get_font_color(&self, form: &PdfForm) -> Result<PdfColor, PdfiumError>;
48
49 #[cfg(feature = "pdfium_future")]
50 fn set_font_color(&mut self, form: &PdfForm, color: PdfColor) -> Result<(), PdfiumError>;
52}
53
54impl<'a, T> PdfPageAnnotationVariableText<'a> for T
55where
56 T: PdfPageAnnotationPrivate<'a>,
57{
58 fn get_font_size(&self, form: &PdfForm) -> Result<PdfPoints, PdfiumError> {
59 let mut value: c_float = 0.0;
60
61 if self
62 .bindings()
63 .is_true(self.bindings().FPDFAnnot_GetFontSize(
64 form.handle(),
65 self.handle(),
66 &mut value,
67 ))
68 {
69 Ok(PdfPoints::new(value))
70 } else {
71 Err(PdfiumError::PdfiumLibraryInternalError(
72 PdfiumInternalError::Unknown,
73 ))
74 }
75 }
76
77 fn is_font_auto_sized(&self, form: &PdfForm) -> bool {
78 match self.get_font_size(form) {
79 Ok(size) => size.value == 0.0,
80 _ => false,
81 }
82 }
83
84 #[cfg(any(
85 feature = "pdfium_future",
86 feature = "pdfium_7215",
87 feature = "pdfium_7123",
88 feature = "pdfium_6996",
89 feature = "pdfium_6721",
90 feature = "pdfium_6666",
91 feature = "pdfium_6611",
92 feature = "pdfium_6569",
93 feature = "pdfium_6555",
94 ))]
95 fn get_font_color(&self, form: &PdfForm) -> Result<PdfColor, PdfiumError> {
96 let mut red: c_uint = 0;
97 let mut green: c_uint = 0;
98 let mut blue: c_uint = 0;
99
100 if self
101 .bindings()
102 .is_true(self.bindings().FPDFAnnot_GetFontColor(
103 form.handle(),
104 self.handle(),
105 &mut red,
106 &mut green,
107 &mut blue,
108 ))
109 {
110 Ok(PdfColor::new(red as u8, green as u8, blue as u8, 255))
111 } else {
112 Err(PdfiumError::PdfiumLibraryInternalError(
113 PdfiumInternalError::Unknown,
114 ))
115 }
116 }
117
118 #[cfg(feature = "pdfium_future")]
119 fn set_font_color(&mut self, form: &PdfForm, color: PdfColor) -> Result<(), PdfiumError> {
120 if self
121 .bindings()
122 .is_true(self.bindings().FPDFAnnot_SetFontColor(
123 form.handle(),
124 self.handle(),
125 color.red() as c_uint,
126 color.green() as c_uint,
127 color.blue() as c_uint,
128 ))
129 {
130 Ok(())
131 } else {
132 Err(PdfiumError::PdfiumLibraryInternalError(
133 PdfiumInternalError::Unknown,
134 ))
135 }
136 }
137}