pdftocairo Windows 版の PDF 印刷オプションについて調査した

# 概要

[Poppler](https://poppler.freedesktop.org/) は PDF ファイルの編集やラスタライズ機能などを備えている C/C++ ライブラリと、いくつかのコマンドラインツールを提供しています。
[cairographics.org](https://www.cairographics.org/) を組み合わせてビルドすると pdftocairo が作成されます。

Windows 版では pdftocairo に印刷機能が付いており、つぎのようなコマンドラインで印刷オプションを選択できます。

```batch
pdftocairo.exe -printdlg file.pdf
```

## PDF Print Options

- Page Scaling
  - None
  - Shrink to Printable Area
  - Fit to Printable Area
- Center
- Select page size using document paper size

![2022-03-16_10h17_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364126/88c7ff7a-9a62-5cf4-265e-0ee06ccb7840.png)

![2022-03-16_10h18_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364126/54c8970b-ae96-0ac6-85ab-04e93f0d9c60.png)

プリンター名を変更すると dpi の選択が現われます。

CubePDF では

- 1200 dpi
- 2400 dpi
- 3600 dpi
- 4000 dpi

![2022-03-16_10h17_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364126/2557d3aa-a8c3-9090-4645-c85ce27b5750.png)

Brother DCP-J982N では

- 標準印刷 (高品質)
- 簡易印刷 (中品質)
- 簡易印刷 (低品質)
- ドラフト印刷

![2022-03-16_10h28_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364126/89afb7c9-955f-59ee-7ae0-25d0422879be.png)

## Page Scaling を試す

現実問題では A4 の用紙に対して A4 サイズの PDF 文書を印刷するというピッタリな印刷サイズで印刷するユースケースが多いと思いますので、つぎのようなケースは特殊な事例になると思いますが、どのような振る舞いが期待されるかについての検討をしたいです。

- 用紙より文書サイズが小さいケース。ページサイズが 100mm x 100mm の PDF 文書を A4 用紙縦に印刷する場合
- 用紙より文書サイズが大きいケース。ページサイズが B4 横の PDF 文書を A4 用紙縦に印刷する場合

プリンター名には `Microsoft Print to PDF` を使用して、その挙動を確かめました。コスト削減 (用紙・インク・印刷物の管理コスト削減) のため PDF プリンターを使用します。

用紙について: 既定値の A4 縦です。

![2022-03-16_11h59_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364126/38156ec5-a097-b060-4f79-a895c2c2a0e2.png)

ページの余白 (印字不可領域や縁) は `0` と仮定します。

### 100x100.pdf

`Select page size using document paper size` が Off の場合:

出力された PDF ページサイズは 210 x 297 mm (A4 縦)

![2022-03-16_11h09_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364126/aa322af5-ea79-37b5-4524-5504b07971e3.png)

| # | Page Scaling | Center | 結果外観 |
|--:|---|---|---|
| 1 | None | Off | A4 縦の左下に 100mm x 100mm が印刷される
| 2 | None | On | A4 縦の縦横中央に 100mm x 100mm が印刷される
| 3 | Shrink to Printable Area | Off | A4 縦の左下に 100mm x 100mm が印刷される
| 4 | Shrink to Printable Area | On | A4 縦の縦横中央に 100mm x 100mm が印刷される
| 5 | Fit to Printable Area | Off | A4 縦の下部に 100mm x 100mm が 210mm x 210mm に拡大されて印刷される
| 6 | Fit to Printable Area | On | A4 縦の縦中央に 100mm x 100mm が 210mm x 210mm に拡大されて印刷される

`Select page size using document paper size` が On の場合:

出力された PDF ページサイズは 210 x 297 mm (A4 縦)

![2022-03-16_11h52_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364126/942b2da5-674a-f611-02b9-059aea60f546.png)

| # | Page Scaling | Center | 結果外観 |
|--:|---|---|---|
| 13 | None | Off | 略
| 14 | None | On | 略
| 15 | Shrink to Printable Area | Off | 略
| 16 | Shrink to Printable Area | On | 略
| 17 | Fit to Printable Area | Off | 略
| 18 | Fit to Printable Area | On | 略

#### 感想

- A4 用紙に L 判写真 (89 × 127 mm) を印刷するようなユースケースが考えられますが、隅っこに寄る (c1 or c3) か、中央に寄せて拡大 (c6) するのが有用なのではないかと思います。

### B4Land.pdf

`Select page size using document paper size` が Off の場合:

出力された PDF ページサイズは 257 x 365 mm (B4 縦)

![2022-03-16_11h09_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364126/cf552c57-2a5c-3834-e7ab-8b68a0f8c252.png)

| # | Page Scaling | Center | 結果外観 |
|--:|---|---|---|
| 7 | None | Off | A4 縦の左下に B4 横が印刷される。右側にはみ出して不可視領域が発生する
| 8 | None | On | A4 縦の縦横中央に B4 横が印刷される。左右両側にはみ出して不可視領域が発生する
| 9 | Shrink to Printable Area | Off | A4 縦の下部に B4 横が縦横比率を維持して縮小印刷される
| 10 | Shrink to Printable Area | On | A4 縦の縦横中央に B4 横が縦横比率を維持して縮小印刷される
| 11 | Fit to Printable Area | Off | A4 縦の下部に B4 横が縦横比率を維持して縮小印刷される
| 12 | Fit to Printable Area | On | A4 縦の縦横中央に B4 横が縦横比率を維持して縮小印刷される

`Select page size using document paper size` が On の場合:

出力された PDF ページサイズは 364 x 257 mm (B4 横)

![2022-03-16_11h55_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364126/d88262f4-34bb-ac13-2cdc-c6ba852ed8a9.png)

| # | Page Scaling | Center | 結果外観 |
|--:|---|---|---|
| 19 | None | Off | 用紙サイズを B4 横に設定して印刷される
| 20 | None | On | 用紙サイズを B4 横に設定して印刷される
| 21 | Shrink to Printable Area | Off | 用紙サイズを B4 横に設定して印刷される
| 22 | Shrink to Printable Area | On | 用紙サイズを B4 横に設定して印刷される
| 23 | Fit to Printable Area | Off | 用紙サイズを B4 横に設定して印刷される
| 24 | Fit to Printable Area | On | 用紙サイズを B4 横に設定して印刷される

#### 感想

- ユースケースはいくつか考えられます
  - 家庭用の A4 縦しか印刷できないようなプリンターで B4 横サイズの PDF を印刷する
  - [東京近郊路線図](https://www.jreast.co.jp/map/pdf/map_tokyo.pdf) のようなポスターを想定したページサイズ 710 x 480 mm (B2 横) を持つ PDF 文書を A4 用紙に縮小印刷したい
- c19 ~ c24 は用紙サイズを B4 横に変更して印刷を実行しています。懸念点です:
  - PDF プリンターは「一方的に要求された用紙サイズでの出力が技術的に可能」という点に留意が必要です。
  - 実際のプリンターは、用紙サイズが固定されています。A4 対応のプリンターには通常 B4 用紙はセットされていません。
  - 試しに実際の A4 対応プリンターで c22 を実践してみると、サムネイル画像のように収まった状態にはなりませんでした。
- ユーザーが印刷プロパティーで選択した用紙サイズ (A4 縦または A4 横) の範囲内に収まるように縮小印刷できる挙動が望ましいと思います。

c22 印刷結果:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364126/d807e079-2fc1-37ca-4cef-e0eef03e8e21.png)


## Page Scaling を試した

観察された挙動をまとめます。

| Page Scaling | 文書を拡大可能 | 文書を縮小可能
|:-:|:-:|:-:|
| None | × | ×
| Shrink to Printable Area | × | 〇
| Fit to Printable Area | 〇 | 〇

※ 拡大縮小の対象は、印刷するべき用紙の寸法に対してです。