【问题标题】:Printing (with lpr) works from command line, but not from Java打印(使用 lpr)从命令行工作,但不能从 Java
【发布时间】: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 的同一用户) .

有什么帮助吗?

【问题讨论】:

    标签: java printing


    【解决方案1】:

    你需要把命令和参数放在一个字符串数组中

    String[] cmd = new String[] { "lpr" , "-P", "MyPrinter" };
    
    Process p = Runtime.getRuntime().exec(cmd);
    

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

    【讨论】:

    • 我会试试,但我不太明白这会有什么不同?
    • 非常感谢!!有效。 (现在不能接受作为答案.. 将在 2 分钟内完成)
    • @RohanPrabhu:你检查过 API 文档吗?它非常清楚地表明.exec(cmd) 的参数需要作为字符串数组给出,即如果您的命令有参数,它们应该在数组中
    • @RohanPrabhu 请参阅 javadoc docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html,根据您的要求,您必须从不同的(重载)执行方法中进行选择。
    • @posdef: 好吧,我想那是我的错 :(
    【解决方案2】:

    cups-bsd 包括lpr,它用于 Java。

    一定要执行apt-get remove lprapt-get install cups-bsd

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 2018-03-03
      • 2014-06-12
      相关资源
      最近更新 更多