2012-06-07 3 views
1

먼저 프린터에 설치된 프린터가 20,000 대를 초과하므로 인쇄 서비스가 매우 느립니다 (룩업에서는 인쇄 사용시 javax을 사용할 수 없습니다). lpstat은 매우 느립니다). 그래서 우리는 lpr을 사용하고 있습니다.인쇄 (lpr 사용)는 명령 줄에서 작동하지만 Java에서는 수행하지 않습니다.

나는이 수행 할 때

cat myfile.pdf | lpr -P "MyPrinter" 

가 완벽하게 프린터 이름 MyPrinter에 파일을 인쇄합니다. 나는 다음과 같은 오류가 발생합니다,

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을 실행 한 동일한 사용자)로 실행하고 있다고합니다.

어떤 도움이 필요합니까?

답변

3

당신은 문자열 배열 또한 새로운 ProcessBuilder 클래스를 사용할 수도 있습니다

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

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

의 명령과 인수를 넣어해야합니다.

+0

나는 그것을 시도 할 것이지만, 그것이 어떤 차이를 만들지는 모르겠다. –

+0

정말 고마워요 !! 그것은 효과가 있었다. (대답을 지금 받아 들일 수 없습니다. 2 분 안에 할 것입니다.) –

+0

@RohanPrabhu : API 문서를 확인 했습니까? 그것은'.exec (cmd)'에 대한 인수가 문자열 배열로 주어질 필요가 있음을 분명히 말합니다. 즉, 명령에 인수가있는 경우 배열에 있어야합니다. – posdef

관련 문제