|
|
|
@ -1,39 +1,10 @@ |
|
|
|
// use printers::{get_default_printer, get_printers};
|
|
|
|
|
|
|
|
// use printers::common::base::job::PrinterJobOptions;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// #[tauri::command]
|
|
|
|
|
|
|
|
// fn get_all_printers(){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// let printers=get_printers();
|
|
|
|
|
|
|
|
// for printer in printers {
|
|
|
|
|
|
|
|
// println!("{:?}", printer);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// #[tauri::command]
|
|
|
|
|
|
|
|
// fn print_document(document_path: String) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// println!("Printing document: {}", document_path);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// let default_printer = get_default_printer();
|
|
|
|
|
|
|
|
// if let Some(ref printer) = default_printer {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// println!("Default Printer: {:?}", printer);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// let job_id = default_printer.unwrap().print_file(document_path.as_str(), PrinterJobOptions::none());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// println!("No default printer found.");
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
use std::collections::HashMap; |
|
|
|
use std::collections::HashMap; |
|
|
|
use std::path::Path; |
|
|
|
use std::path::Path; |
|
|
|
|
|
|
|
|
|
|
|
use winprint::printer::{FilePrinter, ImagePrinter, PdfiumPrinter, PrinterDevice}; |
|
|
|
use winprint::printer::{FilePrinter, ImagePrinter, PdfiumPrinter, PrinterDevice}; |
|
|
|
use winprint::ticket::{ |
|
|
|
use winprint::ticket::{ |
|
|
|
FeatureOptionPackWithPredefined, PredefinedMediaName, PrintCapabilities, PrintTicket, |
|
|
|
FeatureOptionPackWithPredefined, PredefinedMediaName, PrintCapabilities, PrintTicket, |
|
|
|
PrintTicketBuilder, |
|
|
|
PrintTicketBuilder,PredefinedPageOutputColor |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
#[tauri::command] |
|
|
|
#[tauri::command] |
|
|
|
@ -92,7 +63,26 @@ fn get_printer_capabilities(device_name: String) -> HashMap<String, Vec<String>> |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
fn default_ticket() -> PrintTicket { |
|
|
|
|
|
|
|
// let mut ticket = PrintTicket::new();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let xml=r#"<?xml version="1.0" encoding="UTF-8"?> |
|
|
|
|
|
|
|
<psf:PrintTicket version="1" |
|
|
|
|
|
|
|
xmlns:psf="http://schemas.microsoft.com/windows/2003/08/printing/printschemaframework" |
|
|
|
|
|
|
|
xmlns:psk="http://schemas.microsoft.com/windows/2003/08/printing/printschemakeywords"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<psf:Feature name="psk:PageScaling"> |
|
|
|
|
|
|
|
<psf:Option name="psk:FitToPage" /> |
|
|
|
|
|
|
|
</psf:Feature> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<psf:Feature name="psk:PageOutputQuality"> |
|
|
|
|
|
|
|
<psf:Option name="psk:High" /> |
|
|
|
|
|
|
|
</psf:Feature> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</psf:PrintTicket>"#; |
|
|
|
|
|
|
|
let ticket = PrintTicket::from_xml(xml); |
|
|
|
|
|
|
|
ticket |
|
|
|
|
|
|
|
} |
|
|
|
#[tauri::command] |
|
|
|
#[tauri::command] |
|
|
|
fn print_document(device_name: String, document_path: String, dpi: String, color: String, size: String) { |
|
|
|
fn print_document(device_name: String, document_path: String, dpi: String, color: String, size: String) { |
|
|
|
println!("Printing document: {}, {}, {}, {}", document_path, size, dpi, color); |
|
|
|
println!("Printing document: {}, {}, {}, {}", document_path, size, dpi, color); |
|
|
|
@ -107,16 +97,47 @@ fn print_document(device_name: String, document_path: String, dpi: String, color |
|
|
|
|
|
|
|
|
|
|
|
let capabilities = PrintCapabilities::fetch(&my_device).unwrap(); |
|
|
|
let capabilities = PrintCapabilities::fetch(&my_device).unwrap(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// size
|
|
|
|
let parsed_size = size.parse::<PredefinedMediaName>() |
|
|
|
let parsed_size = size.parse::<PredefinedMediaName>() |
|
|
|
.expect("Invalid media size name"); |
|
|
|
.expect("Invalid media size name"); |
|
|
|
|
|
|
|
|
|
|
|
let a6_media = capabilities |
|
|
|
let a6_media = capabilities |
|
|
|
.page_media_sizes() |
|
|
|
.page_media_sizes() |
|
|
|
.find(|x| x.as_predefined_name() == Some(parsed_size)) |
|
|
|
.find(|x| x.as_predefined_name() == Some(parsed_size)) |
|
|
|
.expect("Media size not supported by printer"); |
|
|
|
.expect("Media size not supported by printer"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// dpi
|
|
|
|
|
|
|
|
let parsed_dpi = dpi |
|
|
|
|
|
|
|
.split('x') |
|
|
|
|
|
|
|
.next() |
|
|
|
|
|
|
|
.and_then(|v| v.parse::<u32>().ok()) |
|
|
|
|
|
|
|
.expect("Invalid DPI format"); |
|
|
|
|
|
|
|
let supported_dpi = capabilities |
|
|
|
|
|
|
|
.page_resolutions() |
|
|
|
|
|
|
|
.find(|x| x.dpi() == (parsed_dpi, parsed_dpi)) |
|
|
|
|
|
|
|
.expect("DPI not supported by printer"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// color
|
|
|
|
|
|
|
|
let parsed_color =capabilities.page_output_colors() |
|
|
|
|
|
|
|
.find(|x| x.as_predefined_name() == Some(color.parse::<PredefinedPageOutputColor>().unwrap())) |
|
|
|
|
|
|
|
.map(|x| x.as_predefined_name().unwrap()) |
|
|
|
|
|
|
|
.expect("Invalid color name"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let supported_color = capabilities |
|
|
|
|
|
|
|
.page_output_colors() |
|
|
|
|
|
|
|
.find(|x| x.as_predefined_name() == Some(parsed_color)) |
|
|
|
|
|
|
|
.expect("Color not supported by printer"); |
|
|
|
|
|
|
|
|
|
|
|
let mut builder = PrintTicketBuilder::new(&my_device).unwrap(); |
|
|
|
let mut builder = PrintTicketBuilder::new(&my_device).unwrap(); |
|
|
|
builder.merge(a6_media).unwrap(); |
|
|
|
builder.merge(a6_media).unwrap(); |
|
|
|
|
|
|
|
builder.merge(supported_dpi).unwrap(); |
|
|
|
|
|
|
|
builder.merge(supported_color).unwrap(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let default_ticket = default_ticket(); |
|
|
|
|
|
|
|
if let Err(e) = builder.merge(default_ticket) { |
|
|
|
|
|
|
|
println!("Failed to merge default ticket: {:?}", e); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let ticket = builder.build().unwrap(); |
|
|
|
let ticket = builder.build().unwrap(); |
|
|
|
|
|
|
|
|
|
|
|
@ -129,6 +150,7 @@ fn print_document(device_name: String, document_path: String, dpi: String, color |
|
|
|
let printer=ImagePrinter::new(my_device); |
|
|
|
let printer=ImagePrinter::new(my_device); |
|
|
|
printer.print(path, ticket).unwrap(); |
|
|
|
printer.print(path, ticket).unwrap(); |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// let theprinter = PdfiumPrinter::new(my_device);
|
|
|
|
// let theprinter = PdfiumPrinter::new(my_device);
|
|
|
|
// let theprinter = ImagePrinter::new(my_device);
|
|
|
|
// let theprinter = ImagePrinter::new(my_device);
|
|
|
|
// theprinter.print(path, ticket).unwrap();
|
|
|
|
// theprinter.print(path, ticket).unwrap();
|
|
|
|
|