PDFファイル(数百ページ以下)をA5サイズの小冊子に手作りする方法

# 0. 概要 : A5サイズの冊子製本
数十～数百ページのPDFファイルをパソコンで眺めるよりも、印刷した方が理解しやすいという人は多かろう。ここでは、Adobeのソフトの「小冊子」印刷の機能を使って、A4の紙に印刷して、それぞれの紙を2つ折りにして、小冊子にする方法を説明する。

しかし、1個のPDFファイル(Nページ)を「小冊子」印刷をしても、印刷された紙は、1枚目に印刷されているのは、 必ずしも、1, 2, 3, 4ページ目ではない。最初の紙に、最後のページも印刷されたりする。従って、1枚ずつ半分に折って重ねたらページ番号順の冊子にはならない。あくまで印刷された全部に対して、まとめて、半分に折ることが前提の印刷順序になるのである。( [Adobe内1](https://helpx.adobe.com/jp/acrobat/kb/print-booklets-acrobat-reader.html) [Adobe内2](https://helpx.adobe.com/jp/acrobat/using/ways-print-pdfs.html) [noteの記事](https://note.com/shuwasystem/n/n7e3b95018f18) )

なので、10ページくらいの冊子なら、「小冊子」印刷そのままで、印刷してホッチキス留めでも良いが、30ページ以上のPDFファイルだと簡単ではない。印刷屋に印刷した紙を持ち込んで、製本してもらう作業が必要となりうる。

この面倒さを解決するため、Adobeのソフトから印刷する際に、ページ順序を適切に指定すれば良い。そうするために、プログラム(以下ではPerl言語)で、ページ番号を生成する方法をこの記事で紹介する。たとえば、1,2,3,4,5,6,7,8 を1,2,5,6,7,8,3,4 に並び替えるようにするのである。こうすると、1枚目に1,2,3,4、2枚目に5,6,7,8ページ目が印刷されて、都合が良い。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97315/0759a91e-b0c5-479c-bb3a-f9003b3944f2.png)


(この画像は、約200ページのある学会の抄録を製本したものである。) 

背表紙は、接着剤を塗る。100ページ未満なら大型ホッチキス、20ページ未満なら普通の小さいホッチキスで、ホッチキス留めで良いであろう。このように手作りで製本することで 、閲覧・持ち運び・保管が便利になる。


○○

以下、パソコン環境に関する前提を列挙する : 
* パソコンは、ある程度使いこなせる人を対象にした文章である。

この記事の後半から始まる印刷手順で[最も簡単な方法](#(1)-最も簡単な方法-:)をするだけであれば、以下の条件について気にする必要は無い([1. Acrobatのソフトを使った印刷時の設定](#1.-acrobatのソフトを使った印刷時の設定)から読むと良い)。 : 

* 後半では、CUIのコマンドラインを使って、ページの入れ替えの指定をする。
* コマンドラインで使うソフトウェア(**Perl**と**pdftk**)のインストールしてあるものとする。
    * pdftkが無くとも、この記事で紹介する3通りの内、2通りは実行出来る。
* ここで言うコマンドラインは、以下の通りである
    * Windows 11等ですぐに使えるコマンドプロンプト(**cmd.exe**で起動)とWSL(Windows Subsystem for Linux)である(**wsl.exe**で起動可能)。Windowsだとこれら両方を使う。
    * OSX(Mac)ならターミナル(**Terminal.app**)などを使う。他にも何か1つのコマンドラインを使えるソフト(iterm2.appなど)があれば完結するであろう。
    * これらのソフトを起動する方法は、Windowsであれば、スタートボタン+Rで起動する「ファイル名を指定して実行」、OSX(Mac)であれば、Spotlight(Cmd+Spaceなどで起動)がある。
* Adobe Acrobatのソフトウェアである **Adobe Acrobat Reader** などのソフト(PDF形式のファイルを閲覧および印刷するソフト)は、既にインストールしてあるものとする。(有料版のAdobe Acrobat Pro でも良い。)

> 以下、やや長文となったが、この記事を書いた本人が、1年以上かけて体得したことを文章にしたら、冗長になった面もある。この文章の細かいことにこだわらず、要領を得て、自分の手でまずは試行錯誤するのが良いであろう。 また、文を継ぎ足しで書いている(書きながらいろいろなことを思い出して加筆している)ので、この文書はまだ一貫性がない部分がいくつか残っている。

 
「自分の目で読むのに使う資料を製本する」ものと考えると、意外と手間はかからないし(読む方の時間が圧倒的に長いはずである)、印刷屋に製本をお願いすると高く付くことを考えると、コストパフォーマンスがとても良い。
# 1. Acrobatのソフトを使った印刷時の設定 

Adobe社のAcrobat ReaderなどのPDFファイルを閲覧するソフトを使うと、その印刷機能で「小冊子」で印刷が出来る。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97315/05c34ad0-32cd-41c3-be01-367cdb2c493c.png)

以下、PDF閲覧ソフトとは、Adobe Acrobat Readerを仮定する。まだ、上手くいくまで試行錯誤を必要する場面は多いことを予めここに記す。たとえば、次のような場合には、相応の工夫を要する。
* ページが回転してしまうことがある(元のPDFファイルに、1ページに大きな表があって90度回転している場合などにそのようなことが起こる)。
* ページ番号が1始まりでない場合(1万ページ目で始まるなど)、アラビア数字以外が使われている場合(ローマ数字)、さらには、ページ番号が不規則な場合(自動生成されたPDFで最初か最後に、元のPDFファイルについての情報を記載した1ページが追加された場合など)もある。
    * その場合は、一度、PDFファイルを生成する(「プリンター」の指定を変えて、PDF形式に保存するように設定する)ことをして、1から付け直す方法もある。
* プリンターの設定は、「向き」を「縦」と「横」、自動回転などの調整を要するかもしれない。

**ページの順序を元のPDFファイルから変えて印刷する方法は、以下の3通りがある。どれかを選ぶこと。** 慣れないうちは1番目、その次に2番目、最後に3番目を試すのが良いであろう。

### (1) 最も簡単な方法 :

**単純作業だが、ページ数が多いと手間が多く感じられる方法である。** 元のPDFファイルを最初のページから最後まで4ページずつ印刷することを繰り返す。

1. PDF印刷画面を起動する。
1. まず「小冊子」をクリックして、「ページ指定」をクリックする。
1. ページ指定の数字を1-4を指定して印刷し、5-8を指定して印刷し、9-12を指定して印刷し、ということを最後のページに達するまで繰り返す。

※ 上記の「最も簡単な方法」は、ひたすら4ページごとの繰り返しである。その繰り返しを低減する方法は、以下の2通りの方法がある。

### (2) ページの順序を変えて印刷 : 
**20～100ページ程度の場合に最適の方法である。** (途中で、1行のPerl言語をコマンドラインで実行して、ページ番号の指定をする文字列を生成する。)

「ページ指定」に書き込める文字列の制約の為に、20ページずつごとくらいになるが、ページ指定において、「1-2,5-6,9-10,13-14,17-20,15-16,11-12,7-8,3-4」のような指定をすれば、印刷後に紙を2つ折りにすると、丁度よいページ順序になる。

ただし、ページ指定の欄に入る文字数は決まっていたり(最大で99文字)、ページ指定の欄で認識できる文字列は何か制限がある。コピペした際に、コピペした文字列の最後の文字がきちんと入力されているか、目で確認すること。

このようなページ指定の文字列を出力するには、次のコマンド文を使う。まず、元のPDFファイルが**20ページ**の場合を説明する。

(1) [WSL](https://learn.microsoft.com/ja-jp/windows/wsl/install) またはターミナルなどで次のようなコマンド文を実行する。 

```
perl -E'$p=0;for(1..4){splice @P,@P/2,0,($p+1)."-".($p+2),($p+3)."-".($p+4);$p+=4};splice@P,@P/2,0,($p+1)."-".($p+4);say join",",@P'
```
もしくは
```
perl -E'$p=1;splice@P,@P/2,0,$_?($p++."-".$p++,$p++."-".$p++):$p."-".($p+3)for-4..0 ;say join",",@P'
```
もしくは
```
perl -E'$p=1;splice@P,@P/2+.5,0,$_?$p++."-".$p++:$p."-".($p+3)for-8..0;say join",",@P'
```

上記で[splice](https://perldoc.jp/func/splice)はPerlの関数である。配列に対して、指定された位置に、指定した個数の要素を抜き出した上で、別の要素をいくつか挿入する。(ここでは、配列の丁度中央に、何も抜き出さないで(0個を抜き出して)、`$p+1`から`$p+4`までの数を範囲指定した文字列にして、挿入している。)  

(2) 上記のコマンド文を実行すると、次の文字列が出力される。その文字列を全て「ページ指定」の部分にコピペする。

> 1-2,5-6,9-10,13-14,17-20,15-16,11-12,7-8,3-4

(この指定により、1-4ページは1枚目、5-8は2枚目...、最後の紙に17-20ページとなるように印刷してくれるようになる。)

上記は、ページが1始まりで20ページの場合に限った場合であった。それ以外の場合は、次のように、上記の手順を部分的に変える必要がある : 

4. 印刷したいPDFファイルのページ数が、4の倍数で無い場合 : そのPDFファイルのできる限り先まで4の倍数のページ数を小冊子印刷で印刷する。そして、残りの1～3ページを小冊子印刷をして、印刷を終える。

1. Adobe Acrobat Readerで表示しているページ番号を確認して、始まりのページの番号を確認する。その番号が1で無い場合、それに合わせて、上記のコマンド文の最初の`$p=0`または`$p=1`の値の設定を変えること。
2. 反復を指示している`for(0..3)`(R-1=4回)または`for-4..0`(R=5回),`for-8..0`(2R-1=9回)について、0で数値をページ数に合わせて置き換えること。20枚を印刷する場合であれば、20を4で割った商の5回の繰り返しR=5で調整しているが、他の枚数ならそれに合わせて増減する。
3. 20ページを超える場合 : 20ページずつ最後のページまでを、1-20,21-40,41-60..のように分けて考えて、それら20ページまたはそれ以下のかたまりごとに印刷すること。最後に20ページ未満になる場合は、この4項目全体を理解して、工夫すること。


時折、以下のような場合もある : 
-  PDFファイルによっては、開始ページが1でなくて10000のような大きな数の場合もある。そのような場合は、「ページ指定」に指定できる文字列の長さの制限にひっかからないか注意すること。たとえば、ページ番号が1～3桁のページ番号でなく5～6桁もある場合も有る。となると、99文字の制限を突破してしまう場合がある。もしそうなった場合は、20まいごとでなくて、もっと減らす必要があるかもしれない。
- 元のPDFファイルのページの打ち方が、単純なアラビア数字の連番で無い場合がある。その様子は、印刷してから気付くことも多いであろうが(思った通りに印刷されないため)、Adobe Acrobat Readerのページ番号の表示、それと、印刷画面のページ指定に元から入っている文字列(最初と最後のページ番号から分かる)でも確認が出来る。
    - Windowsの場合は、プリンター名を変えて、「PDF形式で保存する」「Microsoft Print to PDF」または「Adobe PDF」などを指定して、ページ番号が1から始まる新たなPDFファイルを生成する。
    - OSX(Mac)の場合は、PDF保存を選択して、上記のWindowsの場合と同じ結果になるようにする。
   - 後の方法を使う様になるが、pdftkを使って、pdfファイルを生成する方法も使えるであろう。 


### (3) 数百ページの場合 :
**汎用的だが pdftk も使って、さらに一手間かける方法である。**

数百ページを持つPDFファイルだと、上記の方法でも、20ページずつなので手間が掛かるし、ページ指定のミスが混入するリスクが上がる。その場合は、pdftkを使って、ページの順序を入れ替えたPDFファイルを新たに作って、それを「製本印刷」で対応すると、1度の印刷で済む。

ただし、ページ数が4の倍数で無い場合は、既に書いた通り、残りの1～3ページを小冊子印刷する一手間がかかる。

○○

上記を行うための本質的な手順は次のようになる。

(1) [pdftk](https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/) をインストールして使える様にする。下記のコマンドラインで使える様になる。 

* Windowsであれば、コマンドプロンプトもしくはpowershellから。
* OSX(Mac)であれば、ターミナルまたはiterm2から。

(2) wslで、次のコマンドを実行して、ページ番号を生成する。

```
perl -E'$p=0;for(1..26){splice @P,@P/2,0,$p+1..$p+4;$p+=4};say join" ",@P'
```
もしくは
```
perl -E'$p=0;splice @P,@P/2,0,$p+1..($p+=4)for 1..26;say join" ",@P'
```


出力されるページ番号は、この例だと、次のようになる。(1と2が最初に来て、3と4がこの順に最後に来る。最後に印刷されて出てくる1枚の紙に印刷される101-104の4個の数は、次の数列の丁度中央にある。)

> 1 2 5 6 9 10 13 14 17 18 21 22 25 26 29 30 33 34 37 38 41 42 45 46 49 50 53 54 57 58 61 62 65 66 69 70 73 74 77 78 81 82 85 86 89 90 93 94 97 98 101 102 103 104 99 100 95 96 91 92 87 88 83 84 79 80 75 76 71 72 67 68 63 64 59 60 55 56 51 52 47 48 43 44 39 40 35 36 31 32 27 28 23 24 19 20 15 16 11 12 7 8 3 4


(3) Windowsの場合は、コマンドプロンプトで、`pdftk ファイル名 cat ページ番号(半角空白区切り) output 新しいファイル名` により、ページ番号が入れ替わる。具体的には、次のようなコマンドラインを、上記で出力された文字列をコピペするなどして、コマンド文として作り、実行する。ここでは次のようなコマンド文を作る。(コマンドプロンプトだと8191文字までのコマンド文が使えるので、約2000ページまでは、この方法でできる筈である。)

> pdftk first.pdf cat 1 2 5 6 9 10 13 14 17 18 21 22 25 26 29 30 33 34 37 38 41 42 45 46 49 50 53 54 57 58 61 62 65 66 69 70 73 74 77 78 81 82 85 86 89 90 93 94 97 98 101 102 103 104 99 100 95 96 91 92 87 88 83 84 79 80 75 76 71 72 67 68 63 64 59 60 55 56 51 52 47 48 43 44 39 40 35 36 31 32 27 28 23 24 19 20 15 16 11 12 7 8 3 4 output second.pdf

上記で fist.pdfは印刷したい内容を含んだファイルの名前、second.pdf が新しく作られる、ページを入れ替えることによって、Acrobat readerの印刷で小冊子印刷の時に、ページ指定を何もしないか、単に`1-104`と記入すれば、後で2つ折りにした時に、正しいページ順序となる、一見ページ番号のでたらめなPDFファイルである。

(4) OSX(Mac)の場合は、下記の様な、既に示したコマンドラインをシングルクオーテーションまたは$( )で囲った次のコマンド文で、意図した通りにページを入れ替えたPDFファイルの生成が可能であろう(未検証)。


```
pdftk first.pdf `perl -E'$p=0;for(1..26){splice @P,@P/2,0,$p+1..$p+4;$p+=4};say join" ",@P'` output second.pdf
```

もしくは、

```
pdftk first.pdf $(perl -E'$p=0;for(1..26){splice @P,@P/2,0,$p+1..$p+4;$p+=4};say join" ",@P') output second.pdf
```

pdftkは次の様な便利な使い方がいろいろある。例えば、この[他のQiitaの記事](https://qiita.com/masashi_mizuno_chestnut/items/14c0b877bed7fee0877b)。 (ページ指定にハイフン(-)も使えることが分かるけれども、今回のこの記事の用途で、大きなメリットはないので、その方法は採用しなかった。)
# 2. 印刷する

PDF閲覧ソフトの「印刷」のボタンを押せば、印刷開始。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97315/dea5d957-511c-44c6-98fc-257398adfe16.png)

慣れないうちは、印刷されたものを見て、異状があれば、パソコンから「キャンセル」ボタンを押す。もしくは、プリンターで、キャンセルをすぐ押せるように、プリンターのキャンセルボタンの位置を予め確かめておくことが、勧められる。

次のような異状がありうる : 
- 印刷するページ数が、元のファイルの4分の1ではない。上記の画像では、元々208ページの資料が52枚に印刷されることになるはずである。しかし、何かミスをすると、104という半分の数となって、単純に両面印刷になっていたり、208というそのままの数になって、片面の普通の印刷になってしまっていたりする場合がある。
- 印刷された紙を半分に折ったとしても、意図した通りのページの貼り付けたにはなっていない場合がある。特に、元のページが180度回転して閲覧をしにくい場合がある。

上記の様な異状が有った場合は、印刷を中断して、印刷時の設定を確認すること。「ページサイズ処理」や「向き」の「縦」「横」「各シート内でページを自動回転」の辺りの設定をいろいろ変えて、試行錯誤することが求められる。(複雑な試行錯誤をする場合は、どういう設定をしたか、メモすることが勧められる。)  

# 3. 印刷後 : 背表紙の処理(接着orホッチキス) 

これより後の作業は、この説明を見なくても、印刷された紙を見れば、何をすればよいか分かると思われる(パソコンの作業でもないし、接着剤などの一般的な使い方のため)が、以下、説明をする。

(1) 印刷された紙(A4サイズ)をひたすら、半分に折る。
* 紙の順序が、何かのミスで乱雑にならないように、最低限の注意をすること(机のスペースを確保するなど)。
* 紙を折るときに正確に折ること。普通に肉眼で確認すれば、0.3ミリメートル以上の誤差は起きないであろう。

(2) 接着剤(カネダインなど)を背表紙に塗る。
* 捨てても良いような余分な紙で両側から挟んで、さらに、本を何冊も上から重ねて、5キログラムを、接着剤で汚れないようにしつつ、重みを載せる。
* ただし、接着中の紙は、容易にずれるので、輪ゴム3本くらいで紙がずれないように固定すると良い。
    * 多数の輪ゴムを使うと、製本中の紙がたわむ。
    * 輪ゴム無しだと、重ねた紙が斜めにずれたり、重ねた紙がある所から滑ってずれたような状態で、接着してしまうので、注意。(試行錯誤するうちに気付くであろう。)
    * カネダインで数十回試した所、夏でも冬でも3時間程度でほぼ接着が固まっている。「一晩待つ」必要は無かった。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97315/8c7cd14e-28a2-427e-9e0d-4cfc87a0bb7b.png)

(3) 接着以外でも、ホッチキスで重ねた紙を止めても良い。
* ホッチキス留めは、後で外して、重ねた紙の順序の入れ替えは、接着剤の場合に比べて容易である。
* ホッチキスの針の大きさは、いろいろある。普通のホッチキス(10号)の他に、11号針のホッチキスもあって、80ページくらいまでなら留めることができる。大型ホッチキスの利用も推奨される。
* ホッチキス留めする重ねた紙の厚みにより、ホッチキスの針は変える必要があるにしても、慣れると、容易に判断出来ることであろう。その試行錯誤を自分でするのが良いであろう。
* ホッチキスの針がしっかり閉じない場合もある。そのような場合、ホッチキスの針の先端が紙に食い込まずに、何かに引っかかりやすい状態になる。指に刺さったり、本を入れた鞄の中などで何かに刺さったりするようなトラブルを起こさないように、セロテープを何枚か上からの貼ると良い。ペンチまたはラジオペンチでかしめると良いかもしれない。

# 4. 製本後の注意

1. 接着剤止めで、実用上はおそらく十分な強度があるが、その製本された冊子を何度も読み込むように使うと(学会で抄録を何度見返すようなことをすると)だんだん紙が剥がれてくる。もともと、「紙の目に沿わない」接着をしているので、通常の本に比べて、冊子を開いたときに、背表紙に力がかかりやすく、それが「バネが効いて」使い心地が良いのだが、そこまで丈夫では無いので有る。従って、必要に応じて2冊作ると良い。

2. 学会などで持ち歩いていると、必ず欲しがる人が出てくるので、同じものを3部～5部以上作ると良いであろう。きっと有り難がられるし、人脈もそれで広がるかもしれない。 

# その他
* 100ページくらいを印刷して、キンコーズなどの印刷屋に持ち込んで、半分に切断して、クルミ製本をすれば、5年位前までは、500円くらいで済んだが、今はその10倍くらいかかる。コロナ禍の間に、原稿持ち込みの場合は、2000円以上加算されるようになってしまったため。
* 老眼になると小さい文字は見にくい。その対策として、メガネスーパーなどで遠近鏡を作って、さらに数ヶ月かけて日常生活の中で、小さい文字を読むことに慣れるようにするのが良いかも知れない。
* 上記の「閲覧・持ち運び･保管が楽である」は具体的には、次のようになる: 
    * 閲覧: 通常の市販されている本は、背表紙が傷まないように、紙の目が背表紙と平行なことが多いので、「しんなり」と開く。上記の方法で製本をすると、紙の目が背表紙の方向と直交するので、「バネが効く」開き方をして、紙をぱらぱらめくりやすい。手の指でページをパラパラパラパラ弾くように見たい物を探すので、画像記憶を元に高速に見たいものを探し出すことがしやすい。
    * 持ち運び : A4サイズよりA5サイズは小さいので、鞄に入れても、場所を取らない。半分の重さなので、200ページあっても、手に持って運ぶのも楽である。 
    * 保管 : 机の上でも本棚でも場所を取らない。  

* 上記に書いたコマンド文は、さらに改良の余地は有る。従って、統一できるところは、まだ統一していない。
    * Adobeのソフトの「ページ指定」で長い文字列が受け付けられるかどうかの検証が、十分出来てないためである。しかし、実用上は、大抵の場合は、上記の説明で十分であろう。 
    * いろいろなソフトウェアの仕様が将来変わる可能性はあるので、上記の説明は、そのまま実行してうまくいくとも限らないことに注意。初めての場合や1度実行しても長期間の間が開いた場合、上記の方法は、試行錯誤や予備実験をする必要はあるであろう。  

* この文書の説明は、以下において、改善が必要である : 
    * 数値の指定の仕方をきちんと書くこと。
    * 2つ折りの定義をきちんと書くこと。
    * 使ったコマンド文をもっと洗練すること。使ってないコマンド文をきちんとけんしょうすること  
    * ページ指定の文字列をもっと検証すること(99文字が本当に最長なのか、ハイフンを使わずコンマを使うと99文字以下でも認識してくれないことがあったようだが、そのことを再確認すること)。   
    * cmd や powershell で bash -c を使った構文を検討すること。