tauri_plugin_printer_v2/
lib.rs1mod declare;
2mod fsys;
3mod windows;
4
5use tauri::{
6 plugin::{Builder, TauriPlugin},
7 Manager, Runtime,
8};
9
10use std::env;
11
12pub use crate::models::*;
13use crate::declare::PrintHtmlOptions;
14
15#[cfg(desktop)]
16mod desktop;
17#[cfg(mobile)]
18mod mobile;
19
20mod error;
21mod models;
22
23pub use error::{Error, Result};
24
25#[cfg(desktop)]
26use desktop::Printer;
27#[cfg(mobile)]
28use mobile::Printer;
29
30#[tauri::command]
34async fn ping<R: Runtime>(app: tauri::AppHandle<R>, payload: PingRequest) -> Result<PingResponse> {
35 app.printer().ping(payload)
36}
37
38#[tauri::command(rename_all = "snake_case")]
42async fn print_html<R: Runtime>(app: tauri::AppHandle<R>, options: PrintHtmlOptions) -> Result<String> {
43 println!("print_html: {:?}", options.print_settings);
44 app.printer().print_html(options)
45}
46
47
48pub trait PrinterExt<R: Runtime> {
50 fn printer(&self) -> &Printer<R>;
51}
52
53impl<R: Runtime, T: Manager<R>> crate::PrinterExt<R> for T {
54 fn printer(&self) -> &Printer<R> {
55 self.state::<Printer<R>>().inner()
56 }
57}
58
59#[tauri::command(rename_all = "snake_case")]
66fn create_temp_file(buffer_data: String, filename: String) -> String {
68 let dir = env::temp_dir();
69 let result = fsys::create_file_from_base64(
70 buffer_data.as_str(),
71 format!("{}{}", dir.display(), filename).as_str(),
72 );
73 if result.is_ok() {
74 return format!("{}{}", dir.display(), filename);
75 }
76 return "".to_owned();
77}
78
79#[tauri::command(rename_all = "snake_case")]
85fn remove_temp_file(filename: String) -> bool {
87 let dir = env::temp_dir();
88 let result = fsys::remove_file(format!("{}{}", dir.display(), filename).as_str());
89 if result.is_ok() {
90 return true;
91 }
92 return false;
93}
94
95#[tauri::command]
99fn get_printers() -> String {
101 if cfg!(windows) {
102 return windows::get_printers();
103 }
104
105 return "Unsupported OS".to_string();
106}
107
108#[tauri::command(rename_all = "snake_case")]
114fn get_printers_by_name(printername: String) -> String {
116 println!("获取打印机列表: {}", printername);
117 if cfg!(windows) {
118 return windows::get_printers_by_name(printername);
119 }
120
121 return "Unsupported OS".to_string();
122}
123
124#[tauri::command(rename_all = "snake_case")]
133fn print_pdf(
135 id: String,
136 path: String,
137 printer_setting: String,
138 remove_after_print: bool,
139) -> String {
140
141 if cfg!(windows) {
142 let options = declare::PrintOptions {
143 id,
144 path,
145 print_setting: printer_setting,
146 remove_after_print: remove_after_print,
147 };
148 return windows::print_pdf(options);
149 }
150
151 return "Unsupported OS".to_string();
152}
153
154#[tauri::command(rename_all = "snake_case")]
155fn get_jobs(printername: String) -> String {
157 if cfg!(windows) {
158 return windows::get_jobs(printername);
159 }
160 return "Unsupported OS".to_string();
161}
162
163#[tauri::command(rename_all = "snake_case")]
170fn get_jobs_by_id(printername: String, jobid: String) -> String {
172 if cfg!(windows) {
173 return windows::get_jobs_by_id(printername, jobid);
174 }
175 return "Unsupported OS".to_string();
176}
177
178#[tauri::command(rename_all = "snake_case")]
185fn resume_job(printername: String, jobid: String) -> String {
187 if cfg!(windows) {
188 return windows::resume_job(printername, jobid);
189 }
190 return "Unsupported OS".to_string();
191}
192
193#[tauri::command(rename_all = "snake_case")]
200fn restart_job(printername: String, jobid: String) -> String {
202 if cfg!(windows) {
203 return windows::restart_job(printername, jobid);
204 }
205 return "Unsupported OS".to_string();
206}
207
208#[tauri::command(rename_all = "snake_case")]
215fn pause_job(printername: String, jobid: String) -> String {
217 if cfg!(windows) {
218 return windows::pause_job(printername, jobid);
219 }
220 return "Unsupported OS".to_string();
221}
222
223#[tauri::command(rename_all = "snake_case")]
230fn remove_job(printername: String, jobid: String) -> String {
232 if cfg!(windows) {
233 return windows::remove_job(printername, jobid);
234 }
235 return "Unsupported OS".to_string();
236}
237
238pub fn custom_get_printers_by_name(printername: String) -> String {
244 if cfg!(windows) {
245 return windows::get_printers_by_name(printername);
246 }
247
248 return "Unsupported OS".to_string();
249}
250
251pub fn custom_print_pdf(
260 id: String,
261 path: String,
262 printer_setting: String,
263 remove_after_print: bool,
264) -> String {
265 if cfg!(windows) {
266 let options = declare::PrintOptions {
267 id,
268 path,
269 print_setting: printer_setting,
270 remove_after_print: remove_after_print,
271 };
272 return windows::print_pdf(options);
273 }
274
275 return "Unsupported OS".to_string();
276}
277
278pub fn init<R: Runtime>() -> TauriPlugin<R> {
284 if cfg!(windows) {
285 windows::init_windows();
286 }
287 Builder::new("printer")
288 .invoke_handler(tauri::generate_handler![
289 ping,
290 print_html,
291 create_temp_file,
292 remove_temp_file,
293 get_printers,
294 get_printers_by_name,
295 print_pdf,
296 get_jobs,
297 get_jobs_by_id,
298 resume_job,
299 restart_job,
300 pause_job,
301 remove_job
302 ])
303 .setup(|app, api| {
304 #[cfg(mobile)]
305 let printer = mobile::init(app, api)?;
306 #[cfg(desktop)]
307 let printer = desktop::init(app, api)?;
308 app.manage(printer);
309 Ok(())
310 })
311 .build()
312}