我曾尝试制作一个脚本,将单个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.pdf
,PART-2.pdf
,...,PART-X.pdf
),我必须执行以下操作:
pdftops PART-X.pdf PART-X.ps
有人可以帮助我吗?
答案 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