JavaでPNGファイルを印刷をしようとしています。
MediaSizeName sizeName = MediaSize.findMedia(x, y, Size2DSyntax.INCH);
↑のようにMediaSizeを取得しました。
1回目の実行では「6 in Page 3.14x6in 48c」という値が取得できたのですが、
2回目以降の実行では、sizeNameにnullが入ってきてしまいます。
原因を探っていますが、どこを調べればよいのかも分からない常態です。
なにかヒントをいただけないでしょうか?お願いします。
環境
Eclipse 3.0.1
j2sdk1.4.2_12
tomcat-5.0.28
-------------------------------------------------------------------------------
ソースの概要は以下のとおりです。
-------------------------------------------------------------------------------
FileInputStream filseStream = new FileInputStream("c:\\sample\\sample.png");
DocFlavor myFormat = DocFlavor.INPUT_STREAM.PNG;
Doc myDoc = new SimpleDoc(filseStream, myFormat, null);
float x = Float.parseFloat("3.14");
float y = Float.parseFloat("6");
MediaSizeName sizeName = MediaSize.findMedia(x, y, Size2DSyntax.INCH);
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(1));
aset.add(sizeName);
PrintService[] services = PrintServiceLookup.lookupPrintServices(myFormat, aset);
DocPrintJob job = services[0].createPrintJob();
job.print(myDoc, aset);
-------------------------------------------------------------------------------
No.1ベストアンサー
- 回答日時:
素人です。
印刷APIは全くわからないので、
回答ではありませんが、、
ちょっと思ったこと。
---
1.単に
「メディアサイズ名」を直接に指定すればいいのでは?
「サイズ」から(「メディアサイズ名」を)判別しようとするのではなく。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java …
---
2.
>aset.add(sizeName);
たぶんここで「メディアサイズ名の指定」をしない場合は、
「デフォルトの」メディアサイズ名が(内部で)使われるような気がします。
3.
>MediaSizeを取得しました。
>1回目の実行では「6 in Page 3.14x6in 48c」という値が取得できたのですが、
>2回目以降の実行では、sizeNameにnullが入ってきてしまい
この部分がよくわからないのですが…。
■『「6 in Page 3.14x6in 48c」という値』とは、なんの値?
sizeNameインスタンスのの文字列表現(toString()の値)でしょうか。
■「1回目」「2回目」の意味が、よくわからないのですが…。
findMedia()でnullが返ってきてもそれは仕様のようです。
ですから、nullが返ってきても「不思議ではありません」。
しかしこれが、
「全く同じプログラムなのに、
その実行のたびにfindMedia()の返り値がまちまち」
だと「不思議」ですが…。
この回答への補足
findMedia()の返り値がまちまちな問題は、まだ解決していないのですが、
kacchannさんに教えていただいた、「メディアサイズ名」を直接に指定する
方法を試してみることにしました。
今までは、下記のように、フレーバと属性を指定して印刷サービスを探していました。
なので「MediaSizeName.ISO_AA」のような用紙サイズの属性を指定して
印刷サービスを探すと、目的のプリンタを見つけることができませんでした。
◆変更前
DocFlavor myFormat = DocFlavor.INPUT_STREAM.PNG;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
MediaSizeName mediaSizeName = MediaSize.findMedia(3.14f, 6f, Size2DSyntax.INCH);
aset.add(mediaSizeName);
PrintService[] services = PrintServiceLookup.lookupPrintServices(myFormat, aset);
目的のプリンタをデフォルトプリンタに設定し、
属性やフレーバを指定しないで印刷サービスを取得するようにしました。
レシートプリンタにはA5というサイズはありませんが、
3.14インチx6インチより大きいサイズを指定すると、
印刷できるようになりました。
◆変更後
PrintService myDefService = PrintServiceLookup.lookupDefaultPrintService();
DocFlavor myFormat = DocFlavor.INPUT_STREAM.PNG;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(MediaSizeName.ISO_A5);
DocPrintJob job = myDefService.createPrintJob();
無理やりサイズを指定しているせいなのか、
先頭に少し余白がついているような気がします。
また、実際の画像より少し大きく印刷されているような気がしますが、
とりあえず今回はこの方法で、進めようかと思います。
kacchannさん。
本当にありがとうございました。
kacchannさん。回答ありがとうございます。
>1.単に
>「メディアサイズ名」を直接に指定すればいいのでは?
実はレシートプリンタで印刷しているので、通常サイズの用紙がありません。
ですので、「メディアサイズ名」を判別しようとしていました。
>
>この部分がよくわからないのですが…。
>■『「6 in Page 3.14x6in 48c」という値』とは、なんの値?
> sizeNameインスタンスのの文字列表現(toString()の値)でしょうか。
説明不足ですみません。
「6 in Page 3.14x6in 48c」は、toString()の値です。
>■「1回目」「2回目」の意味が、よくわからないのですが…。
> findMedia()でnullが返ってきてもそれは仕様のようです。
> ですから、nullが返ってきても「不思議ではありません」。
>
表現が変でしたね。すみません。
いろいろ試してみましたが、ごくたまにfindMedia()の返り値が
「6 in Page 3.14x6in 48c」になります。
たいていは、nullが返ってきてしまいます。
> 「全く同じプログラムなのに、
> その実行のたびにfindMedia()の返り値がまちまち」だと「不思議」ですが…。
はい。
同じプログラムなのに、findMedia()の返り値が、まちまちのように思えます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
split関数で区切り文字がない場合
-
Eclipse(JAVA)のデバッグで他...
-
「ワークスペースをビルド中」...
-
Javascriptの値をJava(JSP)へ渡...
-
コミット前の更新データをチェ...
-
jasper.exceptionとは?
-
JAVAにのeclipseに関する質問で...
-
Javaで年月の取得(YYYYMM形式で)
-
エクリプスで実行時、最新クラ...
-
Eclipseで実行>Javaアプリケー...
-
eclipseでスタックサイズを変更...
-
JAVAの質問です。 ( String arg...
-
eclipseでステップ実行がしたい
-
Eclipse上でのTOMCATのエラー
-
バイナリーコードと、ソースコ...
-
Javascriptのパーミッション
-
Java能力認定試験の問題です。 ...
-
Eclipseで作成したクラスを他の...
-
Eclipseで実行できてコマンドプ...
-
Javaについての質問です。 コン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
split関数で区切り文字がない場合
-
「ワークスペースをビルド中」...
-
eclipseでスタックサイズを変更...
-
コミット前の更新データをチェ...
-
JAVAにのeclipseに関する質問で...
-
Javaで年月の取得(YYYYMM形式で)
-
Javascriptの値をJava(JSP)へ渡...
-
Eclipse(JAVA)のデバッグで他...
-
エクリプスで実行時、最新クラ...
-
jasper.exceptionとは?
-
環境変数設定で
-
eclipseで「サーバーで実行」表...
-
eclipseのjavaを実行できない
-
Worksheet_Changeが動かない
-
Google Colabでimport soxが出...
-
Javascriptのパーミッション
-
javaからVBAを実行する方法を教...
-
javascriptで、style undefined...
-
バイナリーコードと、ソースコ...
-
[JAVA]evalで文字列を計算式に!
おすすめ情報