これが面倒なのは、CSV に「ページ」がないからです。CSV は果てしなく広がる表で、PDF は固定サイズの長方形を積み重ねたものです。変換するたびに「どこで切るか」を決めなければならず、出来の悪いツールはどれも同じ決め方をします。用紙が尽きたところで切り、残りの列は右端からはみ出して落ちるに任せるのです。
したがって大事なのは「どう変換するか」ではありません。ファイルを作るだけなら、たいていの方法で作れるからです。大事なのは、どの列とどの行を実際に PDF に入れるのかという点です。まずそれを決めれば、変換そのものは簡単です。
変換する前に、ファイルを絞り込む
40,000 行の PDF は文書ではなく、ファイルサイズが付いただけのミスです。612 ページ目を開く人はいません。相手が全行を必要とするなら、CSV を渡してください。
PDF が適しているのは、加工ではなく読むための出力です。その場合、次の状態にしておきます。
- 絞り込む。 全件のエクスポートではなく、その相手に関係する行だけにします。
- 列を減らす。 A4 横なら 6〜10 列が読みやすく収まります。15 列では、人が読めるどんな文字サイズでも収まりません。
- 多くの場合は集計する。 40,000 行を 30 行にする GROUP BY が、本当に欲しかった資料であることはよくあります。
変換の前にこれをやっておくかどうかが、使えるレポートと、途切れた表が 600 ページ続くファイルの分かれ目です。
向きと列幅
読みやすさを左右する設定は 2 つあり、どちらも初期値が適切ではありません。
用紙は横向きにします。列が 5 つ未満のファイルは例外です。A4 縦だと細い列が 6 つほど、横なら 10 列入ります。
倍率ではなく「幅を 1 ページに収める」で縮小します。 どの表計算ソフトにもある機能ですが、気づく人はほとんどいません。Excel では「ページレイアウト → 拡大縮小印刷 → 横: 1 ページ」です。これを設定しないと 11 列目以降が最終行の後ろに別のページ群として印刷され、12 ページ分の表が 40 ページの PDF になります。
あとは一度設定しておく価値のあるものが 2 つあります。
- 全ページにヘッダー行を繰り返す。 Excel では「印刷タイトル → タイトル行」です。見出しが 1 ページ目にしかない表は、2 ページ目から読めません。
- 枠線を印刷する。 印刷時は初期設定でオフです。幅の広い表は枠線がないと、横方向に目で追うのがとても大変です。
状況別の方法
パソコンの表計算ソフトから
CSV を開き、上の設定を適用してから「印刷 → PDF として保存」を選びます。ここで紹介する中で仕上がりが最も美しく、コードを書かずにタイトルとページ番号を付けられる唯一の方法でもあります。
ただしインポートには注意してください。Excel は CSV を開くとき、日付に見えるものをすべて変換し、PDF はその誤りを永久に残します。注文 ID の列が 43831 と表示されたら、ファイルでは 2020-01-01 でした。ID、先頭のゼロ、長い数字が含まれるデータは、文字列としてインポートしてください。
コマンドラインから
見た目の指定が要らない、素朴で正確な表なら次のとおりです。
csvlook data.csv | enscript -B -f Courier8 -o - | ps2pdf - out.pdf
レイアウトを制御したいなら、HTML を経由するほうが現実的です。どの環境にもヘッドレスブラウザがあり、ブラウザは表のページ分割がとても得意です。
csvtomd data.csv > table.md
pandoc table.md -o out.pdf
HTML 経由の利点は、スタイルシートに @page { size: A4 landscape } と thead { display: table-header-group } を書くだけで、表計算ソフトがダイアログの奥に隠している 2 つの設定、つまり用紙の向きとヘッダーの繰り返しが手に入ることです。
スマートフォンから
実際に変換が必要になるのは、たいていここです。ファイルはメールの中にあり、受け取る人は表計算アプリなしで画面上で読めるものを求めていて、手元にパソコンはありません。
大事なのは他の方法と同じです。書き出す前に、絞り込んで列を減らします。5 列・40 行のスマホ向け PDF は良い成果物です。ファイル全体をスマホサイズで PDF にしたものは、そうではありません。
PDF に直接変換でき、書き出す列とスタイルは引き継ぐのではなく自分で選べます。その前にビジュアルフィルタエディタや SQL クエリで、印刷する価値のある行にファイルを絞り込めます。この手順が、PDF が読めるかどうかを決めます。
できることPDF が適切ではない場合
3 つのケースがあり、依頼の大半はこのどれかです。
「Excel がなくても開けるように」。 CSV はすでに開けます。メモ帳、TextEdit、どのブラウザ、Google スプレッドシート、Numbers、そしてどのスマートフォンでも開けます。見た目が心配なら、たいていは別の形式にするのではなく、列を絞ったファイルにすれば解決します。
「変更できないように」。 PDF は、意味のある形で読み取り専用になるわけではありません。簡単に編集でき、簡単に抽出できます。求められているのが改ざん防止なら、答えは署名やチェックサムであって、ファイル形式ではありません。
「データを使えるように」。 PDF は表形式データの入れ物としては最悪で、そこからデータを取り出すのは、ひとつの産業が成り立つほどの作業です。相手が数字を使って何かするなら、CSV を渡し、要約の PDF を添えてください。
PDF が本当に向いているのは、印刷するもの、ページ割りを固定して保管するもの、正式な記録に添付するもの、転送されてもレイアウトが崩れてはいけないものです。
レポートらしく仕上げる
効果の大きい順に 4 つあります。
- 数値は右揃え、文字は左揃えにする。 読みやすさをこれほど変えるものは他になく、設定も 1 つだけです。
- 小数点以下の桁数をそろえる。
1.5と1.4999999が混在する列は雑に見えますし、たいていは本当の精度ではなく浮動小数点の誤差です。 - ヘッダーとフッターを付ける。 タイトル、データの対象日(印刷した日ではありません)、ページ番号を入れます。
- ファイルが何なのかを書く。 先頭に 1 行、データの出どころ、適用した絞り込み条件、行数を入れます。半年後には、これが「資料」と「出所不明のファイル」の差になります。
送る前にファイルを直す必要があるとき、たとえば列の丸め、合計の計算、行の削除なども、スマートフォン上で数式列が処理します。結果は CSV の中に保存されるので、何で印刷しても数字は同じです。
できること表ではなくグラフで
何かを変換する前に、考えてみる価値があります。相手が欲しいのは行でしょうか、それとも全体の形でしょうか。12 か月の推移は 1 本の線であり、12 か月分の表は、読むのに時間がかかる劣った線です。
最も強力な資料は、1 ページ目にグラフ、その後ろに集計した表を置いた形であることが多く、両方を作れるツールなら 2 分で済みます。どちらか一方だけよりも、はるかに役立ちます。