- PR -

テキスト等の印刷について

1
投稿者投稿内容
くらぽん
会議室デビュー日: 2005/11/20
投稿数: 2
投稿日時: 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;
}
}
}
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-11-20 23:02
たぶんくらぽんさんがイメージするような機能は、SunJDKには実装されていな
いということではないでしょうか。

java.awt.print.PrintableやPageableを利用して印刷する機能なら動くと思
いますので、そっちでやってみてください。
java.awt.Graphics(印刷面を表現するグラフィックスコンテキスト)に対して
Java2Dでぐりぐり書き込めば印刷できますよ。
DocFlavorはSERVICE_FORMATTEDを指定してください。
くらぽん
会議室デビュー日: 2005/11/20
投稿数: 2
投稿日時: 2005-11-20 23:56
シュンさん返信ありがとうございます。
java.awtを試してみます。
初心者なんでかなり手間取るかと思いますが。
1

スキルアップ/キャリアアップ(JOB@IT)