우리 모두 알고 있듯이 다음 명령을 사용하여 이미지를 단일 PDF로 변환할 수 있습니다(이미지 파일 이름이 올바른 순서로 되어 있다고 가정).
convert *.jpg output.pdf
.
그러나 수천 개의 이미지가 관련된 경우 이 접근 방식은 너무 많은 RAM을 차지할 수 있습니다. 또 다른 아이디어는 이미지를 PDF로 일괄 변환한 다음 결과 PDF를 단일 PDF로 연결하는 것입니다 pdftk
.
pdftk output-*.pdf cat output output.pdf
지금까지 다음 명령을 사용하여 이미지를 일괄 변환해 보았습니다 xargs
.
ls *.jpg | xargs -d $'\n' -t -n 100 bash -c 'convert "$@" output.pdf'
convert
매번 이전 PDF를 삭제한다는 점을 제외하면 잘 작동합니다 .
질문: 배치 번호를 세어 순차적으로 생산하는 방법이 있습니까? 예를 들어 output-1.pdf
..., output-9.pdf
?
답변1
xargs
GNU 로 전환할 수 있다면 parallel
,하다{#}
실행 중인 일련 번호가 포함된 대체 문자열을 제공합니다 .
예를 들어 주어진
$ touch File{001..050}.jpg
그 다음에
$ printf '%s\0' *.jpg | parallel --null -n 5 echo convert {} -o output{#}.pdf
convert File001.jpg File002.jpg File003.jpg File004.jpg File005.jpg -o output1.pdf
convert File006.jpg File007.jpg File008.jpg File009.jpg File010.jpg -o output2.pdf
convert File011.jpg File012.jpg File013.jpg File014.jpg File015.jpg -o output3.pdf
convert File016.jpg File017.jpg File018.jpg File019.jpg File020.jpg -o output4.pdf
convert File021.jpg File022.jpg File023.jpg File024.jpg File025.jpg -o output5.pdf
convert File026.jpg File027.jpg File028.jpg File029.jpg File030.jpg -o output6.pdf
convert File031.jpg File032.jpg File033.jpg File034.jpg File035.jpg -o output7.pdf
convert File036.jpg File037.jpg File038.jpg File039.jpg File040.jpg -o output8.pdf
convert File041.jpg File042.jpg File043.jpg File044.jpg File045.jpg -o output9.pdf
convert File046.jpg File047.jpg File048.jpg File049.jpg File050.jpg -o output10.pdf
답변2
xargs는 현재 인스턴스를 평가하는 방법을 제공하지 않습니다. 다른 이름을 얻을 수 있지만 ls *.jpg | xargs -d $'\n' -t -n 100 bash -c 'convert "$@" output-$$.pdf'
파일 타임스탬프를 기반으로 순서를 파악해야 합니다.
한 가지 해결책은 단계별로 결합하는 것입니다.
ls *.jpg | xargs -d $'\n' -t -n 100 bash -c 'convert "$@" temp.pdf'; if [ -f output.pdf ]; then mv temp.pdf next.pdf; pdftk output.pdf next.pdf cat output temp.pdf; fi; mv temp.pdf output.pdf`
가장 좋은 방법은 각 이미지를 개별적으로 변환하는 것입니다.
find -name \*.jpg -exec convert \{\} \{\}.pdf \;
pdftk *.jpg.pdf cat output output.pdf
더 간단하며 별도의 프로세스에서 각 이미지를 변환하는 비용은 하나의 변환 인스턴스가 N개의 이미지를 처리하는 것과 대략 동일합니다.
또한 이미지 중 하나가 실제로 주문되지 않은 경우 이제 배치가 변경되었으므로 각 이미지를 다시 변환할 필요 없이 재배열하는 것이 더 간단할 것입니다.