Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将一个pdf文件分成若干个pdf文件,每个pdf文件有n页_Bash_Shell_Pdf - Fatal编程技术网

Bash 将一个pdf文件分成若干个pdf文件,每个pdf文件有n页

Bash 将一个pdf文件分成若干个pdf文件,每个pdf文件有n页,bash,shell,pdf,Bash,Shell,Pdf,我曾尝试制作一个脚本,将单个pdf文件分成每个人的NUM页面的n部分,但我无法完成该脚本的第二部分(一个周期): 现在我必须做一个循环,将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 P

我曾尝试制作一个脚本,将单个pdf文件分成每个人的
NUM
页面的n部分,但我无法完成该脚本的第二部分(一个周期):

现在我必须做一个循环,将
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

有人能帮我吗?

有几种方法。你可以使用你的知识的页数,然后做数学来构造粘合命令。我会选择一种解决方案,使用肯定存在的文件,并依靠编号为您提供正确的顺序:

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

我认为在这里进行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
scriptname.sh.pdf
我自己测试了一个8页的文件,应该可以正常工作

scriptname.sh <name of file>.pdf