IppAttributeValue は、Internet Printing Protocol (IPP) 仕様で定義された プリンター属性値そのものを表すクラスです。UWP の IppPrintDevice API と組み合わせて、プリンター/ジョブの属性を取得・設定するときに必須です。
この記事ではこのIppAttributeValueについて解説します!
IppAttributeValueとは?
IppAttributeValue は、IPP 属性の 値を表すオブジェクトです。
例えば:
- プリンター名(文字列)
- サポートしている解像度(配列)
- ジョブの色モード(キーワード)
- 印刷可能幅(整数)
- サポート言語(文字列)
などが、すべて IPP 属性値として取得・設定されます。
UWP の GetPrinterAttributes / GetJobAttributes などは、IPP 属性名(string)と IppAttributeValue の ペアで値を返します。
属性値の型(Kind プロパティ)
public IppAttributeValueKind Kind { get; }
Kind プロパティは、この値が どのデータ型なのか を表します。
主な IppAttributeValueKind(値の種類):
| Kind | 意味 |
|---|---|
| Integer | 整数値 |
| Boolean | 真偽値 |
| Keyword | 文字列キーワード |
| Resolution | 解像度 |
| RangeOfInteger | 整数の範囲 |
| TextWithLanguage/TextWithoutLanguage | 多言語テキスト |
| Uri | URI |
| MimeMediaType | MIME 形式(例: image/pwg-raster) |
| Collection | 属性の集合 |
| ほか多数 | IPP 仕様でサポートされる全タイプ |
この種類によって、値の 取り出し方が変わります。
IppAttributeValue の生成(CreateXXX 系メソッド)
IppAttributeValue は 静的メソッドで生成します。これはプリンターに属性を設定する際に使うことが多いです。
基本的なファクトリー メソッド:
| メソッド | 生成する値の種類 |
|---|---|
| CreateBoolean(bool val) | Boolean 値 |
| CreateInteger(int val) | 整数値 |
| CreateKeyword(string key) | キーワード |
| CreateMimeMedia(string mime) | MIME Media Type |
| CreateResolution(IppResolution res) | 解像度 |
| CreateRangeOfInteger(IppIntegerRange range) | 整数レンジ |
| CreateTextWithoutLanguage(string text) | 単純テキスト |
| CreateTextWithLanguage(IppTextWithLanguage t) | 言語付きテキスト |
| CreateUri(Uri uri) | URI |
| CreateCollection(…) | 属性値コレクション |
属性値を作る例
// 「用紙サイズ」を文字列キーワードで表す
var paperSize = IppAttributeValue.CreateKeyword("na_letter_8.5x11in");
// 「解像度」を指定
var resolution = IppAttributeValue.CreateResolution(
new IppResolution(600, 600, IppResolutionUnit.DotsPerInch));
// 「色指定」を Boolean で表す
var isColor = IppAttributeValue.CreateBoolean(true);属性値の読み取り(GetXXX メソッド)
IPP 属性値は、読み取り時に GetXXXArray() 系のメソッドで取り出すことができます。
// integer 配列として取得
var intVals = attrValue.GetIntegerArray();
// keyword 配列として取得
var keywords = attrValue.GetKeywordArray();
// textWithLanguage の配列
var text = attrValue.GetTextWithLanguageArray();実践例:プリンター属性を使ってみる
①プリンターから属性取得
var attrs = printer.GetPrinterAttributes(new[] {
"media-ready", "operations-supported", "printer-resolution-supported"
});
foreach (var pair in attrs)
{
string name = pair.Key;
IppAttributeValue val = pair.Value;
switch (val.Kind)
{
case IppAttributeValueKind.Keyword:
foreach (var kw in val.GetKeywordArray())
Console.WriteLine($"{name}: {kw}");
break;
case IppAttributeValueKind.Integer:
foreach (var i in val.GetIntegerArray())
Console.WriteLine($"{name}: {i}");
break;
case IppAttributeValueKind.Resolution:
foreach (var r in val.GetResolutionArray())
Console.WriteLine($"{name}: {r}");
break;
}
}このコードは、media-ready 等の属性の値を種類ごとに取り出して表示します。
②プリンターへ属性を設定
var settings = new Dictionary<string, IppAttributeValue>();
// 解像度設定
settings["printer-resolution-default"] =
IppAttributeValue.CreateResolution(
new IppResolution(1200,1200,IppResolutionUnit.DotsPerInch));
// カラー印刷を true に
settings["print-color-mode-default"] =
IppAttributeValue.CreateKeyword("color");
var result = printer.SetPrinterAttributes(settings);
// 結果の成功・失敗チェック(省略)設定値を作り、SetPrinterAttributes に渡すのが典型的なパターンです。
まとめ
・IppAttributeValue は IPP 属性値を表す核となるクラスです。
・種類(Kind)によって値の扱い方が変わります。
・属性の取得・設定で欠かせないので、UWP で IPP プリンターを扱う際は 理解が必須です。


コメント