【发布时间】:2012-06-07 10:12:48
【问题描述】:
所以,首先,我们不能使用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 为前缀的自定义标签。为什么会这样?为什么我从命令行运行时它能够找到打印机,而在其他情况下却没有?
另外,我尝试在 Java 程序中运行 whoami,它说我正在以我登录的同一用户身份运行它(我在命令行上执行 lpr 的同一用户) .
有什么帮助吗?
【问题讨论】: