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です。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2007/07/03 10:58:54
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:yamats No.1

回答回数247ベストアンサー獲得回数9

ポイント30pt

http://kickjava.com/


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

id:yashi011 No.2

回答回数32ベストアンサー獲得回数4

ポイント100pt

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

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

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

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

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


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

id:eimu

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

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

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();

}

}

}

2007/06/27 10:44:44
id:yashi011 No.3

回答回数32ベストアンサー獲得回数4

ポイント50pt

残念ながら私の環境では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の印刷周りはまだまだ弱い気もしますね。


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

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

id:eimu

いろいろ調べましたが,

このコードを実行すると、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が入るようにする

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

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

2007/07/03 10:57:12
  • id:yashi011
    >コメント欄も空けておいていただけるとありがたいです。
    デフォルトだと回答受付中はこのコメント欄を使用することができないようになっています。
    質問の設定項目で回答受付中もコメントを受け付けるようにしていただけると、今回のように「ソースをお願いします」とか、環境の確認などの逆質問が気軽にできるようになるのでありがたいです。


    >上記出力にPDFが入っていないのでだめのようです。
    質問だと1部は印刷されたように書かれていたのですが、実際はまったく印刷されなかったんでしょうか?
  • id:eimu
    >質問だと1部は印刷されたように書かれていたのですが、実際はまったく印刷されなかったんでしょうか?
    はい、
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE
    にした場合は、質問どおり1部は印刷されています。
    サイズ指定、及び2部以上は印刷できないという事です。

    >デフォルトだと回答受付中はこのコメント欄を使用することができないようになっています。
    はてなに関する質問時の仕様だったのですね、
    失礼しました。。。以後はそのようにします。

    yashi011さん、いろいろ忙しい中書いてくださってありが
    とうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません