javax
そのため、まず最初に、マシンに 20,000 台を超えるプリンターがインストールされているため、印刷サービスが非常に遅いため、印刷サービスを使用できません(ルックアップは信じられないほど遅い lpstat を使用します)。したがって、lpr を使用しています。
私がこれを行うとき:
cat myfile.pdf | lpr -P "MyPrinter"
ファイルをプリンター名に完全に印刷しますMyPrinter
。Javaで同じことをするために、私はこれをやっています:
cmd = String.format("lpr -P \"%s\"", "MyPrinter");
Process p = Runtime.getRuntime().exec(cmd);
OutputStream out = p.getOutputStream();
/*
This essentially runs a thread which reads from a stream and
outputs it to the STDOUT. This is what I've written to help with
debugging
*/
StreamRedirect inRed = new StreamRedirect(p.getInputStream(), "IN");
StreamRedirect erRed = new StreamRedirect(p.getErrorStream(), "ER");
inRed.start();
erRed.start();
/*
This is where I write to lprs STDIN. `document` is an InputStream
*/
final byte buf[] = new byte[1024];
int len;
while((len = document.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.flush();
out.close();
しかし、次のエラーが表示されます。
SR[ER]>>lpr: The printer or class was not found.
ここでSR[ER]
は、StreamRedirect
. なぜこうなった?コマンド ラインから実行するとプリンターが検出されるのに、それ以外の場合は検出されないのはなぜですか?
また、whoami
Java プログラム内から実行しようとしましたが、ログインしているのと同じユーザー (lpr
コマンド ラインで実行するのと同じユーザー) として実行していると表示されます。
何か助けはありますか?