0
JUnit 테스트에서 ghostscript 명령을 실행하고 테스트가 오류로 끝납니다. 그러나 터미널에서 같은 명령을 실행하면 명령이 오류없이 완료됩니다.Java 프로그램에서 Ghostscript를 실행하는 중 오류가 발생했습니다.
Command: /usr/local/bin/gs -sOutputFile="OUTPUT_PATH" -sDEVICE=pdfwrite -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray -dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH "INPUT_PATH"
Java 런타임을 사용하여 명령을 실행합니다.
Process pr = Runtime.getRuntime().exec(command);
int exitValue = pr.waitFor();
if (exitValue != 0) {
....
}
실행 오류.
GPL Ghostscript 9.21: **** Could not open the file "OUTPUT_PATH" .
확실히 차이점은 GS가 아니라 환경입니다. Java에서 명령을 실행할 때 현재 작업 디렉토리가 쓰기 가능하지 않거나 적어도 현재 사용자에게는 해당되지 않는다고 추측합니다. 이것은 Ghostscript가 쓰기를 위해 출력 파일을 열 수 없음을 의미합니다. 완성 된 경로와 출력 파일을 Java가 작성하도록 허용 된 디렉토리에 지정하십시오. 다른 가능성은 파일이 이미 존재하고 다른 응용 프로그램에서 열려 있다는 것입니다. 다른 (정규화 된) 위치에 다시 쓰는 것은 조심해야하는 한 그것을 방지해야합니다. – KenS
감사합니다. @KenS, JUnit 테스트에서 파일의 전체 경로를 사용합니다. 예를 들어, eclipse에서 target 폴더를 사용하여 파일을 씁니다. Paths.get ("target", "GRAYSCALE_TEST.pdf"); ' – fjtorres
글쎄 그것은 내게 아직도 환경에 대한 문제로 보입니다. Java에 대해서는 아무 것도 모른다는 것을 알기 때문에 이클립스 라인은 내가 두려워하는 것이 아무것도 없다고 알려줍니다. 분명 Ghostscript가 작동하고 있습니다 (쉘에서 작동하기 때문입니다). 그 차이는 그 주변 환경에 있어야합니다. 오류는 매우 명확합니다. Ghostscript가 파일을 열 수 없습니다. 두 가지 이유가 있습니다. 첫째, "wb"를 사용하는 C 런타임 fopen()이 실패했습니다. 두 번째로 파일 이외의 다른 파일 (예 : % stdout % ")로 출력하고 있는데 실패하면 실패합니다. 많이 ** 실제 경로를 전체적으로 인용하는 것이 더 좋으므로 알려줄 수 있습니다. – KenS