- - PR -
テキスト等の印刷について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-11-20 13:57
はじめまして。
現在、独学でJAVAを勉強しているのですが、javax.printを使って テキストファイル等を印刷する方法がわからず困っています。 GIFなどの画像ならば印刷できる事は確認できたのですが TXTやHTMLだと”pservices.length”が0になってしまい印刷する事ができません。 DocFlavorのタイプが違うのかと思い一通り試したつもりなのですが どれも同じ状況になってしまいます。 何故、”pservices.length”が0になって印刷まで辿り着けないのかなど 分かる方がいらっしゃれば御教授おねがいします。 以下の練習文を書き換えて試しています。 import java.io.*; import javax.print.*; import javax.print.attribute.*; import javax.print.attribute.standard.*; import javax.print.DocFlavor.*; public class PrintGIF { public static void main(String args[]) { try{ DocFlavor flavor = DocFlavor.INPUT_STREAM.TEXT_PLAIN_US_ASCII; // DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF; PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); aset.add(MediaSizeName.NA_LETTER); aset.add(new Copies(1)); PrintService[] pservices = PrintServiceLookup.lookupPrintServices(flavor,aset); if (pservices.length > 0) { /* Create a Print Job */ DocPrintJob printJob = pservices[0].createPrintJob(); Doc doc = new InputStreamDoc("test.txt",flavor); printJob.print(doc, aset); } else { System.err.println("No suitable printers"); } } catch (PrintException e) { System.err.println(e); } } } class InputStreamDoc implements Doc { private String filename; private DocFlavor docFlavor; private InputStream stream; private Reader reader; public InputStreamDoc(String name, DocFlavor flavor) { filename = name; docFlavor = flavor; } public DocFlavor getDocFlavor() { return docFlavor; } /* No attributes attached to this Doc - mainly useful for MultiDoc */ public DocAttributeSet getAttributes() { return null; } /* Since the data is to be supplied as an InputStream delegate to * getStreamForBytes(). */ public Object getPrintData() throws IOException { // return getStreamForBytes(); return getReaderForText(); } public InputStream getStreamForBytes() throws IOException { synchronized(this) { if (stream == null) { stream = new FileInputStream(filename); } return stream; } } public Reader getReaderForText() throws IOException { synchronized(this) { if (reader == null) { reader = new FileReader(filename); } return reader; } } } |
|
投稿日時: 2005-11-20 23:02
たぶんくらぽんさんがイメージするような機能は、SunJDKには実装されていな
いということではないでしょうか。 java.awt.print.PrintableやPageableを利用して印刷する機能なら動くと思 いますので、そっちでやってみてください。 java.awt.Graphics(印刷面を表現するグラフィックスコンテキスト)に対して Java2Dでぐりぐり書き込めば印刷できますよ。 DocFlavorはSERVICE_FORMATTEDを指定してください。 |
|
投稿日時: 2005-11-20 23:56
シュンさん返信ありがとうございます。
java.awtを試してみます。 初心者なんでかなり手間取るかと思いますが。 |
1