- - PR -
Javaアプリからのプリントアウトについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-03-12 12:06
お世話になっております。
現在、Javaでマシンに繋がっているプリンタ名を取得してその中から プリンタを選択して自動印刷できる機能を作成しています。 そこで、今問題になっているのが、拡張子がPNGなどのイメージファ イルであれば印刷可能なのですが、テキストやPDFファイルでは印刷 ができずエラーとなることです。 以下のソースで実行しております。 Javaのバージョンは 1.4.2 です。 -- 以下ソースです -- try{ // テキストファイルを指定↓ FileInputStream stream = new FileInputStream(filename); // 利用可能なプリンタの件数 System.out.println("Service count: "+pServices.length); // プリンタ名格納変数 String[] cPrinter = new String[pServices.length]; DocPrintJob job = null; for (int i = 0; i < pServices.length; i++) { tName = pServices[i].getName(); System.out.println("Printer: "+tName); // 一番最初に取得したプリンタで印刷 if(i == 0){ // 印刷データの DocPrintJob への提供形式を指定 DocFlavor flavor = DocFlavor.INPUT_STREAM.TEXT_PLAIN_US_ASCII; Doc doc = new SimpleDoc(stream, flavor, null); // プリントジョブの作成 job = pServices[i].createPrintJob(); // 印刷開始 job.print(doc, null); break; } cPrinter[i] = tName; } System.out.println("終了"); } catch (FileNotFoundException ex) { ex.printStackTrace(); return; } catch (PrintException ex) { ex.printStackTrace(); } --------------- 実行すると以下のExceptionが発生します。 sun.print.PrintJobFlavorException: invalid flavor at sun.print.Win32PrintJob.print(Win32PrintJob.java:296) at SimplePrint.main(SimplePrint.java:43) おそらくDocFlavor.INPUT_STREAM.TEXT_PLAIN_US_ASCIIの指定の 問題だと思うのですが、TXT、PDFに関しては何を指定しても上記 エラーとなります。 すみませんがご教授願います。 以上、宜しくお願いいたします。 |
|
投稿日時: 2008-03-12 13:07
DocFlavor.INPUT_STREAM.PDF
DocFlavor.INPUT_STREAM.TEXT_PLAIN_HOST ってのがありましたが、これでどうですか。 TEXT_xxxxxxxは、他にもいろいろありますよ。 つか、DocFlavor.INPUT_STREAM.TEXT_PLAIN_US_ASCIIだったら、 複数のイメージファイルで通っちゃうの? 中の人もたいへんだね。 |
|
投稿日時: 2008-03-12 13:31
返答有難うございます。
教えていただいたとおり PDFの場合、DocFlavor.INPUT_STREAM.PDF TXTの場合、DocFlavor.INPUT_STREAM.TEXT_PLAIN_XXX を指定して試していたのですが、うまくいきませんで した。 同じようにPrintJobFlavorExceptionが発生します。 もう少し頑張ってみます。 どうも有難うございました。 |
|
投稿日時: 2008-03-12 13:46
こんなのを見つけました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1156&forum=12&2 そりゃそうか。 PDFはもちろんですが、 プレーンテキストだって、レイアウトエンジンが必要ですしね。 ・PDFの場合 私はiTextは詳しくないですが、iTextの機能を使用 <削除> するか、あるいはPrinterJobに流し込めるStreamを取得するか、 「invalid flavor」が相手じゃ意味無いですね。orz </削除> できませんかね。 ・テキストの場合 自分でレイアウトエンジンを用意する。 具体的には、ImageBufferを用意して、Graphicsを取得して、 テキストを配置してPrinterJobに流し込む。 私が思いつくのはこんなところです。 [ メッセージ編集済み 編集者: Edosson 編集日時 2008-03-12 13:52 ] |
|
投稿日時: 2008-03-12 14:01
http://yggdrasil.exblog.jp/865940/
こんなのも。 DocFlavorのタイプって、プリンタに依存しているんですね。 勉強させていただきました。 |
|
投稿日時: 2008-03-12 15:53
回答どうも有難うございました。
プリンタに依存するのであればJavaのPrint機能は使用しないほうが いいかもしれませんね。 何か他の方法を検討しようかと思います。 |
|
投稿日時: 2008-03-12 16:29
環境が整っていないと、javax.printは使えませんが、
java.awt.printなら、どこでも使えるはずですよ。 http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/awt/print/Printable.html#print(java.awt.Graphics,%20java.awt.print.PageFormat,%20int) このメソッドをオーバーライドすればいいです。 Printableは、そのままPrinterJobに放り込めますし。 ただし、Graphicsにデータを書き込むのは、全部自分でやらなければなりません。 PDFは、iTextからページ指定でストリームが取得できるなら、楽かもしれません。 |
|
投稿日時: 2008-03-13 09:12
いろいろと参考になるご意見、有難うございました。
検討してみようと思います。 |
1