# こま切れ印刷 / KOMAGIRE 長いPDFを、10ページ程度の小さなジョブに分けてWindowsのプリンターへ順番に送ります。大きなジョブで失敗する場合に、1回に送るページ数とジョブ間の休止を調整するためのアプリです。 ## 使い方 1. `Komagire.exe` を起動し、PDFとプリンターを選びます。Pythonのインストールは不要です。 2. 部数、1ジョブのページ数、片面/両面、用紙、向きを指定します。 3. 印刷予定の総ページ数・用紙枚数・ジョブ数と、送信順を確認します。 4. 「印刷する」を押します。前のジョブがWindowsのキューから抜けるか印刷済みになるまで次を送りません。標準ではさらに5秒休止します。 **30ページ × 20部、10ページずつ → 3ジョブ × 20部 = 60ジョブ、本文600ページ。** 両面なら用紙300枚です。標準の部単位では、1部目の1~10、11~20、21~30ページ、続いて2部目を印刷します。区間単位の順番も選べます。 ## 両面印刷 - 自動両面対応プリンターの長辺とじ・短辺とじに対応します。非対応機では両面を開始せず理由を表示します。手差しで表面・裏面を別々に印刷する方式は未対応です。 - 分割指定が9ページなら8ページずつにします。10ページ指定は10ページずつです。両面で1ページ指定は受け付けません。 - 奇数ページで終わる各部の最後には空白の裏面を追加します。例えば31ページ×20部は80ジョブ、本文620ページ+空白20ページ、用紙320枚です。次の部は新しい用紙の表から始まります。 - 選択範囲の先頭を表面として組みます。元の文書の表裏を保って途中から印刷したい場合は、範囲の先頭を元の表面のページに合わせてください。 - PDF自身に回転が設定されたページを含む場合も描画します。用紙の向きは画面で選択してください。 ## 停止・再開と履歴 「一時停止」はアプリの送信処理を止めます。Windowsやプリンターに渡したページは印刷が続く場合があります。「中止」は現在の自分のジョブだけを中止するよう要求します。ドライバーの処理が戻るまでは反応が遅れることがあります。 紙切れ、オフライン、キュー停止、ジョブ削除、20分の待機時間超過、描画エラーなどで次の送信を止めます。重複印刷を避けるため、失敗したジョブを自動で再送しません。**出た紙とWindowsの印刷キューを確認してから、開始ジョブの番号を指定して印刷してください。** 部の途中から再開するときは、両面の表裏と用紙の位置も確認してください。 「印刷履歴を開く」で `%LOCALAPPDATA%\Komagire\runs` が開きます。履歴には元PDFのパスとSHA-256、設定、部・ページ範囲、WindowsジョブID、最後に確認した状態を保存します。`uncertain` や `submitting` で終わる記録は、出力済みか確認が必要です。履歴にPDF本文は保存しません。印刷中は元PDFの一時コピーを使い、処理終了時に削除します。強制終了時に残った一時コピーはWindowsの一時フォルダーで削除できます。 **キュー処理終了は、紙の排出完了の保証ではありません。** ドライバーが早めに完了を通知する場合があります。紙の排出が続く機種では休止時間を長くしてください。分割で全機種の印刷失敗を解消できるとは限りません。 ## PDFと印刷設定 - v0.1はPDF専用です。Word等はPDFに保存してから読み込みます。パスワード付きPDFは解除したPDFを使ってください。 - 用紙の印刷可能領域に合わせて拡大・縮小し、縦横比を保って中央に配置します。原寸印刷、フチなし、ページごとの自動用紙切替、製本面付けは未対応です。 - 画面の部数・片面/両面・用紙・向き・色を優先し、ドライバー側のコピー数は1にします。「プリンターの詳細設定」はこの印刷にだけ適用し、Windowsの標準設定は変更しません。 - PDFを1ページずつ画像に描画してGDIに渡します。標準200dpi、150/300dpiを選択できます。非常に大きなページではメモリーを抑えるため解像度を下げます。画面に表示できない注釈や特殊なPDF要素は試し刷りで確認してください。 - 「分割PDFを保存」は元PDFを変更せず、新しいフォルダーへ区間ごとのPDFと印刷順JSONを保存します。PDFファイルは区間ごとに1個で、部数と順番はJSONで表します。通常はアプリの直接印刷を使ってください。 - 仮想PDFプリンターは機種によって各ジョブで保存先の指定が必要です。分割PDFの保存機能を使うと便利です。 ## 開発 Windows 10/11、Python 3.11以上を使用します。 ```powershell python -m venv .venv .\.venv\Scripts\python.exe -m pip install -e ".[dev]" .\.venv\Scripts\python.exe -m komagire .\.venv\Scripts\python.exe -m pytest -q .\.venv\Scripts\python.exe -m ruff check . .\scripts\build.ps1 -Python .\.venv\Scripts\python.exe ``` `python -m komagire --self-check` は計画・PDF描画・プリンター列挙・Tk起動を確認し、印刷は実行しません。EXEでは `--self-check --report <保存先.json>` を指定します。CIでもWindowsでテストしEXEを作成します。 `Komagire.exe <30ページ以上の診断用PDF> --ui-check --report <保存先.json>` では画面の読み込み・60ジョブの表示・設定・停止操作も診断します。こちらも印刷は実行しません。 分割計画は `planning.py`、逐次送信と履歴は `engine.py`、GDIとキュー確認は `windows.py`、画面は `gui.py` に分けています。履歴保存後に初めて印刷を開始し、WindowsジョブIDを取得直後に記録します。 ## 検証範囲 自動テストでページの抜け・重複、部数の順番、両面の偶数境界・空白裏面、範囲選択、PDF原本の保全、回転・CropBox、描画メモリー上限、逐次送信・エラー停止・中止・明示的な再開を確認します。実機での長時間連続印刷、紙の表裏・とじ方向、給紙・排紙順、機種ごとのエラー回復は実機試し刷りが必要です。検証の実績は `VERIFICATION.md` を参照してください。