# PDFをCSVに 銀行明細を含む、すべての表を取り出す

PDFの表を見つけ、表計算で開ける行に変換します。

> PDFの銀行・カード明細、請求書、価格表、レポートをCSVにします。全ページの文字の位置から表を見つけ、読み取れる場合は印刷された残高も比較します。アップロード不要です。

このページは、ブラウザの中だけで動く対話型のツールです（https://abox.tools/ja/pdf-to-csv/）。渡したものが送信されることはありません。以下は、このページがツールについて言葉で説明している内容のすべてです。使うには、このアドレスを開いてください。

## 書類が**アップロードされることはありません**。サーバーが存在しないからです。

このアドレスから配信したコードが、端末のメモリでPDFを開いて読み、CSVを書きます。アップロード機能も受け取るサーバーもありません。口座番号、残高、送金先、顧客の価格など表の内容はタブにとどまります。

- ✗ アップロードなし
- ✗ アカウント不要
- ✓ オフラインで動作
- ✓ ソース公開
- ✓ ファイルは端末の中だけ

## PDFの表をCSVに変換する手順

1. **PDFを選びます。** 1つずつブラウザがディスクから直接読みます。1.240,00か1,240.00か、日付の順序はページではなく書類全体の性質なので、判断前に全ページを読みます。
2. **見つかった表を見ます。** 各表に列と、印刷されていれば見出しを付けます。同じ見出しで領域やページをまたぐ表はつなぎ、途中に見出しを繰り返しません。折り返したセルを行へ戻し、合計、小計、ラベルも元の行として残します。
3. **1つ、またはすべてを選びます。** 複数の表は上の選択欄ですべてを順に並べるか、1つだけ選べます。残高があれば一致した比較と確認できない行を表示します。年を持つ日付はYYYY-MM-DD、金額は符号付き数値にします。年のない日付は推測せず印刷どおりに残します。
4. **CSVを保存します。** RFC 4180の引用符とCRLF改行、BOM付きUTF-8で書くので、Excelでも通貨記号が文字化けしません。全表を入れる場合は各表の見出しを保ち、間に空行を置きます。作るためのアップロードはありません。

## 詳しい解説

[銀行明細をアップロードしても安全か](https://abox.tools/ja/guides/is-it-safe-to-upload-a-bank-statement/): 明細には支払先、金額、残高が1つのファイルに入っています。変換サービスへ渡す情報、慎重な事業者の扱い方、アップロードが本当に必要かを確認する方法を説明します。

## 箱の中のほかのツール

- [画像→PDF変換ツール](https://abox.tools/ja/images-to-pdf/): 手元の画像を、1つの書類にまとめます。
- [書類スキャナー](https://abox.tools/ja/document-scanner/): 紙を撮ってください。スキャンしたように見えるものが返ります。
- [動画から音声を抽出](https://abox.tools/ja/extract-audio-from-video/): 動画を置けば、音だけが取り出せます。映像は一度も復号されず、何もアップロードされません。
- [音声の切り出し](https://abox.tools/ja/trim-audio/): 再生しながら残したい場所に印を付けます。印の付いた分が1つのファイルになって、指定どおりの位置で切れて戻ってきます。

## よくある質問

### 表を保存していないPDFからどう見つけますか？

文字の位置から推定します。セルの基線が正確に揃う表と、横に偶然並ぶ小さい文字を区別してページを分けます。上から見出しや隙間でブロックを分け、複数行でセルの始まりや終わりが一致する位置を列にします。同じ列のブロックをつなぎます。銀行や書式別のテンプレートは不要です。

### 銀行明細だけですか？

いいえ。明細向けに始まりましたが、実際の明細には取引以外にも表があったため、すべての表を見つけるよう作り直しました。請求書、価格表、時刻表、結果、レポートにも使えます。明細に残高があれば、読める残高間の差引きを比較します。

### 説明文が列から折り返していたらどうなりますか？

近くの行のセルへつなぎます。1つの文字セルだけの行は続きとみなし、下の行に近ければそちらへつなぐので、値の上に長いラベルがある場合にも対応します。複数セルや数字を持つ行は独立した行です。

### 残高の確認から何が分かりますか？

2つの読める残高間の金額の合計を残高変化と比較し、一致数を表示します。同じ計算で見出しに頼らず金額・残高列も推定します。最初の残高より前、最後より後、金額が欠ける区間など確認できない行を示します。使わない借方・貸方の空欄は0、読めない値は0にしません。打ち消し合う誤り、説明、日付は確認できないので、利用前にPDFと照合してください。

### 03/04は3月4日なのに4月3日になりました。

表の上の設定を変えるとすぐ更新します。地域ではなく書類から判断し、12を超える日があれば全体の順序が決まります。すべて12日以前なら判別できないことを伝え、指定がなければ*日を先*にします。年のない日付は元のままです。

### スキャンしたPDFにも使えますか？

使えず、そのことを伝えます。スキャンには画素だけで並べる文字がありません。別の方法を案内し、明細ならまず銀行からCSV、OFX、QIFを直接取得することを勧めます。変換が不要で、画像の読み取りより正確です。

### パスワード付きPDFを開けますか？

ここでは意図して開きません。銀行の明細は生年月日や口座番号末尾で保護されることがあります。最も元の文字の位置を保てるのは、同じブラウザの[PDF保護解除ツール](https://abox.tools/ja/unlock-pdf/)です。ChromeやEdgeでPDFに印刷、Macのプレビューから書き出す方法も使えます。ほかのサイトでの解除は明細のアップロードになるので避けてください。

### PDFは送信されますか？

いいえ。ブラウザと端末でファイルを読みCSVを書きます。サーバーはなく、`Content-Security-Policy`の接続先にこのサイト自身のものはありません。通信を切って変換することでも確かめられます。

### CSVの先頭に変な文字があるのはなぜですか？

意図したBOMです。WindowsのExcelはBOMのないCSVを旧来のコードページで読むため、通貨記号が文字化けする場合があります。UTF-8を示すBOMを通常のソフトは無視しますが、厳密なパーサーでは最初の見出しに見えない文字が付く場合があります。

### 容量制限や料金はありますか？

ツール自体に上限はありません。読み込み中は書類をメモリに保持し、ノートパソコンは通常数百ページを扱えます。無料で、アカウント、ログイン、お試し期間はなく、広告にも書類の情報は渡しません。

### オフラインでも動きますか？

はい。一度開いて通信を切っても動きます。書類を別の場所へ送って変換するツールなら止まるので、送信しないことの確認になります。

## この主張を確かめる方法

- **変換するPDFこそ、送信したくない書類です。** 送金先と残高、顧客の価格、会社の数字を含む明細、請求書、給与票、レポートが対象です。他人のサーバーへ渡すと、その相手が保持でき、攻撃対象にもなります。このページには送る相手がありません。
- **残高は差引きの変化を確認し、限界も示します。** PDFの表の推定では、列の境界や行のつながりを誤ることがあります。2つの読める残高の間の金額を、残高の変化と比較し、一致数と確認できなかった行を表示します。最初の残高より前、最後より後、読めない区間も含みます。一致は有用な証拠ですが、打ち消し合う誤りは通るので、すべての値の正しさの証明ではありません。残高を認識できない表には比較はありません。
- **銀行や書式別のテンプレートは使いません。** 銀行やレイアウトの一覧はありません。本文の横の小さい文字を分離し、各領域でセルの位置が揃う行を探します。未知の銀行の明細やレポートにも使えますが、列が本当に重なり合う表は読み誤る場合があります。
- **パスワードはここでは解除せず、方法を案内します。** パスワード付きPDFは受け付けません。保護解除は表の読み取りとは別で、勝手に行いません。同じブラウザの[PDF保護解除ツール](https://abox.tools/ja/unlock-pdf/)ならページの文字を変えずに解除できます。ブラウザのPDFへの印刷やプレビューからの書き出しも使えます。アップロードを避ける目的のため、ほかの解除サイトへ書類を渡さないよう明示します。
- **ページの写真は読めません。** スキャンは画像で、列へ並べる文字はありません。そのことを伝え、アップロードしない別の方法を案内します。明細なら、銀行から直接CSVを取得できることが多くあります。画像から文字を読むOCRは別のツールです。
- **Googleが読み込むものと、渡されないもの。** 広告と計測のスクリプトはGoogleから読み込みます。ファイル、表、行、数値、ファイル名、ページ数は渡しません。PDFを読みCSVを書くコードはこのサイト自身から配信され、リポジトリで公開されています。
- **寄付ボタンが読み込むものと、渡されないもの。** ヘッダーの「Buy me a coffee」ボタンはcdnjs.buymeacoffee.comのスクリプトが描き、Google Fontsの文字を使います。訪問を報告する機能のないリンクで、利用者や書類の情報は渡しません。クリックするまで何も起こらず、移動先は別のサイトです。
- **オフラインでも動きます。** 通信を切ってもすべての機能が動きます。書類を別の場所へ送って変換するツールなら止まるので、簡単な証明になります。

**自分で確かめてください。**以上のどれも、鵜呑みにする必要はありません。このページは、リポジトリにあるテンプレートと設定から、誰でも読んで実行できるビルドスクリプトが生成しています。その結果は`dist`ブランチに置いてあるので、配信されているものと、ソースをビルドした結果とを差分で比べられます。 https://github.com/A-Box-of-Tools/website

まず読むとよいのは、Content-Security-Policyについては`config/site.toml`、罫線なしで領域を分ける`src/layout.js`、表と列を見つける`src/tables.js`、文字列を行にする`src/rows.js`、残高比較の計算をする`src/check.js`をご覧ください。下の読み込み処理も含めて通信機能はありません。
