システムにインストールされているプリンターの一覧を Rust 側で取得します。printers クレートがシンプルで便利です。
1. 依存関係の追加
src-tauri ディレクトリに移動して、以下のコマンドを実行します。
cargo add printers
※ printers クレートは一部の環境でメンテナンスが古い場合があるため、動作しない場合はシステムコマンド(lpstat や PowerShell)を実行する方法(rust-024 参照)への切り替えも検討してください。
2. 実装コード
#[derive(serde::Serialize)]
struct PrinterInfo {
name: String,
system_name: String, // 一意識別子として使用可能
is_default: bool,
// uri, driver_name なども取得可能
}
#[tauri::command]
fn list_printers() -> Result<Vec<PrinterInfo>, String> {
let printers = printers::get_printers();
let result = printers.into_iter().map(|p| {
PrinterInfo {
name: p.name,
system_name: p.system_name,
is_default: p.is_default,
}
}).collect();
Ok(result)
}
3. 実装(フロントエンド側)
import { invoke } from '@tauri-apps/api/core';
interface PrinterInfo {
name: string;
system_name: string; // 一意識別子として使用可能
is_default: boolean;
}
async function getPrinters() {
const printers = await invoke<PrinterInfo[]>('list_printers');
console.log('プリンター一覧:', printers);
return printers;
}
4. 注意点
- macOS (CUPS) や Windows のスプーラサービスが動作している必要があります。
- Webview (JavaScript) から直接プリンター一覧を取得する標準 API は存在しません(セキュリティのため)。必ず Rust 経由で行う必要があります。