2012-12-05 2 views
2

많은 PDF 파일을 3000 개 정도의 파일로 병합하려고합니다. 많은 시도 후에,이 스크립트는 트릭을하는 것처럼 보였습니다. 우리는 각각의 병합 목록에서 3000 PDF 파일이 있기 때문에Bash PDF 병합 파일이 누락 됨

문제가
#!/bin/bash 

basepath='/home/lemonidas/pdfstuff'; 
datename=`date "+%Y%m%d%H%M.%S"`; 
start=`date "+%s"`; 
echo "parsing pdf list to file..." 
find $basepath/input/ -name "*.pdf" | xargs -I {} ls {} >> $basepath/tmp/biglist$datename.txt 

split -l 3000 $basepath/tmp/biglist$datename.txt $basepath/tmp/splitfile 
rm $basepath/tmp/biglist$datename.txt 
echo "deleting big file..." 
echo "done splitting!" 

declare -i x 
x=1 

for f in $basepath/tmp/splitfile* 
do 
linenum=`cat $f | wc -l`; 
echo "Processing $f ($linenum lines)..." 

# merge to one big PDF 
cat $f | xargs gs -q -sstdout=$basepath/error.log -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$basepath/output/$x.big.pdf 2>$basepath/error.log 
echo "Completed PDF $x" 
((x++)) 

# delete the list file 
rm $f 
echo "Deleted processed file $f" 
done 
end=`date "+%s"`; 
echo "Started: $start" 
echo "Finished: $end" 

, 나는 ((마지막 제외) 각 출력 파일이 6000 페이지이어야한다 22000이 페이지의 PDF 파일을 가지고 (물론 내가 잘못했다) 파싱하기 전에 "wc -l"에 의해 검증 됨), 나는 단지 약 658 페이지 정도를 얻는다.

 
Warning: Embedded symbolic TT fonts must contain a cmap for Platform=1 Encoding=0.
Warning: Embedded symbolic TT fonts must contain a cmap for Platform=1 Encoding=0.
Warning: Embedded symbolic TT fonts must contain a cmap for Platform=1 Encoding=0.
Warning: Embedded symbolic TT fonts must contain a cmap for Platform=1 Encoding=0.
Warning: Embedded symbolic TT fonts must contain a cmap for Platform=1 Encoding=0.
Warning: Embedded symbolic TT fonts must contain a cmap for Platform=1 Encoding=0.
Warning: Embedded symbolic TT fonts must contain a cmap for Platform=1 Encoding=0.
Warning: Embedded symbolic TT fonts must contain a cmap for Platform=1 Encoding=0.
This file had errors that were repaired or ignored.
The file was produced by: >>>> Powered By Crystal Please notify the author of the software that produced this file that it does not conform to Adobe's published PDF specification.

반복 (그러나 22000 번 생각이)

내가 300-400 파일을 시도

, 그것은 원활하게 실행,하지만 때

오류는 GS하여이 제외보고되지 2.5 시간이 지난 후에 전체 파일을 실행 해 봅니다. 병합 된 파일의 절반보다 훨씬 적습니다.

내 다음 생각은 .pgm 파일의 각 2 페이지 PDF를 변환하는 것이지만 PDF로 다시 작성하는 방법을 모릅니다 (글꼴 포함 문제가 발생하지 않도록). 내가 빠진 것이 있습니까? (아마도)

답변

2

작업에 더 적합한 도구를 사용하는 것이 좋습니다. pdfwrite (PDF 파일을 내보내는 Ghostscript 장치)는 제 의견으로는 올바른 도구가 아닙니다.

PDF 파일을 '병합'하기 위해 Ghostscript는 입력 작업을 표시 작업으로 완전히 해석 한 다음, 표시 작업을 PDF 파일로 다시 작성합니다. 이 작업 목록을 만드는 동안 글꼴, 이미지, 기타 사항 등 많은 정보를 보유해야하며 새로운 입력과 비교하여 이미 사본이 있는지 확인해야합니다. 입력이 커지면 해당 목록을 스캔하는 데 시간이 오래 걸리고 물론 메모리 소비는 증가합니다. Ghostscript가 이미 메모리를 교체하고있는 것을 볼 수 있습니다.

이제는 이것이 실제 문제인지 또는 파일을 병합 한 후에 페이지가 누락되었다고 말하는 지 확실하지 않습니다. 그렇게해서는 안됩니다. 또한 사용중인 Ghostscript의 버전을 말하지 않습니다.

pdfwrite와 같은 도구는 pdfwrite와 같은 도구가 pdfwrite보다 더 큰/덜 효율적일 수 있지만 이러한 종류의 병합을 수행하는 것이 더 빠를 것이라고 생각합니다.

+0

+1 pdftk advice – mouviciel

+0

GS 8.61을 사용하고 있습니다. 프로세스가 중단되면 적어도 오류를보고하기를 바랍니다. 나는 pdftk로 시도하고 다시보고 할 것이다. 감사! – lemonidas

+0

8.61은 매우 오래되었습니다 (거의 5 세가되었습니다), 현재 버전은 9.06 – KenS