人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

JavaAPIを使って印刷部数2部で印刷を
試みていますが、
下記のように設定すると、印刷できるのですが、
1部しかなぜか印刷できません。3部に設定しても
1部しか印刷できません。
PrintRequestAttributeSet requestAttributes =
new HashPrintRequestAttributeSet();
requestAttributes.add(new Copies(2));

http://www.gihyo.co.jp/magazines/javapress/support/Vol27
の第3章「javax.printによる印刷」で使用されたソースコードを参考にしたりして作成
しているのですが、うまくいきません。
1部でなく、きちんと2部印刷できるように
するにはどうしたらいいでしょうか。
よろしくお願いします。

自分の環境は、
Eclipse3.2
JDK1.5.0_08です。

●質問者: eimu
●カテゴリ:コンピュータ インターネット
✍キーワード:ADD print Tes. ソースコード 作成
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● yamats
●30ポイント

http://kickjava.com/


Java開発者がAPIの使用方法を調べる際に非常に役に立つ、Java APIのための検索サイトです。ご参考ください。


2 ● yashi011
●100ポイント

SamplePrintableMain2.javaをjdk1.5.0_12で試してみましたが、printDialog()の表示前に設定しても部数の情報はクリアされてしまうみたいですね。

job.print()の直前などダイアログを表示した後に設定するときちんと指定された部数で印刷されるようです。

ダイアログで設定した内容と違ってしまうのはちょっと気持ち悪いですけど・・・

Javaのバグ情報のページを参照すればひょっとしたら情報が載っているかもしれません。

http://bugs.sun.com/bugdatabase/index.jsp


余談ですが、こういった場合は動作する形でソースコードを提示しておくと、より適確な回答が得られるのではないかと思います。

◎質問者からの返答

ソースを提示しておく必要がありましたね、

どうも失礼しました。実行ソースは以下です。

new Copies(3)でやってますが、

1部しか出ないという事です。

Exceptionは特にでません。

印刷ダイアログ出せば、任意で部数を変更

できるのでしょうが、自動で必要部数印刷したいと思っています。


import java.io.FileInputStream;

import java.io.IOException;

import java.util.Locale;

import javax.print.Doc;

import javax.print.DocFlavor;

import javax.print.DocPrintJob;

import javax.print.PrintService;

import javax.print.PrintServiceLookup;

import javax.print.SimpleDoc;

import javax.print.PrintException;

import javax.print.attribute.DocAttributeSet;

import javax.print.attribute.HashDocAttributeSet;

import javax.print.attribute.HashPrintRequestAttributeSet;

import javax.print.attribute.PrintRequestAttributeSet;

import javax.print.attribute.standard.Copies;

import javax.print.attribute.standard.JobName;

import javax.print.attribute.standard.JobPriority;

import javax.print.attribute.standard.PrintQuality;

import javax.print.attribute.standard.RequestingUserName;

import javax.print.attribute.standard.MediaSizeName;

class PrintRequestAttributeSetSample

{

public static void main(String[] args)

{

// docフレーバを設定

DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

// 印刷要求属性を設定

PrintRequestAttributeSet requestAttributes =

new HashPrintRequestAttributeSet();

requestAttributes.add(new Copies(3));

requestAttributes.add(MediaSizeName.ISO_A4);

// 印刷サービスを検出

PrintService services =

PrintServiceLookup.lookupDefaultPrintService();

// 印刷ジョブを作成

DocPrintJob job = services.createPrintJob();

try {

// docオブジェクトを生成

FileInputStream data = new FileInputStream("print_test2.pdf");

DocAttributeSet docAttributes = new HashDocAttributeSet();

Doc doc = new SimpleDoc(data, flavor, docAttributes);

// 印刷

job.print(doc, requestAttributes);

}

catch (IOException e) {

e.printStackTrace();

}

catch (PrintException e) {

e.printStackTrace();

}

}

}


3 ● yashi011
●50ポイント

残念ながら私の環境ではPDFはサポートされていないらしく、PDFの印刷は試せませんでした(PrintJobFlavorExceptionが発生する)。

ただ、対象ファイルをPNGに変えて、DocFlavorもINPUT_STREAM.PNGに変えたところ(私の環境ではDocFlavor.INPUT_STREAM.AUTOSENSEもうまく動作しなかったので)、指定の通り3部印刷されました。

ひょっとしたら、eimuさんの環境でもAUTOSENSEではなく、DocFlavor.INPUT_STREAM.PDFを指定してあげればよいのかも知れません。


もしくはjob.print()をループで・・・orz


ちなみにjavax.printの印刷ダイアログを表示した場合、部数設定はまだ実装されてないのかdisabledになっていました。

javaの印刷周りはまだまだ弱い気もしますね。


あと、コメント欄も空けておいていただけるとありがたいです。

これは前回書いておくべきでしたね。すみません。

◎質問者からの返答

いろいろ調べましたが,

このコードを実行すると、PDFに

どうやら対応していないという事が

WEBを見て感じました。

参考:Java API 実用リファレンス2

サンプルソース

import javax.print.DocFlavor;

import javax.print.DocPrintJob;

import javax.print.PrintService;

import javax.print.PrintServiceLookup;

class PrintServiceSample

{

public static void main(String[] args)

{

// デフォルトのPrintServiceを検索

PrintService service =

PrintServiceLookup.lookupDefaultPrintService();

// 印刷サービスの名前を表示

System.out.println("Service name : \n " + service.getName());

// サポートする印刷データ形式を表示

DocFlavor[] flabors = service.getSupportedDocFlavors();

System.out.println("Supported flavors : ");

for (int i=0; i < flabors.length; i++) {

System.out.println(" " + flabors[i]);

}

// 印刷ジョブを作成

DocPrintJob job = service.createPrintJob();

}

}


結果:

Service name :

DocuPrint 205

Supported flavors :

image/gif; class="[B"

image/gif; class="java.io.InputStream"

image/gif; class="java.net.URL"

image/jpeg; class="[B"

image/jpeg; class="java.io.InputStream"

image/jpeg; class="java.net.URL"

image/png; class="[B"

image/png; class="java.io.InputStream"

image/png; class="java.net.URL"

application/x-java-jvm-local-objectref; class="java.awt.print.Pageable"

application/x-java-jvm-local-objectref; class="java.awt.print.Printable"

application/octet-stream; class="[B"

application/octet-stream; class="java.net.URL"

application/octet-stream; class="java.io.InputStream"


上記出力にPDFが入っていないので

だめのようです。

私も印刷系はJavaは厳しい感じがします。

何かをインストールする事でPDFを対応させる

ことができるといいのですが。。。

Sunに問い合わせするしかないんですかね、、?

>コメント欄も空けておいていただけるとありがたいです。

ここの箇所はちょっと意味が分かりませんでした,すみません。

明日の時点でとりあえず

回答を終わりにします。

Supported flavorsにPDFが入るようにする

ための方法(ドライバで可能?)は

別途他で質問するようにします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ