목록의 PDF 파일을 절반 페이지에서 편집하여 해당 절반 페이지에서 전체 페이지를 가져옵니다.

목록의 PDF 파일을 절반 페이지에서 편집하여 해당 절반 페이지에서 전체 페이지를 가져옵니다.

아래와 같은 PDF 파일이 있습니다.

----------
||----|  |
||----|  |
|        |
|        |
|        |
|________|

다음 명령의 도움으로

$ convert -density 300 -quality 100 -crop 0x50% in.pdf out.png
$ ls
in.pdf, out-0.png, out-1.png
$ montage -mode concatenate -tile 1x out-0.png out-0.png out.pdf
$ ls
in.pdf, out-0.png, out-1.png out.pdf

이런 파일이 나오네요

----------
||----|  |
||----|  |
|        |
||----|  |
||----|  |
|________|

그런 다음 인쇄한 다음 PDF 문서를 삭제해야 합니다.

주어진 파일 목록을 사용하여 동일한 효과를 얻으려면 어떻게 해야 합니까?

$ cat list-of-pdfs.txt
file 1.pdf
file 2.pdf
file 3.pdf
...

답변1

단일 파일에 대해 작동하여 결과를 in.pdf생성하는 한 쌍의 명령이 있습니다 .out.pdf

convert -density 300 -quality 100 -crop 0x50% in.pdf out.png
montage -mode concatenate -tile 1x out-0.png out-0.png out.pdf

여러 파일에 변경 사항을 적용하기 때문에 고정된 이름을 사용할 수 없으므로 소스 파일이 제공되었다고 가정하고 대상 파일 이름을 생성합니다.

file=in.pdf                  # in.pdf
dest=${file%.pdf}-out.pdf    # in-out.pdf

convert -density 300 -quality 100 -crop 0x50% "$file" "$dest"
montage -mode concatenate -tile 1x out-0.png out-0.png "$dest"

처리하려는 각 파일의 이미지가 출력과 일치하도록 동일해야 하는지 또는 이름이 지정 되어야 하는지 모르므 out-0.png로 이를 상수로 두겠습니다.

이제 각 파일에 효과를 차례로 적용해야 합니다. 일반적인 구조는 for루프이지만 목록에 파일이 있으므로 루프를 사용합니다 while.

while IFS= read -r file
do
    # Apply your changes to the "$file"
    #
    dest="${file%.pdf}-out.pdf"
    echo "Processing $file into ${dest##*/}" >&2

    convert -density 300 -quality 100 -crop 0x50% "$file" "$dest"
    montage -mode concatenate -tile 1x out-0.png out-0.png "$dest"

done <list-of-pdfs.txt

관련 정보