⛳
A4PDFをA3に4アップするシェルスクリプト
(Ubuntu22.04)
やりたいこと
- A4のPDF(縦)を、4ページずつA3のPDF(縦)に入れて出力する
私の用途
- IPAの問題集で、A5の本をPDF(A4)で配布してくれるのですが、コンビニ印刷では思うように小さく印刷できない
- A4からA3に4アップにしてから、小冊子にして印刷しています。これで本より少し小さい(80%くらい)で印刷できて嬉しい
コード
使い方
bash merge_a4_to_a3.sh input.pdf output.pdf
前提:pdftk
とpdfjam
がインストールされていること
sudo apt update
sudo apt install pdftk texlive-extra-utils
merge_a4_to_a3.sh
#!/bin/bash
# Check for input file
if [ "$#" -ne 2 ]; then
echo "Usage: $0 inputfile.pdf outputfile.pdf"
exit 1
fi
inputfile=$1
outputfile=$2
# Extract number of pages
numpages=$(pdftk "$inputfile" dump_data | grep NumberOfPages | cut -d " " -f2)
# Process all pages
startpage=1
temppages=()
while [ $startpage -le $numpages ]
do
# Calculate end page for the current batch of 4 pages
endpage=$((startpage + 3))
[ $endpage -gt $numpages ] && endpage=$numpages
tempfile="temp_pdfjam_$startpage-$endpage.pdf"
temppages+=("$tempfile")
# List each page only once
pages=$(seq $startpage $endpage | tr '\n' ',' | sed 's/,$//')
# Convert the pages. Using portrait orientation for A3
pdfjam "$inputfile" $pages --nup 2x2 --frame true --outfile "$tempfile" --papersize '{297mm,420mm}'
# Update the start page for the next iteration
startpage=$((endpage + 1))
done
# Merge all temporary files
pdftk "${temppages[@]}" cat output "$outputfile"
# Remove temporary files
rm "${temppages[@]}"
echo "Processing completed. Check $outputfile."
説明
説明:
このシェルスクリプトは、A4サイズのページが含まれる入力PDFファイルを受け取り、次のフォーマットで、4つのA4ページを1つのA3サイズのページに結合する出力PDFファイルを作成します。
page1 page2
page3 page4
スクリプトの説明:
-
スクリプトは、正しい数の引数が提供されているかどうかを確認して開始します。入力PDFファイル名と出力PDFファイル名を期待しています。
-
入力PDFのページ数を
pdftk
を使用して取得します。 -
スクリプトは、ページを4つずつ(または4ページ未満の場合はそれ未満)で処理します。各グループに対して:
-
結合されるページのシーケンス(
startpage
からendpage
まで)を計算します。 -
pdfjam
ユーティリティを使用して、これらのページをA3ページの2x2のグリッドに結合し、結果を一時ファイルに保存します。
-
-
全てのページを処理した後、スクリプトは
pdftk
を使用して、一時的なA3ページを単一の出力PDFに結合します。 -
最後に、スクリプトは一時ファイルを削除してクリーンアップします。
Discussion