PDF 책의 각 페이지를 가로로 눕혀 반으로 잘라, 다시 PDF로 묶어내는 쉘 스크립트입니다.
화면이 작은 전자책에서 A4 또는 Letter 사이즈 PDF 책을 편하게 읽기위해 간단히 만들어 본것으로,
책한권 내 페이지의 크기가 모두 동일한 경우 제대로 작동하는 버전으로, 이미 이북단말기에서 읽기 좀더 편하도록 각 페이지의 크기를 제각각 다르게 해 놓은 PDF 파일은 스크립트를 약간 손봐야 합니다.
와일드 카드를 사용해 한권으로 묶어내려니 메모리 부족/오픈파일 갯수 초과 등으로 제대로 작업이 안되는 관계로, 약간은 무식하게 처리한 방법입니다.
#!/bin/sh
PWD=`pwd`
PDF_FILENAME=${1%%.pdf}
NEW_SIZE=1
TMP_DIR=$PWD/tmp-$PDF_FILENAME
echo "EXTRACTING PAGE TO IMAGE..." && \
mkdir $TMP_DIR && pdftoppm -png $1 $TMP_DIR/p && \
{
FIRST_FILE=`ls $TMP_DIR/p-* | head -n 1`
IMAGE_H=`identify $FIRST_FILE | cut -d ' ' -f 3 | cut -d x -f 2`
IMAGE_W=`identify $FIRST_FILE | cut -d ' ' -f 3 | cut -d x -f 1`
H_ODD=$(($IMAGE_H%2))
H_HALF=$(($IMAGE_H/2))
if [ $H_ODD > 0 ]; then
H_HALF=$(($H_HALF+1))
fi
NEW_SIZE=`echo $H_HALF'x'$IMAGE_W`
} && cd $TMP_DIR && \
{
for IMAGE_FILE in `ls p-*`
do
convert $IMAGE_FILE -rotate 270 r-$IMAGE_FILE && echo "ROTATE "$IMAGE_FILE
done
} && \
{
for IMAGE_FILE in `ls r-*`
do
convert $IMAGE_FILE -crop $NEW_SIZE out-$IMAGE_FILE && echo "CROP "$IMAGE_FILE
done
} && \
{
for IMAGE_FILE in `ls out-*`
do
convert $IMAGE_FILE -page $NEW_SIZE $IMAGE_FILE.pdf && echo "IMAGE TO PDF PAGE "$IMAGE_FILE
done
} && \
{
FIRST_PDF_PAGE=`ls out-*.pdf | head -n 1`
PAGE_COUNTER=1
BOOK_COUNTER=1
mv $FIRST_PDF_PAGE out.pdf && \
{
for PDF_PAGE in `ls out-*.pdf`
do
echo "PROCESSING BOOK "$BOOK_COUNTER",PAGE "$PAGE_COUNTER
if [ $PAGE_COUNTER -eq 100 ]; then
mv out.pdf ../$PDF_FILENAME-$BOOK_COUNTER.pdf && mv $PDF_PAGE out.pdf
BOOK_COUNTER=$(($BOOK_COUNTER+1))
PAGE_COUNTER=1
else
pdfunite out.pdf $PDF_PAGE out2.pdf && mv out2.pdf out.pdf
PAGE_COUNTER=$(($PAGE_COUNTER+1))
fi
done
} && \
if [ -e out.pdf ]; then
mv out.pdf ../$PDF_FILENAME-$BOOK_COUNTER.pdf
fi
} && echo "ALL DONE"