Skip to main content

tauri_plugin_thermal_printer/models/
paper_size.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub enum PaperSize {
5    /// 40mm paper — print width ~32mm, 256 dots @ 203 DPI
6    Mm40,
7    /// 44mm paper — print width ~36mm, 288 dots @ 203 DPI
8    Mm44,
9    /// 58mm paper — print width ~48mm, 384 dots @ 203 DPI (most common small format)
10    Mm58,
11    /// 72mm paper — print width ~64mm, 512 dots @ 203 DPI
12    Mm72,
13    /// 80mm paper — print width ~72mm, 576 dots @ 203 DPI (most common large format)
14    Mm80,
15    /// 104mm paper — print width ~94mm, 752 dots @ 203 DPI (wide format)
16    Mm104,
17}
18
19impl PaperSize {
20    /// Default paper size used when none is specified
21    pub const DEFAULT: PaperSize = PaperSize::Mm80;
22
23    // Método para obtener caracteres por línea
24    pub fn chars_per_line(&self) -> i32 {
25        match self {
26            PaperSize::Mm40 => 21,
27            PaperSize::Mm44 => 24,
28            PaperSize::Mm58 => 32,
29            PaperSize::Mm72 => 42,
30            PaperSize::Mm80 => 48,
31            PaperSize::Mm104 => 62,
32        }
33    }
34
35    // Método para obtener el ancho en píxeles
36    pub fn pixels_width(&self) -> i32 {
37        match self {
38            PaperSize::Mm40 => 256,
39            PaperSize::Mm44 => 288,
40            PaperSize::Mm58 => 384,
41            PaperSize::Mm72 => 512,
42            PaperSize::Mm80 => 576,
43            PaperSize::Mm104 => 752,
44        }
45    }
46
47    // Método estático (Factory)
48    pub fn from_string(size: &str) -> Self {
49        match size.to_lowercase().as_str() {
50            "40mm" | "40" => PaperSize::Mm40,
51            "44mm" | "44" => PaperSize::Mm44,
52            "58mm" | "58" | "small" => PaperSize::Mm58,
53            "72mm" | "72" => PaperSize::Mm72,
54            "80mm" | "80" | "normal" | "default" => PaperSize::Mm80,
55            "104mm" | "104" | "wide" => PaperSize::Mm104,
56            _ => PaperSize::Mm80,
57        }
58    }
59}