gpt4 book ai didi

java - 打印(使用 lpr)从命令行工作,但不能从 Java

转载 作者:行者123 更新时间:2023-12-04 18:19:39 27 4
gpt4 key购买 nike

所以,首先,我们不能使用 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 的同一用户)。

有什么帮助吗?

最佳答案

您需要将命令和参数放在字符串数组中

String[] cmd = new String[] { "lpr" , "-P", "MyPrinter" };

Process p = Runtime.getRuntime().exec(cmd);

您可能还想使用较新的 ProcessBuilder类(class)。

关于java - 打印(使用 lpr)从命令行工作,但不能从 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929768/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com