- PR -

javax.printにて、プリンタの属性を取得したい

1
投稿者投稿内容
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2007-02-05 15:01
いつもお世話になっております。

jdk 1.5.0_08を使用していて、プリンタの給紙トレイの一覧を取得したいのです。

例えば、javax.print.ServiceUI#printDialog()で表示される
ダイアログの「ページ設定」タブで参照できる、
「ソース」に表示されるものの一覧です。
ダイアログを表示するコードは、一番最後に貼り付けておきます。

なんとか、手元で調べて、有意な結果を取得できるようになった
メソッドといえば
PrintService#getSupportedAttributeCategories()
PrintService#getAttributes()
くらいで、
PrintService#getAttribute(Class<T> category)では、
「んな引数はしらん」と蹴られる始末。orz
いや、私なりに調べているところですけどね。

定型書式の設定として給紙トレイを保持しておけるようにして、
さらに、それの編集機能を作成したいのですが、
ハードコードはしたくないし、ダイアログに表示される以上は、
取得できる方法があるに違いないと思って探しているのですが、
今のところ、煮詰まってしまっています。

お手数をおかけしますが、手がかりなどご存じの方がいらっしゃいましたら、
ご教示頂けますよう、よろしくお願いします。
コード:
package membership.print;

import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.ServiceUI;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.OrientationRequested;

public class PrintSample {

	public static void main(String[] args) {
		PrintService[] services = PrintServiceLookup.lookupPrintServices(
				DocFlavor.INPUT_STREAM.JPEG, null);
		PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
		attributes.add(OrientationRequested.PORTRAIT);
		attributes.add(new Copies(1));
		attributes.add(MediaSizeName.ISO_A4);
		if (services.length > 0) {
			PrintService service = ServiceUI.printDialog(null, 50, 50, services,
					services[0], null, attributes);
		}
	}
}



nekoyama
ベテラン
会議室デビュー日: 2005/03/12
投稿数: 71
投稿日時: 2007-02-05 16:21
対象は、javax.print.attribute.standard.MediaTrayです。

プリンタの給紙トレイの一覧取得コードは次のようになります。
下記コードで取得できる一覧からサポートされているか否かを抽出すればよいでしょう。

コード:
import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.ServiceUI;

import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;

import javax.print.attribute.standard.Media;
import javax.print.attribute.standard.MediaTray;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.OrientationRequested;


public class PrintSample {

	public static void main(String[] args) {
		java.util.Locale.setDefault(java.util.Locale.US);
		PrintService[] services = PrintServiceLookup.lookupPrintServices(
			DocFlavor.INPUT_STREAM.JPEG, null
		);
		PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
		attributes.add(OrientationRequested.PORTRAIT);
		attributes.add(new Copies(1));
		attributes.add(MediaTray.BOTTOM);
		attributes.add(MediaSizeName.ISO_A4);
		
		if(services.length > 0){
			Object values = services[0].getSupportedAttributeValues(
				Media.class, DocFlavor.INPUT_STREAM.JPEG, attributes
			);
			if(values instanceof Media[]){
				Media[] media = (Media[])values;
				
				for(int i = 0; i < media.length; i++){
					Media medium = media[i];
					if(medium instanceof MediaSizeName){
						//bla, bla, bla
					}else if(medium instanceof MediaTray){
						//bla, bla, bla
					}
					System.out.println(i + ":" + medium);
				}
			}
			PrintService service = ServiceUI.printDialog(null, 50, 50, services, services[0], null, attributes);
		}
	}
}

mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-02-05 16:58
>煮詰まってしまっています。
本題と関係ないですが、「行き詰ってしまっています」でしょう。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2007-02-05 18:02
> 未記入様
ご教示頂いた方法で、無事、取得できました。
ありがとうございます。
引数に「Class」を放り込むって、こういうことでしたか。
ずーーーーーーーーーーっと前にちょこっとみたことがあるような。(-_-;

> mio様
失礼しました。
ちゃんと日本語が書けないと、コミュニケーションになりませんね・・・。
ご指摘ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)