mygems

CSV を PDF に変換する方法

CSV にはページがなく、PDF はページだけでできています。だから列がはみ出します。変換前に、何を入れるかを決める方法を紹介します。

執筆: uos ·

これが面倒なのは、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 にしたものは、そうではありません。

CSV File Viewer - Smart CSViPhone・iPad · Android

PDF に直接変換でき、書き出す列とスタイルは引き継ぐのではなく自分で選べます。その前にビジュアルフィルタエディタや SQL クエリで、印刷する価値のある行にファイルを絞り込めます。この手順が、PDF が読めるかどうかを決めます。

できること

PDF が適切ではない場合

3 つのケースがあり、依頼の大半はこのどれかです。

「Excel がなくても開けるように」。 CSV はすでに開けます。メモ帳、TextEdit、どのブラウザ、Google スプレッドシート、Numbers、そしてどのスマートフォンでも開けます。見た目が心配なら、たいていは別の形式にするのではなく、列を絞ったファイルにすれば解決します。

「変更できないように」。 PDF は、意味のある形で読み取り専用になるわけではありません。簡単に編集でき、簡単に抽出できます。求められているのが改ざん防止なら、答えは署名やチェックサムであって、ファイル形式ではありません。

「データを使えるように」。 PDF は表形式データの入れ物としては最悪で、そこからデータを取り出すのは、ひとつの産業が成り立つほどの作業です。相手が数字を使って何かするなら、CSV を渡し、要約の PDF を添えてください。

PDF が本当に向いているのは、印刷するもの、ページ割りを固定して保管するもの、正式な記録に添付するもの、転送されてもレイアウトが崩れてはいけないものです。

レポートらしく仕上げる

効果の大きい順に 4 つあります。

  1. 数値は右揃え、文字は左揃えにする。 読みやすさをこれほど変えるものは他になく、設定も 1 つだけです。
  2. 小数点以下の桁数をそろえる。 1.5 と 1.4999999 が混在する列は雑に見えますし、たいていは本当の精度ではなく浮動小数点の誤差です。
  3. ヘッダーとフッターを付ける。 タイトル、データの対象日(印刷した日ではありません)、ページ番号を入れます。
  4. ファイルが何なのかを書く。 先頭に 1 行、データの出どころ、適用した絞り込み条件、行数を入れます。半年後には、これが「資料」と「出所不明のファイル」の差になります。
CSV Editor - Smart CSViPhone・iPad

送る前にファイルを直す必要があるとき、たとえば列の丸め、合計の計算、行の削除なども、スマートフォン上で数式列が処理します。結果は CSV の中に保存されるので、何で印刷しても数字は同じです。

できること

表ではなくグラフで

何かを変換する前に、考えてみる価値があります。相手が欲しいのは行でしょうか、それとも全体の形でしょうか。12 か月の推移は 1 本の線であり、12 か月分の表は、読むのに時間がかかる劣った線です。

最も強力な資料は、1 ページ目にグラフ、その後ろに集計した表を置いた形であることが多く、両方を作れるツールなら 2 分で済みます。どちらか一方だけよりも、はるかに役立ちます。

よくある質問

CSV ファイルを PDF に変換するには?
表計算ソフトで開き、横向きと「幅を 1 ページに収める」を設定し、ヘッダー行の繰り返しと枠線をオンにして、PDF として印刷します。コマンドラインでは HTML か Markdown に変換し、ブラウザや pandoc にページ分割させます。スマートフォンなら、PDF を直接書き出せるアプリで数タップで済みます。どの方法でも、先にファイルを絞り込むことが、読みやすい結果になるかどうかを決めます。
PDF で列が途切れてしまうのはなぜ?
印刷倍率の初期値が 100% で、ページ幅を超えた部分が縮小されず、最終行の後ろに別のページ群として印刷されるためです。「幅を 1 ページに収める」を設定してください。Excel では「ページレイアウト → 拡大縮小印刷」にあります。それでも読めない大きさになるなら、1 ページに対して列が多すぎるので、縮小ではなく列を絞り込む必要があります。
PDF の全ページにヘッダー行を繰り返すには?
Excel では「ページレイアウト → 印刷タイトル → タイトル行」にヘッダー行を指定します。Google スプレッドシートでは「印刷 → ヘッダーとフッター → 固定行を繰り返す」です。HTML 経由の変換では、見出しを `thead` に入れて `display: table-header-group` を指定すれば同じ効果が得られます。
PDF と CSV のどちらを送るべき?
相手が数字を使って何かするなら CSV を送ってください。PDF は表形式データを取り出すのが最も難しい形式だからです。読む、印刷する、ページ割りを固定して保管するといった用途なら PDF を送ります。PDF にしてもデータが編集できなくなるわけではないので、改ざん防止が目的なら答えになりません。
CSV から PDF に書き出す行数はどのくらいがよい?
疑問に答えられる範囲で、できるだけ少なくします。数万行の PDF は、1 ページ目より先まで読む人がいない資料です。関係する行に絞るか、GROUP BY で集計してください。本当に欲しかったのは、30 行ほどの集計とグラフであることが多く、ファイル全体は元の CSV として添付するほうが適しています。
PDF にしたら日付や ID が変わってしまったのはなぜ?
PDF ができる前、インポートの時点で表計算ソフトが変換したためです。注文 ID はシリアル値の日付に、長い数字は指数表記になり、先頭のゼロは消えます。列を自動判定させず、CSV を文字列としてインポートするか、値を解釈し直さないツールで変換してください。PDF は、その前の段階で起きた誤りを永久に記録します。

uos — PDF を書き出せる Smart CSV Viewer を作っているため、PDF に何を入れるべきか、入れるべきでないかという疑問をよく受けます。