Linux에서 여러 jpg를 단일 pdf로 병합
다음 명령을 사용하여 jpg
디렉토리의 모든 파일을 단일 pdf 파일 로 변환하고 병합했습니다 .
convert *.jpg file.pdf
디렉토리에있는 파일의 번호는 1.jpg
에서 123.jpg
. 변환은 잘되었지만 변환 후 페이지가 모두 섞여있었습니다. 나는에서 페이지가있는 PDF 원 1.jpg
에 123.jpg
그들이 이름을 지정하는 순서와 동일합니다. 다음 명령도 시도했습니다.
cd 1
FILES=$( find . -type f -name "*jpg" | cut -d/ -f 2)
mkdir temp && cd temp
for file in $FILES; do
BASE=$(echo $file | sed 's/.jpg//g');
convert ../$BASE.jpg $BASE.pdf;
done &&
pdftk *pdf cat output ../1.pdf &&
cd ..
rm -rf temp
그러나 여전히 운이 없습니다. 운영 플랫폼 Linux.
문제는 쉘이 순전히 알파벳 순서로 와일드 카드를 확장하고 숫자의 길이가 다르기 때문에 순서가 올바르지 않기 때문입니다.
$ echo *.jpg
1.jpg 10.jpg 100.jpg 101.jpg 102.jpg ...
해결책은 파일 이름을 필요에 따라 0으로 채워서 convert 명령을 실행하기 전에 길이가 같도록하는 것입니다.
$ for i in *.jpg; do num=`expr match "$i" '\([0-9]\+\).*'`;
> padded=`printf "%03d" $num`; mv -v "$i" "${i/$num/$padded}"; done
이제 파일이 올바른 순서로 와일드 카드와 일치하여 convert 명령을 사용할 수 있습니다.
$ echo *.jpg
001.jpg 002.jpg 003.jpg 004.jpg 005.jpg 006.jpg 007.jpg 008.jpg ...
또는 ls
설명서를 읽고 다음 을 참조하십시오.
-v 텍스트 내에서 자연스러운 종류의 (버전) 번호
따라서 단일 명령으로 필요한 작업을 수행합니다.
convert `ls -v *.jpg` foobar.pdf
재미있게 보내세요;) F.
이것이 내가하는 방법입니다 :
첫 번째 줄은 convert 명령을 사용하여 모든 jpg 파일을 pdf로 변환합니다.
두 번째 줄은 모든 pdf 파일을 페이지 당 pdf로 하나의 단일 파일로 병합하는 것입니다. 이것은 gs ((PostScript 및 PDF 언어 인터프리터 및 프리 뷰어))를 사용하고 있습니다.
for i in $(find . -maxdepth 1 -name "*.jpg" -print); do convert $i ${i//jpg/pdf}; done
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=merged_file.pdf -dBATCH `find . -maxdepth 1 -name "*.pdf" -print"`
당신은 사용할 수 있습니다
convert '%d.jpg[1-132]' file.pdf
https://www.imagemagick.org/script/command-line-processing.php 를 통해 :
다른 이미지 파일을 참조하는 또 다른 방법은 장면 범위와 함께 파일 이름에 서식 지정 문자를 포함하는 것입니다. 파일 이름을 고려하십시오
image-%d.jpg[1-5]
. 명령
magick image-%d.jpg[1-5]
ImageMagick이 다음 파일 이름을 가진 이미지 읽기를 시도합니다.
image-1.jpg image-2.jpg image-3.jpg image-4.jpg image-5.jpg
참조 https://www.imagemagick.org/script/convert.php
(스캔 한 책에서) 많은 고해상도 jpeg 이미지를 병합하려고 할 때 위의 모든 답변이 실패했습니다.
Imagemagick은 모든 파일을 RAM에로드하려고했기 때문에 다음과 같은 2 단계 접근 방식을 사용했습니다.
find -iname "*.JPG" | xargs -I'{}' convert {} {}.pdf
pdfunite *.pdf merged_file.pdf
이 방법을 사용하면 GNU 병렬을 사용하여 변환 속도를 높일 수도 있습니다.
find -iname "*.JPG" | parallel -I'{}' convert {} {}.pdf
첫 번째 아이디어와 답장을 섞으면이 코드가 만족 스러울 것 같습니다.
jpgs2pdf.sh
#!/bin/bash
cd $1
FILES=$( find . -type f -name "*jpg" | cut -d/ -f 2)
mkdir temp > /dev/null
cd temp
for file in $FILES; do
BASE=$(echo $file | sed 's/.jpg//g');
convert ../$BASE.jpg $BASE.pdf;
done &&
pdftk `ls -v *pdf` cat output ../`basename $1`.pdf
cd ..
rm -rf temp
참조 URL : https://stackoverflow.com/questions/13618236/merge-multiple-jpg-into-single-pdf-in-linux
'IT story' 카테고리의 다른 글
Facebook에서 장기 라이브 액세스 토큰 받기 (0) | 2020.12.29 |
---|---|
PHP 파열하지만 각 요소를 따옴표로 묶습니다. (0) | 2020.12.29 |
'rake db : migrate RAILS_ENV = test'를 실행하라는 메시지가 표시되는 이유는 무엇입니까? (0) | 2020.12.29 |
잘못된 익명 형식 멤버 선언자 (0) | 2020.12.29 |
“Prepare for Submission”상태의 itunesconnect 앱을 삭제하는 방법은 무엇입니까? (0) | 2020.12.29 |