1 个不稳定版本
0.1.0 | 2024年3月14日 |
---|
#162 在 Windows API
140KB
3.5K SLoC
包含 (ZIP文件, 70KB) test_data/test_document.xps
winprint
使用Windows API将打印机设备打印的crate。
关于安全性
此crate与多个Windows API函数交互,需要使用不安全代码块。尽管如此,此crate设计用于安全使用。如果您发现任何会破坏安全性或可靠性的情况,请将其作为错误报告。
许可证
根据BSD 3条款许可
贡献
除非您明确声明,否则您提交给此crate的任何贡献,均应按BSD 3条款许可,不附加任何额外条款或条件。
lib.rs
:
使用Windows API将打印机设备打印的crate。
示例
打印文件
以下是一个简单示例,展示如何打印文件
- 筛选您要使用的设备。
- 将打印机设备包装成打印机。
- 将文件发送到打印机。
首先,通过 PrinterDevice::all()
获取所有打印机设备,并筛选您要使用的设备。
use winprint::printer::PrinterDevice;
fn get_my_device() -> PrinterDevice {
let printers = PrinterDevice::all().expect("Failed to get printers");
printers
.into_iter()
.find(|x| x.name() == "My Printer")
.expect("My Printer not found")
}
然后,创建一个打印机并将文件发送到它。目前有两种类型的打印机可用
printer::XpsPrinter
:用于打印XPS文件。printer::PdfiumPrinter
:通过PDFium库打印PDF文件。(必须启用pdfium
功能)
注意:这里的Printer
概念是特定类型数据的打印设备包装器,并不代表打印机设备。
use std::path::Path;
use winprint::printer::FilePrinter;
use winprint::printer::PrinterDevice;
use winprint::printer::XpsPrinter;
let my_device = get_my_device();
let xps = XpsPrinter::new(my_device);
let path = Path::new("path/to/test/document.xps");
xps.print(path, Default::default()).unwrap();
指定打印首选项
打印票是一组可以用来指定打印首选项的选项集,可以用来设置媒体大小、方向等选项。如果您想指定打印首选项,可以使用打印票。
请参阅打印架构规范以获取技术细节。
以下是一个如何使用该库中的打印票示例。
- 从打印机设备获取打印功能。
- 过滤您想要使用的功能。
- 为您的打印机设备创建一个打印票构建器。
- 将功能合并到您要构建的打印票中。
- 构建打印票。
- 使用打印票打印文件。
use std::path::Path;
use winprint::printer::FilePrinter;
use winprint::printer::PrinterDevice;
use winprint::printer::XpsPrinter;
use winprint::ticket::PredefinedMediaName;
use winprint::ticket::PrintCapabilities;
use winprint::ticket::PrintTicket;
use winprint::ticket::PrintTicketBuilder;
let my_device = get_my_device();
let capabilities = PrintCapabilities::fetch(&my_device).unwrap();
let a4_media = capabilities
.page_media_size()
.find(|x| x.as_predefined_name() == Some(PredefinedMediaName::ISOA4))
.unwrap();
let mut builder = PrintTicketBuilder::new(&my_device).unwrap();
builder.merge(a4_media).unwrap();
let ticket = builder.build().unwrap();
let xps = XpsPrinter::new(my_device);
let path = Path::new("path/to/test/document.xps");
xps.print(path, ticket).unwrap();
功能
pdfium
:启用PDFium对打印PDF文件的支持。
依赖项
~131MB
~2M SLoC