2016-10-17 6 views
1

Ghostscript를 사용하여 URL에서 다운로드 한 두 개의 PDF 파일을 결합하는 한 줄의 Linux 명령을 만들려고합니다. 그러나 임시 파일을 만들고 싶지 않습니다 (모든 내용은 메모리에서 완료해야합니다).여러 입력을 Ghostscript에 파이핑

다음 명령이 작동하지 않는 것 같습니다 (프로세스 대체로이 작업을 시도했습니다).

gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=combined.pdf <(curl http://example.com/one.pdf) <(curl http://example.com/two.pdf) 

이 명령을 실행하면 아래 오류가 표시됩니다.

**** Warning: An error occurred while reading an XREF table. 
**** The file has been damaged. This may have been caused 
**** by a problem while converting or transfering the file. 
**** Ghostscript will attempt to recover the data. 
Error: /ioerror in --run-- 
Current allocation mode is local 
Last OS error: Illegal seek 
GPL Ghostscript 9.18: Unrecoverable error, exit code 1 

내가 두 개의 입력 PDF 파일이 다운로드를 완료 할 수있는 기회가 전에 고스트 스크립트 명령이 실행되고 있다는 것입니다 무슨 일이 일어나고 있는지 생각, 아마이 일이 기다릴 수있는 방법이있다.

답변

0

여기 몇 가지 문제가 있습니다.

첫째, Ghostscript와 pdfwrite 장치는 PDF 파일을 결합하지 않습니다. 입력은 완전히 해석되고 그래픽 프리미티브로 변환되며 장치로 전달됩니다. 렌더링 디바이스는 비트 맵, 벡터 장치가 원시의 높은 수준의 표현을 생성하고 해당 언어의 출력에 기록 프리미티브를 렌더링하는 그래픽 라이브러리를 사용합니다. 따라서 출력 파일의 내용이 입력 파일의 내용과 아무런 관련이 없다는 점에 유의해야합니다. 시각적 결과는 렌더링 될 때만 동일해야합니다.

둘째, 임시 파일을 피할 수 없습니다. stdin을 통해 PDF 파일을 Ghostscript로 파이프하면 단순히 임시 파일을 만들고 그 안에 전체 파일을 저장합니다. 이는 PDF 파일이 임의 액세스로 해석되어야하기 때문에 필요합니다.

마지막으로, 당신은 명령 줄에서 두 번 stdin에서 파이프 할 수 없습니다. 이 개 파일을 처리하려면 고스트에 자신의 인터페이스를 작성하고 데이터를 전송 스트림 인터페이스를 사용하거나 명령 줄에 모두 배치해야 하나.

그래서 : file2.pdf file1.pdf GS

당신이 단순히 작동하지 않습니다하려고 노력하고 있으며, 어떤 경우에 두 개의 PDF 파일의 생성, 그 그냥 고스트를 방지하지 않습니다 당신이 그들을 볼 수있는 당신을 위해 그 (것)들을 생성한다.