将pdf分成每个人的n页的pdf

时间:2014-05-18 13:51:56

标签: bash shell pdf

我曾尝试制作一个脚本,将单个pdf分成每个NUM页的n个部分,但我无法做到这个脚本的第二部分(一个循环):< / p>

#!/bin/sh

#Ask pdf filename
echo -n "Filename: "
read FILENAME

#Ask number of pages of every pdf
echo -n "Pages: "
read NUM

#Save pages number of the original pdf
PAG=$(pdftk $FILENAME.pdf dump_data|grep NumberOfPages| awk '{print $2}')

#Divide pdf into a pdf file for every page
pdftk $FILENAME.pdf burst output $FILENAME-%03d.pdf

现在我必须执行一个将NUM页合并为单个pdf的循环,例如,对于NUM = 3:

pdftk $FILENAME-001.pdf $FILENAME-002.pdf $FILENAME-003.pdf cat output PART-1.pdf
pdftk $FILENAME-004.pdf $FILENAME-005.pdf $FILENAME-006.pdf cat output PART-2.pdf
...
pdftk $FILENAME-(PAG-2).pdf $FILENAME-(PAG-1).pdf $FILENAME-PAG.pdf cat output PART-X.pdf

然后,对于每个获得的PDF(PART-1.pdfPART-2.pdf,...,PART-X.pdf),我必须执行以下操作:

pdftops PART-X.pdf PART-X.ps

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

我认为while循环是这里的方式:

#!/bin/sh

...


#Save pages number of the original pdf
PAG=$(pdftk $FILENAME.pdf dump_data|grep NumberOfPages| awk '{print $2}')


# create parts 'from'-'to' given by NUM
PAG_FROM=1; PAG_TO=$NUM
while [ "$PAG_TO" -le "$PAG" ]; do
    FILE_OUT="PART-$(printf %03d $PAG_FROM)-$(printf %03d $PAG_TO)"
    pdftk $FILENAME.pdf cat $PAG_FROM-$PAG_TO output $FILE_OUT.pdf
    pdftops $FILE_OUT.pdf $FILE_OUT.ps
    PAG_FROM=$((PAG_FROM+$NUM))
    PAG_TO=$((PAG_TO+$NUM))
done

# execute pdftk on trailing pages
if [ $PAG_FROM -le $PAG ]; then
    FILE_OUT="PART-$(printf %03d $PAG_FROM)-$(printf %03d $PAG)"
    pdftk $FILENAME.pdf cat $PAG_FROM-$PAG output $FILE_OUT.pdf
    pdftops $FILE_OUT.pdf $FILE_OUT.ps
fi

我建议您在开头更改您的FN变量 FILENAME=$(basename $1),您可以轻松触发脚本:

scriptname.sh <name of file>.pdf

我自己测试了一个8页的文件,应该工作得很好!

答案 1 :(得分:0)

有几种方法可以做到这一点。您可以使用您对页数的了解,然后进行数学计算以构建粘合命令。我会选择一个使用肯定存在的文件的解决方案,并依靠编号为您提供正确的订单:

NUM=3
pages_done=0
files=''
part=1
for file in ./$FILENAME-*
do
    files="$files $file"
    (( pages_done++ ))

    if [[ $pages_done -eq $NUM ]]
    then
        echo glue $files into part-$part
        pages_done=0
        files=''
        (( part++ ))
    fi
done


# Take care of any dangling files that did not make a group of size NUM
if [[ -n $files ]]
then
    echo glue $files into part-$part
fi