Skip to content

Repository files navigation

Utsushi

複数ページの PDF をページごとの PNG(または JPEG)に変換する Windows デスクトップアプリです。

CI License: MIT Platform: Windows x64

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++ 再頒布可能パッケージも同梱しています

使い方(GUI)

  1. Utsushi.exe を起動します。
  2. 「PDF を選択」で PDF を開きます。複数選べます。「フォルダを選択」を押すと、その配下の PDF を 再帰的にまとめて変換できます。ウィンドウに PDF やフォルダをドラッグしても開けます。 複数の PDF を変換するときは、出力ファイル名の先頭は元の PDF の名前になります。
  3. 出力先フォルダを選びます(既定は入力 PDF と同じフォルダ)。
  4. 解像度を決めます。DPI・長辺のピクセル数・倍率の 3 通りから選べます。 1 ページ目の出力サイズがその場で表示されます。 出力形式は PNG と JPEG から選べます。JPEG のときは画質(1〜100)も指定できます。
  5. 必要ならページ範囲(例: 1-3,7)とファイル名を調整します。出力ファイル名の例が表示されます。
  6. 「変換」を押します。変換中もウィンドウは操作でき、いつでもキャンセルできます。

設定は次回のために %LOCALAPPDATA%\Utsushi\settings.json へ保存されます。

使い方(CLI)

utsushi-cli <input.pdf|フォルダ> ... -o <outdir> [オプション]

入力は PDF でもフォルダでも、いくつでも並べられます。フォルダを渡すと配下の PDF を 再帰的に探します(シンボリックリンクは辿りません。上限 1000 件)。 複数の PDF を変換すると、出力は 1 つのフォルダに集まり、ファイル名の先頭は元の PDF の名前になります (a.pdfa_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 で使えない文字(\ / : * ? " < > |)は _ に置き換え、CONLPT1 などの 予約名には末尾に _ を付けます。

既知の制限

  • 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 の再頒布条件に従います。

About

複数ページの PDF をページごとの PNG(または JPEG)に変換する Windows デスクトップアプリ

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages