【C#】IppAttributeValue クラス解説|IPP属性値の種類・生成方法・実装例

当ページのリンクには広告が含まれています。
IppAttributeValue

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多言語テキスト
UriURI
MimeMediaTypeMIME 形式(例: 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 プリンターを扱う際は 理解が必須です。

tenjiprogramming
20代エンジニア。
メインで使用している言語はJava/JavaScript/TyoeScript/react/C言語
AWSなどクラウド周りも経験あり。
楽しいをモットーに記事を書いています。
Noteではサンプルコード付きのゲームの作り方など様々な内容を公開しています。
そちらも是非ご覧ください!
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次