Skip to content

Latest commit

 

History

History
281 lines (227 loc) · 12.3 KB

File metadata and controls

281 lines (227 loc) · 12.3 KB

Python PDF編集ツール 要件定義書

1. プロジェクト概要

PythonベースのGUIアプリケーションとして、日常的なPDF操作を一つのツールで完結できる統合PDF編集ツールを開発する。


2. 技術スタック

項目 技術
言語 Python 3.10+
GUIフレームワーク PySide6 (Qt6)
PDF操作 PyMuPDF (fitz), reportlab
PDFプレビュー PyMuPDF によるレンダリング
画像処理 Pillow
パッケージング PyInstaller (exe化対応)

3. 機能一覧

3.1 PDF結合・分割

機能 詳細
PDF結合 複数PDFファイルを1つに結合する
ドラッグ&ドロップ並び替え 結合時のページ順序をGUI上で変更可能
PDF分割 1つのPDFを指定ページ範囲で分割する
ページ抽出 指定ページのみを抽出して新規PDFとして保存
ページ削除 指定ページを削除して保存

3.2 プレビュー機能

機能 詳細
ページプレビュー PDFの各ページをサムネイル/フルサイズでプレビュー表示
ズームイン/ズームアウト 拡大・縮小表示
ページナビゲーション ページ番号指定、前後ページ移動、スクロール表示
サムネイル一覧 左サイドバーにサムネイル一覧を表示
見開き表示 1ページ表示 / 見開き表示の切り替え

3.3 署名(サイン)機能

機能 詳細
手書き署名 マウス/ペンタブで手書き署名を描画
画像署名 署名画像(PNG/JPG)をインポートして貼付
署名配置 ドラッグ&ドロップで任意の位置に配置
サイズ調整 署名のサイズを自由に変更可能
署名テンプレート保存 よく使う署名をテンプレートとして保存・再利用

3.4 スタンプ機能

機能 詳細
定型スタンプ 「承認済」「却下」「社外秘」「DRAFT」「CONFIDENTIAL」等のプリセット
日付スタンプ 現在日付を含むスタンプを自動生成
カスタムスタンプ テキスト・色・フォントサイズを指定してスタンプ作成
画像スタンプ 任意の画像をスタンプとして使用
スタンプ配置 ドラッグ&ドロップで任意の位置に配置、回転・サイズ変更可能
透過度調整 スタンプの透過度を調整可能

3.5 注釈・マークアップ機能

機能 詳細
テキスト注釈 任意の位置にテキストコメントを追加
ハイライト テキスト範囲をハイライト表示(色選択可能)
下線・取り消し線 テキストに下線・取り消し線を追加
矩形・円・矢印描画 図形の描画ツール
フリーハンド描画 ペンツールによる自由描画

3.6 ページ編集機能

機能 詳細
ページ回転 90°/180°/270° 回転
ページ並び替え ドラッグ&ドロップでページ順序を変更
空白ページ挿入 指定位置に空白ページを挿入
ページサイズ変更 A4/A3/Letter等へのリサイズ
トリミング ページの余白をトリミング

3.7 テキスト・画像操作

機能 詳細
テキスト追加 任意の位置にテキストを追加(フォント・サイズ・色指定可)
画像挿入 PNG/JPG/BMP画像をページ内に挿入
透かし(ウォーターマーク) テキストまたは画像の透かしを全ページに一括適用

3.8 セキュリティ機能

機能 詳細
パスワード設定 PDFにパスワード保護を設定
パスワード解除 パスワード付きPDFを開いて編集可能にする
権限設定 印刷・コピー・編集の権限を個別に制御

3.9 変換機能

機能 詳細
PDF → 画像 各ページをPNG/JPEG画像として書き出し
ページ指定画像エクスポート ユーザーが指定したページのみをJPEG/PNG形式で書き出し(詳細は 3.9.1 参照)
画像 → PDF 複数画像を1つのPDFにまとめる
PDFテキスト抽出 PDF内のテキストをコピー/テキストファイルとして出力

3.9.1 ページ指定 JPEG/PNG エクスポート機能(詳細仕様)

概要

読み込んだPDFから、ユーザーが指定したページをJPEG/PNG形式の画像ファイルとして書き出す機能。

入力仕様
項目 内容
対象PDF 現在開いているPDFドキュメント
ページ指定方法 以下のいずれかを選択可能
- 単一ページ 例: 3
- 複数ページ(カンマ区切り) 例: 1,3,5
- ページ範囲(ハイフン) 例: 2-7
- 上記の組み合わせ 例: 1,3-5,8
- 全ページ チェックボックスで一括指定
- 現在表示中のページ ボタンで現在ページを自動入力
出力仕様
項目 内容
出力フォーマット JPEG / PNG (ラジオボタンで選択)
解像度(DPI) 72 / 150 / 300 / 600 から選択(デフォルト: 150 DPI)
カラーモード RGB / グレースケール(デフォルト: RGB)
JPEG品質 1〜100 のスライダー(JPEG選択時のみ有効、デフォルト: 90)
PNG透過背景 有効/無効(PNG選択時のみ有効、デフォルト: 無効)
出力先フォルダ フォルダ選択ダイアログで指定
ファイル名規則 {元ファイル名}_page_{ページ番号:03d}.{ext} (例: report_page_001.png
ファイル名カスタマイズ プレフィックス・連番桁数をユーザーが変更可能
上書き確認 既存ファイルがある場合は確認ダイアログを表示
UI仕様
  • メニュー: ファイルエクスポート画像として書き出し...
  • ツールバー: 画像エクスポートアイコンを追加
  • 専用ダイアログ「画像エクスポート」を表示
    • ページ指定入力欄(プレースホルダーに例を表示)
    • 形式選択(JPEG / PNG)
    • DPI選択
    • カラーモード選択
    • 品質/透過オプション(形式に応じて活性/非活性切替)
    • 出力先フォルダ選択
    • ファイル名プレフィックス入力
    • プレビュー: 出力ファイル名のサンプル表示
    • 進捗バー(複数ページ書き出し時)
    • エクスポート / キャンセル ボタン
処理フロー
  1. ユーザーがメニュー/ツールバーからエクスポートダイアログを開く
  2. ページ指定文字列をパース・バリデーション(不正な範囲・存在しないページはエラー表示)
  3. 出力設定を確認
  4. 各ページを PyMuPDF でレンダリング(指定DPI)
  5. Pillow経由で指定形式・品質で保存
  6. 進捗をプログレスバーに反映
  7. 完了後、出力フォルダを開くかどうかを確認するダイアログ表示
エラー処理
ケース 動作
PDF未読み込み メニュー項目を非活性化
不正なページ指定 エラーメッセージを表示し続行を中断
範囲外ページ エラーメッセージで該当ページ番号を提示
出力先書き込み不可 エラーダイアログ表示
処理中断 キャンセルボタンで途中停止可能、生成済みファイルは保持
実装担当モジュール
  • src/core/converter.py: 画像エクスポートのコアロジック(export_pages_as_images() を追加)
  • src/ui/export_dialog.py: エクスポートダイアログUI(新規作成)
  • src/utils/page_range_parser.py: ページ範囲文字列パーサー(新規作成)

3.10 その他の便利機能

機能 詳細
ファイルドラッグ&ドロップ ウィンドウへのファイルD&Dで読み込み
最近使ったファイル 直近で開いたファイル履歴を表示
元に戻す/やり直し Undo / Redo 対応
バッチ処理 複数ファイルへの一括操作(結合・透かし・変換等)
ダークモード ライト/ダークテーマ切り替え
多言語対応 日本語/英語 UI切り替え

4. UI構成(概要)

┌─────────────────────────────────────────────────────┐
│  メニューバー(ファイル / 編集 / 表示 / ツール)       │
├─────────────────────────────────────────────────────┤
│  ツールバー(よく使う操作のアイコンボタン)             │
├────────┬────────────────────────────┬───────────────┤
│        │                            │               │
│ サム   │                            │  プロパティ   │
│ ネイル │    メインプレビュー領域      │  パネル       │
│ パネル │                            │ (注釈/署名    │
│        │                            │  等の設定)    │
│        │                            │               │
├────────┴────────────────────────────┴───────────────┤
│  ステータスバー(ページ数 / ズーム率 / ファイル情報)   │
└─────────────────────────────────────────────────────┘

5. 非機能要件

項目 要件
対応OS Windows 10/11
パフォーマンス 100ページ程度のPDFをストレスなく操作可能
ファイルサイズ 50MB以下のPDFを安定的に処理
exe化 PyInstallerで単体実行ファイルとして配布可能
設定保存 ユーザー設定・テンプレートをローカルに保存

6. 開発フェーズ(案)

フェーズ 内容 目安
Phase 1 GUI基盤 + PDFプレビュー + ファイル読み込み/保存 基盤構築
Phase 2 PDF結合・分割・ページ編集 コア機能
Phase 3 署名・スタンプ・注釈機能 編集機能
Phase 4 セキュリティ・変換・テキスト/画像操作 拡張機能
Phase 5 バッチ処理・多言語・ダークモード・exe化 仕上げ

7. ディレクトリ構成(案)

python_pdfeditor/
├── main.py                  # エントリーポイント
├── requirements.txt         # 依存パッケージ
├── request.md               # 本要件定義書
├── README.md
├── src/
│   ├── __init__.py
│   ├── app.py               # アプリケーション本体
│   ├── ui/                  # UI関連モジュール
│   │   ├── main_window.py
│   │   ├── preview_widget.py
│   │   ├── thumbnail_panel.py
│   │   ├── property_panel.py
│   │   └── toolbar.py
│   ├── core/                # PDF操作コアロジック
│   │   ├── pdf_manager.py
│   │   ├── merger.py
│   │   ├── splitter.py
│   │   ├── annotator.py
│   │   ├── stamp.py
│   │   ├── signature.py
│   │   ├── security.py
│   │   └── converter.py
│   ├── models/              # データモデル
│   │   ├── document.py
│   │   └── annotation.py
│   ├── utils/               # ユーティリティ
│   │   ├── config.py
│   │   └── file_helper.py
│   └── resources/           # リソース(アイコン、テンプレート等)
│       ├── icons/
│       ├── stamps/
│       └── i18n/
└── tests/                   # テスト
    └── ...