# ITty Plus PDFツール スマホ対応版 0.2.1

Windows版0.1.2の36処理を移植した、端末内処理のWebアプリ／PWAです。薄緑色、右上会社ロゴ。PCは左側操作・右側プレビュー、スマホは縦配置と下部の処理・保存ボタンを使用します。Windows版EXEはそのまま利用できます。

## データの扱い

PDF・画像・ファイル名・OCR結果を外部へ送るAPIはありません。書類はメモリ内で処理し、操作した利用者の端末に保存します。解析・アクセス計測SDKは使用しません。CSPで外部通信先を許可せず、PDF内のJavaScriptは有効化しません。

アプリ本体、MuPDF WASM、OCRエンジン・日本語／英語／縦書きモデルは同梱しています。初回は同じ配信元からアプリファイルを取得します。書類を選ぶ前に「オフライン利用を準備」を実行すると、アプリ資材だけをキャッシュできます。PDF・画像・OCR結果はService Workerのキャッシュ対象にしません。書類内容やパスワードをlocalStorage／IndexedDBに永続保存しません。利用者が明示的に保存する作業ファイルは書類内容を含み、暗号化されません。

静的配信なので配信サーバーには顧客書類を置きません。一般的なホスティングではアプリ取得時のIP等のアクセスログが残る場合があります。これは書類アップロードとは別です。配信元が改ざんされないようHTTPSと配信権限管理が必要です。ブラウザ・OS・選択したクラウド保存先の挙動までは制御しません。

## 開発PCでの起動

Node.jsがある環境で、このフォルダから `node server.mjs` を実行して `http://127.0.0.1:4173` を開きます。HTMLのダブルクリック（file://）ではWASM・Worker・PWAが動作しません。開発サーバーは標準でPC自身からのみ接続でき、GET／HEADしか受け付けません。書類のアップロードや保存処理はサーバーにありません。

## スマホでの利用

このフォルダのアプリ資材をHTTPSの静的配信先に配置し、そのURLをSafari／Chromeで開きます。iPhoneはSafariの共有→ホーム画面に追加、AndroidはChromeのメニュー→ホーム画面に追加／インストール。公開URLはこの成果物にはまだありません。Googleドライブに保管したHTMLやZIPを直接開く方法はアプリの起動にはなりません。

本番の公開・配信先設定は別作業です。顧客データ用のサーバーやデータベースは不要です。スマホから `127.0.0.1` を開くとスマホ自身を指すため、PCの開発URLでは開けません。LAN上のHTTPはPWA・共有・保存APIの制限があるため、実機確認にはHTTPSを使用してください。

## 操作

1. PDFまたは画像を追加。画像だけで「画像→PDF」を実行すると編集可能なPDFになります。
2. 上部の「機能メニュー」から処理を選び、「設定」で対象ページと詳細を指定。空欄は全ページ、`1,3,5-8`形式です。
3. 処理して確認。ページ内分割の線、トリミング・注釈・墨消しの領域は指で指定できます。ページ間分割は表示ページの後に区切りを追加できます。
4. 元のPDF／処理後を切り替え、ページ移動・150%／200%表示で確認します。
5. 名前を付けて保存。複数結果はそれぞれ名前と分類フォルダを指定できます。
6. このPDFで続けて編集すると、戻す／やり直すが使えます。履歴は最大8状態・32MiBを目安に制限します。

ファイルの↑↓で結合順序を変更。挿入・差し替え・比較は選択中のPDFと「追加元・比較先」で選んだPDFを使います。一括処理では全PDFを処理し、成功・失敗を文字結果に表示します。

0.2.1ではスマホ画面の縦長表示を改修しました。書類一覧は折りたたみ、設定は「設定」ボタンから開きます。プレビューは画面の高さに合わせて全体表示し、長いページでも画面全体を引き伸ばしません。「⛶」でプレビューを広げ、「戻る」で通常表示へ戻せます。作業保存やオフライン準備は「その他メニュー」にまとめています。

## 保存先とファイル名

ファイル名は保存前に個別編集できます。分類フォルダは `2026-10/取引先A` の形式で指定します。対応ブラウザでは保存先フォルダを選び、その中に分類フォルダを作って保存します。既存の同名ファイルがある場合、フォルダ保存は実行せず名前変更を案内します。別のアプリが同時に同名ファイルを作る競合までは保証しません。

iPhoneなどフォルダ選択APIのない環境では、単一ファイルはその形式、複数ファイルまたは分類フォルダ付き結果はZIPで保存・共有します。ZIPの中に指定したフォルダ配置を保持します。iOSの共有画面で「ファイルに保存」→「このiPhone内」などを選びます。ブラウザのダウンロードの場合、ブラウザ側で保存先を決める端末もあります。アプリがすべての端末の任意のフォルダへ直接書くことはできません。

「共有」は利用者が選んだアプリへファイルを渡します。クラウドやメールを選択すればそのサービスにファイルが渡ります。端末内保存を希望する場合は端末内の保存先を選択してください。

## Windows版との違い・制限

- 入力は1ファイル16MiB・合計48MiB、PDFは300ページ、入力／レンダリング画像400万画素。PDF画像化のdpiは72〜200。メモリ不足は実機性能次第なので、大きな資料はPC版を利用してください。
- PNG／JPEG／WebP等、ブラウザがデコードできる画像に対応。TIFF・HEICはブラウザが対応しない場合に読み込めません。元画像は2000万画素以下、400万画素を超える写真は取り込み時に端末内で縮小し、一覧に「縮小済み」と表示します。原稿ファイルは変更しません。
- OCRはTesseract.js 7.0.0、日本語・英語・日本語縦書きモデルを使用。文字配置を指定できます。向き判定はOSDではなく4方向のOCR結果を比較する簡易候補で、PC版と一致するとは限りません。
- 検索可能PDFは指定ページだけ出力。文字結果の手修正はTXTのみに反映します。
- ページ内分割・見開き・傾き補正・切り抜き・JPEG圧縮は対象ページを画像化します。墨消しは全ページを新規画像PDFにし、選択領域を画素として消します。原稿の文字・添付・注釈は移しません。領域の指定漏れは検出しません。
- 白紙・見開き・傾きの自動候補は簡易判定。白紙は候補を表示し自動削除しません。
- コメント・ハイライト・文字・ページ番号・透かしはPDF注釈として保存。PDFビューアによって表示が異なることがあります。
- 標準圧縮は容量が増える場合があります。PDFのフォーム・しおり・電子署名などの保持は保証しません。
- パスワード保護はAES-256。カンマ・制御文字は不可、UTF-8で127バイト以下。正しいパスワードで開いた資料のみ非暗号化できます。暗号化結果を編集する場合は保存して開き直します。
- 比較は指定した1ページ同士。画像差分は同じ寸法が必要です。埋込画像抽出では透過マスクの合成、ベクター、インライン画像等を完全には再現しません。
- 設定JSONはパスワード・文字内容を除外。作業ファイル `.ittymobile` はスマホ版専用で、Windows版の `.ittyproject` と互換ではありません。作業ファイルは現在の書類と設定を含み、履歴・前回の結果・パスワードを含みません。暗号化原稿も作業保存時に非暗号化します。
- 処理中止は処理Workerを終了して再生成します。処理結果は確定せず、元の読込資料を保持します。
- Service WorkerのキャッシュはOSが削除する場合があります。機内モードにする前に準備状態を確認してください。

## 品質確認と販売

試験結果は `docs/品質チェック.md` を参照。実際のiPhone／Android端末、ストア配布、販売用ライセンス・コード署名は別途確認が必要です。実機確認前に「全スマホで動作保証」と表示しないでください。

このソースはAGPL-3.0-or-laterで提供します。MuPDF 1.28.1もAGPL／商用ライセンスの選択です。非公開ソースでの販売を希望する場合、MuPDFの商用契約または採用ライブラリを見直してください。ロゴの権利はITty Plusに留保します。第三者の利用条件は `licenses/` と `assets/NotoSansJP-OFL.txt` を参照。

公式資料：
- https://mupdf.readthedocs.io/en/latest/reference/javascript/index.html
- https://github.com/naptha/tesseract.js/blob/master/docs/local-installation.md
- https://developer.mozilla.org/en-US/docs/Web/API/Window/showDirectoryPicker
- https://developer.mozilla.org/en-US/docs/Web/API/Navigator/share

## Obsidian管理

このフォルダの `docs/` に機能一覧・画面設計・端末内処理設計・実装コードノートを用意します。実際に動くソースはルートのJavaScriptです。コードノートには対応ソースと処理を明記し、実装変更時に `tools/docs.py` で再生成できます。
