2

我的扫描仪有进纸但没有双面扫描。因此,如果我扫描打印在纸张两面的多页文档,我将得到两个 pdf 文件,一个包含所有奇数页(奇数页 pdf 文件),另一个包含所有偶数页(偶数页 pdf 文件)。

我觉得应该可以有一个 Ghostscript 脚本来合并这两个文件,从而使偶数页 pdf 文件中的每一页都像其他页面一样添加到奇数页 pdf 文件中。

有人知道该怎么做吗?

优选地,脚本将采用参数,以便第一个参数指定输出文件,第二个参数指定奇数页 pdf 文件,第三个参数指定偶数页 pdf 文件。

4

6 回答 6

4

简单得多:(来自超级用户

pdftk A=even.pdf B=odd.pdf shuffle A B output merged.pdf

或者如果 B 的页面顺序相反:

pdftk A=even.pdf B=odd.pdf shuffle A Bend-1 output merged.pdf
于 2014-12-22T15:03:38.693 回答
2

所以,如果我理解正确的话,你有两个 pdf 文件

  • 奇数.pdf
  • 偶数.pdf

你需要从这两个多页pdf文件中交错这些页面:(奇数,偶数,奇数......等等......)

我前段时间写了,出于同样的需要,我附上了一个脚本,它是交互式的,这意味着它要求参数,如果您更喜欢非交互式脚本,我可以修改它

它只需要PDFTK

#!/bin/bash
#script able to interleave the pages of two pdf files, saving the result in a new pdf file. Useful for any use, specially to mount parallel text books
echo "enter the name (with extension) of first PDF"
read filename1
echo "enter the name (with extension) of second PDF"
read filename2
pages1="`pdftk $filename1 dump_data output |grep Pages|cut -f2 -d :`"
pages2="`pdftk $filename2 dump_data output |grep Pages|cut -f2 -d :`"

if [ $pages1 -gt $pages2 ]
    then
    pagesincr="$(echo "scale=0; $pages2+1" |bc -l)"
echo "$filename1 has $pages1 pages"
echo "$filename2 has $pages2 pages"

rule="$(for x in $(seq 1 $pages2); do echo -n "A$x B$x ";  done; for x in $(seq $pagesincr $pages1); do echo -n "A$x ";done)"


    echo $rule

        elif
        [ $pages2 -gt $pages1 ]
            then
    pagesincr="$(echo "scale=0; $pages1+1" |bc -l)"

echo "$filename1 has $pages1 pages"
echo "$filename2 has $pages2 pages"

rule="$(for x in $(seq 1 $pages1); do echo -n "A$x B$x ";  done; for x in $(seq $pagesincr $pages2); do echo -n "B$x ";done)"


    echo $rule
                else
echo "$filename1 has $pages1 pages"
echo "$filename2 has $pages2 pages"

rule="$(for ((a=1, b=1; a <= $pages1, b <= $pages2 ; a++, b++)); do echo -n "A$a B$b "; done)"

echo $rule
fi

pdftk A=$filename1 B=$filename2 cat $rule output interleaved.pdf
echo "file created!"
exit 0
于 2012-08-31T07:05:47.557 回答
2

我在上面尝试了 Dingo 的脚本,它似乎运行良好。

但是,在我的情况下,“偶数”文件中的页面是相反的。我只是将整叠页面翻过来并放回扫描仪中。因此,如果我扫描了 5 个双面页面,我将拥有:

奇数:1、3、5、7、9

偶数:10、8、6、4、2

我需要的是最终输出: A1 B5 A2 B4 A3 B3 A4 B2 A5 B1

#!/bin/bash
#script able to interleave the pages of two pdf files, saving the result in a new pdf file. 
#Useful for any use, specially to mount parallel text books

# This version assumes that filename2 is in the reverse order
# This is normally what happens if you just flip the pages over
# and scan the second side.

args=$#

if [[ $args -ge 2 ]]
then
  filename1=$1
  filename2=$2
  if [[ $args -ge 3 ]]
  then
    outputfile=$3
  else
    outputfile="interleaved.pdf"
    echo "output file will be: $outputfile"
  fi
else
  echo "enter the name (with extension) of first PDF"
  read filename1
  echo "enter the name (with extension) of second PDF"
  read filename2
  echo "enter the name (with extension) of the output PDF"
  read outputfile
fi

pages1="`pdftk "$filename1" dump_data output |grep Pages|cut -f2 -d :`"
pages2="`pdftk "$filename2" dump_data output |grep Pages|cut -f2 -d :`"


if [ $pages1 -gt $pages2 ] 
then
      pagesincr="$(echo "scale=0; $pages2+1" |bc -l)"
      echo "$filename1 has $pages1 pages"
      echo "$filename2 has $pages2 pages"

      rule="$(for ((a=1, b=$pages2 ; a <= $pages1, b >= 1 ; a++, b--)); do echo -n "A$a B$b "; done; for x in $(seq $pagesincr 1 $pages1); do echo -n "A$x ";done)"

      echo $rule

elif [ $pages2 -gt $pages1 ] 
then

      echo "$filename1 has $pages1 pages"
      echo "$filename2 has $pages2 pages"

      pagesincr=$(($pages2 - $pages1))
      echo $pagesincr
      rule="$(for ((a=1, b=$pages2 ; a <= $pages1, b >= (($pages2 - $pages1 + 1)) ; a++, b--)); do echo -n "A$a B$b "; done;  for x in $(seq $pagesincr -1 1); do echo -n "B$x ";done)"

      echo $rule
else
  echo "$filename1 has $pages1 pages"
  echo "$filename2 has $pages2 pages"

  rule="$(for ((a=1, b=$pages2 ; a <= $pages1, b >= 1 ; a++, b--)); do echo -n "A$a B$b "; done)"

  echo $rule
fi

pdftk A="$filename1" B="$filename2" cat $rule output "$outputfile"
echo "file created!"
exit 0

注意。您可以在命令行上提供文件名,或者脚本会询问您。

希望对其他人有所帮助。

于 2013-06-10T08:25:32.427 回答
1

如果要合并 PDF 交错页面,请使用 jPDF Tweak。要反转所有页面的顺序,请使用 PDFTools

于 2012-12-24T00:43:50.520 回答
1

问题是您需要一次打开 2 个 PDF 文件才能有效地执行此操作,而目前我认为这是不可能的。

我能快速想到的唯一方法是使用“%d”格式的 OutputFile 选项将每个 PDF 的每一页输出到单独的文件中。然后,您可以将各个文件反馈给 Ghostscript,以将它们全部组合成一个最终的 PDF 文件。

您可能可以通过编写一些 PostScript 来完成基本相同的任务,但使用 shell 脚本可能更容易。

于 2012-08-30T18:29:59.297 回答
0

我编写了一个 java 应用程序(Windows/Linux),它就是这样做的!您必须扫描一个 PDF 中的所有偶数页,然后扫描 PDF 中的所有奇数页(使用进纸器),然后您可以使用此工具将它们合并:

http://sourceforge.net/projects/duplexmerger/

您只需输入 2 个 PDF 文件的路径,其余的将自动处理。:)

于 2013-12-22T08:13:33.413 回答