oxidize_pdf/text/
font.rs

1/// Standard PDF fonts (Type 1 base 14 fonts).
2///
3/// These fonts are guaranteed to be available in all PDF readers
4/// and don't need to be embedded in the document.
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6pub enum Font {
7    // Standard 14 PDF fonts
8    /// Helvetica (sans-serif)
9    Helvetica,
10    /// Helvetica Bold
11    HelveticaBold,
12    /// Helvetica Oblique (italic)
13    HelveticaOblique,
14    /// Helvetica Bold Oblique
15    HelveticaBoldOblique,
16    /// Times Roman (serif)
17    TimesRoman,
18    /// Times Bold
19    TimesBold,
20    /// Times Italic
21    TimesItalic,
22    /// Times Bold Italic
23    TimesBoldItalic,
24    /// Courier (monospace)
25    Courier,
26    /// Courier Bold
27    CourierBold,
28    /// Courier Oblique
29    CourierOblique,
30    /// Courier Bold Oblique
31    CourierBoldOblique,
32    /// Symbol font (mathematical symbols)
33    Symbol,
34    /// ZapfDingbats (decorative symbols)
35    ZapfDingbats,
36}
37
38impl Font {
39    pub fn pdf_name(&self) -> &'static str {
40        match self {
41            Font::Helvetica => "Helvetica",
42            Font::HelveticaBold => "Helvetica-Bold",
43            Font::HelveticaOblique => "Helvetica-Oblique",
44            Font::HelveticaBoldOblique => "Helvetica-BoldOblique",
45            Font::TimesRoman => "Times-Roman",
46            Font::TimesBold => "Times-Bold",
47            Font::TimesItalic => "Times-Italic",
48            Font::TimesBoldItalic => "Times-BoldItalic",
49            Font::Courier => "Courier",
50            Font::CourierBold => "Courier-Bold",
51            Font::CourierOblique => "Courier-Oblique",
52            Font::CourierBoldOblique => "Courier-BoldOblique",
53            Font::Symbol => "Symbol",
54            Font::ZapfDingbats => "ZapfDingbats",
55        }
56    }
57
58    pub fn is_symbolic(&self) -> bool {
59        matches!(self, Font::Symbol | Font::ZapfDingbats)
60    }
61}
62
63#[derive(Debug, Clone, Copy, PartialEq)]
64pub enum FontFamily {
65    Helvetica,
66    Times,
67    Courier,
68}
69
70impl FontFamily {
71    pub fn regular(self) -> Font {
72        match self {
73            FontFamily::Helvetica => Font::Helvetica,
74            FontFamily::Times => Font::TimesRoman,
75            FontFamily::Courier => Font::Courier,
76        }
77    }
78
79    pub fn bold(self) -> Font {
80        match self {
81            FontFamily::Helvetica => Font::HelveticaBold,
82            FontFamily::Times => Font::TimesBold,
83            FontFamily::Courier => Font::CourierBold,
84        }
85    }
86
87    pub fn italic(self) -> Font {
88        match self {
89            FontFamily::Helvetica => Font::HelveticaOblique,
90            FontFamily::Times => Font::TimesItalic,
91            FontFamily::Courier => Font::CourierOblique,
92        }
93    }
94
95    pub fn bold_italic(self) -> Font {
96        match self {
97            FontFamily::Helvetica => Font::HelveticaBoldOblique,
98            FontFamily::Times => Font::TimesBoldItalic,
99            FontFamily::Courier => Font::CourierBoldOblique,
100        }
101    }
102}