2

スキャナーに給紙がありますが、両面スキャンがありません。したがって、シートの両面に印刷されている複数ペ​​ージのドキュメントをスキャンすると、2つのpdfファイルが作成されます。1つはすべて奇数ページ(奇数ページpdfファイル)、もう1つはすべて偶数ページ(偶数ページのPDFファイル)。

偶数ページのpdfファイルの各ページが1ページおきに奇数ページのpdfファイルに追加されるように、2つのファイルをマージするGhostscriptスクリプトを作成できるはずだと思います。

誰かがそれを行う方法を知っていますか?

できれば、スクリプトは引数を取るので、最初の引数は出力ファイルを指定し、2番目の引数は奇数ページのpdfファイルを指定し、3番目の引数は偶数ページの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

ですから、私が正しく理解していれば、2つのPDFファイルがあります

  • odd.pdf
  • even.pdf

そして、これらの2つのマルチページ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

NB。コマンドラインでファイル名を指定するか、スクリプトでファイル名を尋ねられます。

それが他の誰かを助けることを願っています。

于 2013-06-10T08:25:32.427 に答える
1

ページをインターリーブするPDFをマージする場合は、jPDFTweakを使用します。すべてのページを逆順にするには、PDFToolsを使用します

于 2012-12-24T00:43:50.520 に答える
1

問題は、これを効率的に行うために一度に2つのPDFファイルを開く必要があることですが、それは現在不可能だと思います。

これをすばやく行うための唯一の方法は、「%d」形式のOutputFileオプションを使用して、各PDFの各ページを個別のファイルに出力することです。次に、個々のファイルをGhostscriptにフィードバックして、それらすべてを1つの最終的なPDFファイルに結合することができます。

おそらく、PostScriptを記述して基本的に同じタスクを実行することでそれを行うことができますが、シェルスクリプトを使用するとおそらく簡単になります。

于 2012-08-30T18:29:59.297 に答える
0

私はまさにそれを行うJavaアプリケーション(Windows / Linux)をコーディングしました!1つのPDFのすべての偶数ページをスキャンしてから(フィーダーを使用して)PDFのすべての奇数ページをスキャンする必要があります。その後、このツールを使用してそれらを組み合わせることができます。

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

2つのPDFファイルのパスを入力するだけで、残りは自動的に処理されます。:)

于 2013-12-22T08:13:33.413 に答える