複数ページの PDF をページごとの PNG(または JPEG)に変換する Windows デスクトップアプリです。
English | 変更履歴 | 設計判断の記録 | 開発への参加
- 外部 PDF ライブラリを使いません。 描画は Windows 標準の
Windows.Data.Pdfに任せています。 そのため配布物にサードパーティの PDF エンジンが含まれず、ライセンスは MIT で完結します。 - インストール不要。 ZIP を展開するだけで動きます。レジストリも触りません。
- GUI と CLI の両方。 手で操作するときは
Utsushi.exe、自動処理にはutsushi-cli.exe。 - 日本語で失敗の理由を伝えます。 ページ単位の失敗を握りつぶさず、どのページがなぜ駄目だったかを一覧にします。
- キーボードとスクリーンリーダに対応。 すべての操作がキーボードだけで完結します。
- まとめて変換できます。 複数の PDF を選ぶか、フォルダを渡せば配下の PDF を再帰的に処理します。
- PNG と JPEG。 解像度は DPI・長辺のピクセル数・倍率の 3 通りで指定できます。
Releases から
Utsushi-<版数>-win-x64.zip をダウンロードし、展開して Utsushi.exe を実行してください。
インストールは不要です。自分でビルドする場合はビルドを参照してください。
| 項目 | 内容 |
|---|---|
| OS | Windows 11、および Windows 10(ビルドは 10.0.17763 以降を対象にしています) |
| CPU | x64 |
| 事前インストール | 不要。Windows App SDK も VC++ 再頒布可能パッケージも同梱しています |
Utsushi.exeを起動します。- 「PDF を選択」で PDF を開きます。複数選べます。「フォルダを選択」を押すと、その配下の PDF を 再帰的にまとめて変換できます。ウィンドウに PDF やフォルダをドラッグしても開けます。 複数の PDF を変換するときは、出力ファイル名の先頭は元の PDF の名前になります。
- 出力先フォルダを選びます(既定は入力 PDF と同じフォルダ)。
- 解像度を決めます。DPI・長辺のピクセル数・倍率の 3 通りから選べます。 1 ページ目の出力サイズがその場で表示されます。 出力形式は PNG と JPEG から選べます。JPEG のときは画質(1〜100)も指定できます。
- 必要ならページ範囲(例:
1-3,7)とファイル名を調整します。出力ファイル名の例が表示されます。 - 「変換」を押します。変換中もウィンドウは操作でき、いつでもキャンセルできます。
設定は次回のために %LOCALAPPDATA%\Utsushi\settings.json へ保存されます。
utsushi-cli <input.pdf|フォルダ> ... -o <outdir> [オプション]
入力は PDF でもフォルダでも、いくつでも並べられます。フォルダを渡すと配下の PDF を
再帰的に探します(シンボリックリンクは辿りません。上限 1000 件)。
複数の PDF を変換すると、出力は 1 つのフォルダに集まり、ファイル名の先頭は元の PDF の名前になります
(a.pdf → a_01.png)。そのため --stem は PDF が 1 つのときだけ使えます。
| オプション | 説明 |
|---|---|
--dpi <値> |
DPI を指定する(既定 150) |
--longest-edge <画素> |
長辺のピクセル数を指定する |
--scale <倍率> |
等倍(96dpi)に対する倍率を指定する |
--pages <範囲> |
例: 1-3,7。空欄なら全ページ |
--stem <名前> |
出力ファイル名の先頭部分。既定は入力ファイル名 |
--digits <桁数> |
連番の最小桁数 |
--start <番号> |
連番の開始番号(既定 1) |
--password <文字列> |
パスワード付き PDF を開く |
--format <形式> |
png / jpeg(既定 png) |
--quality <画質> |
JPEG の画質 1〜100(既定 90) |
--transparent |
背景を透過にする(PNG のときだけ) |
--overwrite <方法> |
skip / replace / rename(既定 skip) |
--workers <本数> |
同時に描画する本数。0 = 自動(既定)、1 = 直列 |
--json |
結果を JSON で標準出力に出す |
終了コード: 0 全成功 / 1 一部失敗 / 2 開始前エラー / 130 キャンセル(Ctrl+C)。
# 例: 12 ページの PDF を 150dpi で PNG にする
utsushi-cli doc.pdf -o out --dpi 150
# 例: 2 ページ目と 5 ページ目だけを取り出し、結果を JSON で受け取る
utsushi-cli doc.pdf -o out --pages 2,5 --json
# 例: フォルダの中の PDF をまとめて JPEG にする
utsushi-cli C:\scans -o out --format jpeg --quality 85--json の形は、PDF が 1 つのときは 1 ファイル分(pages を持つ形)です。
2 つ以上のときは files / results を持つ一括処理用の形になります。
<先頭部分><区切り><連番>.png の形になります。連番の桁数は総ページ数から自動で決まります
(全 9 ページなら doc_1.png、全 10 ページなら doc_01.png)。
拡張子は出力形式で決まり、JPEG のときは .jpg になります。
複数の PDF をまとめて変換するときは、先頭部分が元の PDF の名前になり、桁数はファイルごとに決まります。
Windows で使えない文字(\ / : * ? " < > |)は _ に置き換え、CON や LPT1 などの
予約名には末尾に _ を付けます。
- GUI ではパスワード付き PDF を変換できません。 保護されている旨を表示します。
CLI の
--passwordは使えます。 - 出力の寸法はどの環境でも同じになりますが、画素値は表示スケールや同時描画の本数によって わずかに変わります。Windows の PDF 描画 API が表示スケールに応じた大きさで描くため、 指定どおりの寸法へ揃え直しているためです。
- 対応する出力形式は PNG と JPEG です。WebP は Windows 標準にエンコーダが無いため対応していません。
- 一度に扱える PDF は 1000 件までです。
- 変換の速さは環境によって変わります。ページを同時に描く処理は入っていますが、 Windows の PDF 描画そのものはプロセス内で直列に動くため、 ディスプレイの拡大率が 100% の環境では直列とほとんど変わりません。
必要なもの:
- Visual Studio 2022 以降(「C++ によるデスクトップ開発」と「C++ WinUI アプリ開発ツール」)
- Windows SDK 10.0.22621.0 以降
# Catch2 を vcpkg マニフェストから復元する
powershell -File tools\Restore-Vcpkg.ps1
# ビルド
msbuild Utsushi.sln /t:Restore /p:Configuration=Release /p:Platform=x64
msbuild Utsushi.sln /p:Configuration=Release /p:Platform=x64
# テスト用 PDF を生成する(単体テストの一部が使う)
powershell -File tools\New-FixturePdf.ps1
# 単体テスト
.\build\bin\x64\Release\UtsushiCore.Tests.exe
# UtsushiCore が WinRT に依存していないことの検査
powershell -File tools\Test-CoreIsWinRTFree.ps1
# CLI の E2E 検証
powershell -File tools\Invoke-E2ETest.ps1
# 配布用 ZIP
powershell -File tools\New-ReleasePackage.ps1| プロジェクト | 役割 |
|---|---|
UtsushiCore |
変換の中核。静的ライブラリ。WinRT に触れるのは src/winrt 配下だけ |
UtsushiCli |
コンソール版 utsushi-cli.exe |
UtsushiApp |
WinUI 3 の GUI Utsushi.exe |
UtsushiCore.Tests |
Catch2 v3 による単体テスト |
仕様と開発の方針は CLAUDE.md、個別の設計判断は
docs/decisions/ に ADR として残しています。
手順は CONTRIBUTING.md にまとめてあります。 不具合の報告・機能の提案は Issue へ、 脆弱性の報告は SECURITY.md の手順でお願いします。 参加にあたっては 行動規範 に従ってください。
MIT License. LICENSE を参照してください。
外部の PDF ライブラリを含まないため、再頒布にあたって追加のライセンス表示は要りません。 同梱している Windows App SDK と VC++ ランタイムは Microsoft の再頒布条件に従います。