#printing #lp #macos #cups #document #windows

xhs-electronic-print

A cross-platform printing library for Windows and macOS

3 releases

0.1.2 Sep 24, 2024
0.1.1 Sep 24, 2024
0.1.0 Sep 23, 2024

#568 in Development tools

MIT/Apache

1.5MB
175 lines

xhs-electronic-print 使用文档

xhs-electronic-print 是一个用于在不同操作系统上打印的 Rust 包,支持 Windows7 Windows8 Window10 和 macOS 平台。本文档将指导您如何集成和使用该库。

技术栈: Tauri VUE WEBSOKCET WIN7 WIN10 MAC Print 打印协议(支持 mac,win7 ,window10)

电子面单端

发送打印/预览数据协议(print) 菜鸟打印协议: { "cmd":"print", "requestID":"123456789", "version":"1.0", "task":{ "taskID":"1", "preview":false, "printer":"", "previewType":"pdf", "firstDocumentNumber":10, "totalDocumentCount":100, "documents":[ { "documentID":"10000001", "contents":[ { "encryptedData":"AES:DTqwa4Jcu6uPlUpnjBJ0PXI59KFw16QDENY6G8e27nuu1N9ovmjmqKkxZVFO/nxpI/qUQHUcR6AA8u3kxiDIn39m3Cote2og2AM8EHqigfUgkFTtRL8GzmAUGLJ1WWfeGqexNXXXAQ6r4ykSpBoHn7Wk4mZRG3Zw1skMw/doRGHBEt6WArUx0HKb9Yd3XdZIyvB5RejvtC7mHKt+J0YEsVPmPrAsxE3gZaWeJejtoHBLk1kwBADsG7EVbawFchHeMbFuhPhjNKBZ9tYp+f+UuAPetrbqJ2xwlaf3FT7kgqc90C9QYYzhhdjy973ygmApEE4kLWQjYrZyc7Gh66iOjMOZFPlSu2UkL1KsLEUWR1WVUD7DGyqDjnxrWDhsp03cT2F5x2QqgMZiloBfRgA6NiVQaLWNfCaNhhAJLp81zXS7EAyYbJ/EafP6P2eFT9GWYjfkQ79j40DIxVinVR8SnhsBmdmT28FGTNldI6qqUIn2rOoyIMbGlv9qan5rmibmIqVDKABauLoSVYK9ovZhfSSLAm6Tl8T9ApLETwwQvtSjssf+4jyW1f2+D0p/foBc++4HEUGXgbgaJJNaEDRgyV1UxD3IqwBeV+4Q58uRXXodIn6zujRHOgC9slJjwfkPzATNZZnSXexKPHtXqBmLeAv2Gkb9XkFm/d+9zwE6zKHH2gD8zDS3qgbsvaygc08Xh8PvUnjbxXXlYdFMk9Yk6x8VLNPSSO8vyF5XqN1CqrWwuf5jtNg20j9SRAYxMAHuYHxAiyxiUQmKuDnYioaVTfp5w5bmN1PvStt3TqVB4OU15pzXYOSsb57JyLNRYLX1r7DE7Vt1SUILPl/1HXApGP9kRwpgvYP0bWAX9uLkohlWfWpBrPTAqGCxfuTN4ugM1qz1hoeXU6mJgMZn/dQD3CZ0b22LkZPGFVK88Wg6QS8b9UJmOad9yXyo/jMDpRp2gmo+2FBAsq53AY4SiQ2DGK+Qmx6+i0+LSZGgcUknzkAZ04dX3cws1mWiknDHiEu7kzkOrHTQGTw60j0iOYDZJhWzAJNqUw/vLfyh7K4u6MoH1i4Pu4fvyaMDCtOQ0dfCSYLmnilQT23l98nzM+X+T3rVgH5l6tydAIRnE5RKPlyn0ACEIJ+WXcUzpZCioopDAGeQjS0sjbokeNLglQ8PsdTR+it2wtpmDOh32h2TrDQjOrjB8B1GqxSYn90vbq7ZjGIRgF5SQY2UXe20miPdoykLc0qPSXGF5BGZ9cUvNdNIE3AltL6uPI7hLkdT11ndCW7B+U/JpOVU6vJBeWqLOzyY6av0P+kPsTRKW0mtJJ6hG01q7t1uvX6wZg2jaIEk8pAFmh5UCEcbkGwhTwMz3TqQ3nmhL/biq9q7acLMA3Ag1Yi6DE0nlfEZYEV9H8DOU8eHfcZqyuMzhC1kZXMEJyIi11b22MK4B5oO9Y14lE8nEIVSUHu11soKCqDfpJbssin/WcUUFel3/x8WmP3SwLWXI1VzfRvHSb5F+0sBFrn5tMn7RbFooMQHLla9x01vmwswOosKdFDdWGBvW/gLjUamquzCC8ogET7KNYknSbeWCPYEitgKw8Y1oqZjtj+1QK+y1opo5TZZuh+jVVI/+6vgqH94v6bzZfTDTNW7B+aasaJnWziVGLO3dJSWq4vQcTCAU4uu34bJ0eV1vE0MMgUtzesGQ7KTGT9ftR0ilHSyK3Ec55x5Nq3+1KDfgWR0PBNOUH2ls1s9dDaejUVDfIm+s4JNbKTTYz66zmxupgqu11enr6h3RyaEI/cfmm6y", "signature":"MD:DWZH1DbnDNfH6muKGiwJ/A==", "templateURL":"http://cloudprint.cainiao.com/template/standard/644703", "ver":"waybill_print_xiaohongshu_secret" }, { "data":{ "item":[ "iphone14 红色 256G/1", "iphone14 黑色 256G/1" ], "order":[ "P680942792256239451" ], "buyerMemo":[ "买家:打包注意点,尽快送达" ], "sellerMemo":[ "卖家:请及时签收" ] }, "templateURL":"https://cloudprint.cainiao.com/template/standard/629505/24" } ] } ] } }

小红书打印机协议:【本期不做加密】 { "cmd":"print", "requestID":"123456789", "version":"1.0", "task":{ "taskID":"1", "preview":false, "printer":"HPRT_N41BT", "previewType":"pdf", "firstDocumentNumber":10, "totalDocumentCount":100, "documents":[ { "documentID":"10000001", "contents":[ { "encryptedData":"{"data":{"text":{"date":"2023/11/20","time":"09:30:45","count":"第1/2件","packageText":"电子产品","transferText":"深圳中转包"},"receiver":{"name":"李*","phone":"13912345678","address":"广东省深圳市南山区科技园路1号"},"senderInfo":{"name":"电子商城","phone":"13598765432","address":"江苏省南京市玄武区中山路200号"},"packageId":"LP00408358929126"}}", "signature":"MD:DWZH1DbnDNfH6muKGiwJ/A==", "templateURL":"http://cloudprint.sit.xiaohongshu.com/template/standard/645928/7", "ver":"waybill_print_xiaohongshu_secret" }, { "data":{ "item":[ "iphone14 红色 256G/1", "iphone14 黑色 256G/1" ], "order":[ "P680942792256239451" ], "buyerMemo":[ "买家:打包注意点,尽快送达" ], "sellerMemo":[ "卖家:请及时签收" ] }, "templateURL":"https://cloudprint.sit.xiaohongshu.com/template/standard/645919/1" } ] } ] } }

MAC测试结果 WIN7测试结果 WIN10测试结果 出参 开启 preview的情况: {"cmd":"print","status":"success","previewURL":"/var/folders/f4/ldmpclhs71n9bsnzyqtmsp740000gn/T/25950796_1726837889660.pdf"}

不开启preview的情况:【成功 下发打印任务】 {"cmd":"print","requestID":"123456789","taskID":"1","status":"success","previewURL":"","msg":""}

失败情况:【失败 没有传递打印机名称】 {"cmd":"print","requestID":"123456789","taskID":"1","status":"failed","previewURL":"","msg":"请选择打印机"}

菜鸟出参 { "cmd":"print", "requestID":"123458976", "taskID":"1", "status":"success", //如果是打印,表示打印任务提交成功,如果是预览,表示预览PDF文件生成成功 "previewURL":"http://127.0.0.1/previewxxx.pdf", //如果是预览,会返回这个属性,表示预览PDF文件的URL地址,如果是打印命令,不返回此属性 //如果是预览并且预览模式是previewType:image,会返回这个属性,表示预览图片的URL地址,如果是打印命令,不返回此属性 "previewImage": [ "http://127.0.0.1/preview1.jpg", "http://127.0.0.1/preview2.jpg", "http://127.0.0.1/preview3.jpg" ] }

使用手册

安装 首先,在您的项目目录中的 Cargo.toml 文件中添加依赖项:

toml 复制代码 [dependencies] xhs-electronic-print = "0.1.0" # 请更换为实际版本号 使用方法 首先,在您的主模块中引入必要的模块:

rust 复制代码 use xhs_electronic_print::print; 打印功能 要执行打印操作,请使用 print 函数。该函数会根据操作系统的不同调用相应的打印逻辑。

rust 复制代码 fn main() { let id = "document_id".to_string(); let path = "/path/to/document.pdf".to_string(); let printer_setting = "high_quality".to_string(); let remove_after_print = true; // 打印后是否删除文件

let result = print(id, path, printer_setting, remove_after_print);
println!("{}", result);

} 参数说明 id: 打印任务的唯一标识符,用于跟踪打印状态。 path: 要打印的文件的路径。 printer_setting: 打印设置,根据具体需求进行自定义。 remove_after_print: 布尔值,指示在打印完成后是否删除文件。 返回值 该函数返回一个 String,表明打印操作的结果:

"Windows-打印成功" 或 "MacOS-打印成功" 表示打印成功。 "Windows-打印失败: error_message" 或 "MacOS-打印失败: error_message" 表示打印失败,并返回具体的错误信息。 日志 库使用 log crate 进行日志记录。在使用之前,请确保在程序中初始化了日志记录器。例如:

rust 复制代码 fn main() { env_logger::init(); // 其他代码 } 平台支持 Windows: 通过 windows 模块实现具体打印逻辑。 macOS: 通过 macos 模块实现具体打印逻辑。 自定义 如果您需要修改打印逻辑,可以在 declare 模块中定义 PrintOptions 结构体,并在 windows 和 macos 模块中实现打印具体操作。

示例 完整的一个示例代码如下所示:

rust 复制代码 use xhs_electronic_print::print;

fn main() { env_logger::init(); // 初始化日志

let id = "document123".to_string();
let path = "C:\\Users\\Username\\Documents\\file.pdf".to_string();
let printer_setting = "default".to_string();
let remove_after_print = false;

let result = print(id, path, printer_setting, remove_after_print);
println!("{}", result);

} 结论 xhs-electronic-print 包抽象简化了打印操作,使得开发者可以轻松地在不同的平台上进行打印。请根据您的需要调整打印设置和文件路径。希望这份文档能帮助您充分利用这个库!

11:00:24 请给我一份 mackdown格式的使用文档 Certainly! Here's the markdown version of the usage documentation:

markdown 复制代码

xhs-electronic-print 使用文档

xhs-electronic-print 是一个用于在不同操作系统上打印的 Rust 包,支持 Windows 和 macOS 平台。本文档将指导您如何集成和使用该库。

安装

首先,在您的项目目录中的 Cargo.toml 文件中添加依赖项:

[dependencies]
xhs-electronic-print = "0.1.0"  # 请更换为实际版本号
使用方法
首先,在您的主模块中引入必要的模块:

rust
复制代码
use xhs_electronic_print::print;
打印功能
要执行打印操作,请使用 print 函数。该函数会根据操作系统的不同调用相应的打印逻辑。

rust
复制代码
fn main() {
    let id = "document_id".to_string();
    let path = "/path/to/document.pdf".to_string();
    let printer_setting = "high_quality".to_string();
    let remove_after_print = true; // 打印后是否删除文件

    let result = print(id, path, printer_setting, remove_after_print);
    println!("{}", result);
}
参数说明
id: 打印任务的唯一标识符,用于跟踪打印状态。
path: 要打印的文件的路径。
printer_setting: 打印设置,根据具体需求进行自定义。
remove_after_print: 布尔值,指示在打印完成后是否删除文件。
返回值
该函数返回一个 String,表明打印操作的结果:

"Windows-打印成功""MacOS-打印成功" 表示打印成功。
"Windows-打印失败: error_message""MacOS-打印失败: error_message" 表示打印失败,并返回具体的错误信息。
日志
库使用 log crate 进行日志记录。在使用之前,请确保在程序中初始化了日志记录器。例如:

rust
复制代码
fn main() {
    env_logger::init();
    // 其他代码
}
平台支持
Windows: 通过 windows 模块实现具体打印逻辑。
macOS: 通过 macos 模块实现具体打印逻辑。
自定义
如果您需要修改打印逻辑,可以在 declare 模块中定义 PrintOptions 结构体,并在 windows 和 macos 模块中实现打印具体操作。

示例
完整的一个示例代码如下所示:

rust
复制代码
use xhs_electronic_print::print;

fn main() {
    env_logger::init(); // 初始化日志

    let id = "document123".to_string();
    let path = "C:\\Users\\Username\\Documents\\file.pdf".to_string();
    let printer_setting = "default".to_string();
    let remove_after_print = false;

    let result = print(id, path, printer_setting, remove_after_print);
    println!("{}", result);
}

Dependencies

~24–67MB
~1M SLoC