CSV は表計算ソフトやデータベースとの受け渡しに便利な形式ですが、そのままではレイアウトが整わず、印刷や配布には向きません。CSV を PDF に変換しておくと、用紙サイズに合わせた表として共有でき、閲覧環境による見た目の違いも抑えられます。
本記事では、Spire.XLS for Python を使って、CSV を読み込み、配布しやすい PDF に仕上げる手順を紹介します。列幅の自動調整、見出し行の書式、1 ページへの集約、A4 用紙への配置を、変換前後の実例とともに確認します。
クイックナビゲーション
1. CSV から PDF への変換の流れ
CSV の読み込みから PDF の保存までは、次の 4 つの手順で進みます。
| 手順 | 使用する API | 役割 |
|---|---|---|
| CSV の読み込み | Workbook.LoadFromFile() |
区切り文字と取り込み開始位置を指定して読み込む |
| 1 ページに収める | ConverterSetting.SheetFitToPage |
シート全体を 1 ページに収める |
| 列幅の調整 | Worksheet.AutoFitColumn() |
セルの内容に合わせて列幅を整える |
| PDF の保存 | Workbook.SaveToFile() |
FileFormat.PDF を指定して保存する |
CSV は値だけを持つ形式のため、PDF にする際は列幅を内容に合わせて整えると読みやすくなります。AutoFitColumn() で列幅を調整し、見出し行の書式や用紙サイズを設定すると、配布しやすい PDF になります。
2. 準備するものとサンプル CSV
ライブラリのインストール
pip install spire.xls
スクリプトでは、必要なクラスを読み込みます。
from spire.xls import *
import os
サンプル CSV
今回は、18 商品の売上明細をまとめた 売上明細.csv を使います。1 行目が見出し、2 行目以降が明細です。
| 列 | 内容 | 例 |
|---|---|---|
| A | 商品コード | A-101 |
| B | 商品名 | ノートPC |
| C | 数量 | 12 |
| D | 単価 | 128000 |
| E | 金額 | 1536000 |
| F | 担当者 | 佐藤 |
日本語を含む CSV は、UTF-8(BOM 付き)で保存しておくと、読み込み時にも文字化けしません。区切り文字はカンマ、取り込み開始位置は 1 行目・1 列目を指定します。
3. CSV を PDF に変換する
CSV を読み込み、シート全体を 1 ページに収めた PDF として保存します。列幅の自動調整と、見出し行の書式もあわせて設定します。
import os
from spire.xls import *
os.makedirs("output", exist_ok=True)
workbook = Workbook()
workbook.LoadFromFile("売上明細.csv", ",", 1, 1)
workbook.ConverterSetting.SheetFitToPage = True
sheet = workbook.Worksheets[0]
for i in range(1, sheet.LastColumn + 1):
sheet.AutoFitColumn(i)
header = sheet.Range[1, 1, 1, sheet.LastColumn]
header.Style.Font.IsBold = True
header.Style.Color = Color.get_LightGray()
header.Style.HorizontalAlignment = HorizontalAlignType.Center
used = sheet.Range[1, 1, sheet.LastRow, sheet.LastColumn]
for edge in (BordersLineType.EdgeLeft, BordersLineType.EdgeRight,
BordersLineType.EdgeTop, BordersLineType.EdgeBottom):
used.Borders[edge].LineStyle = LineStyleType.Thin
workbook.SaveToFile("output/CSVToPDF.pdf", FileFormat.PDF)
workbook.Dispose()
print("保存しました: output/CSVToPDF.pdf")
print("ファイルサイズ:", os.path.getsize("output/CSVToPDF.pdf"), "bytes")
LoadFromFile() の 2 番目の引数は区切り文字、3 番目と 4 番目はシート上の取り込み開始行・開始列です。通常の CSV なら "," , 1, 1 を指定します。
ConverterSetting.SheetFitToPage = True を設定すると、シート全体が 1 ページに収まるように PDF が作成されます。列幅は AutoFitColumn() で 1 列目から最終列まで順に調整します。
変換元の CSV と、変換後の PDF を並べると次のようになります。

このスクリプトを csv_to_pdf.py として保存して実行すると、保存したファイル名とサイズが表示されます。

見出し行は太字・薄いグレーの背景・中央揃えにし、表全体に細い罫線を引いています。CSV の値をそのまま PDF にしたい場合は、この書式設定の部分を省略しても変換できます。
4. 用紙サイズと向きを指定する
印刷や配布用に A4 用紙へ配置したい場合は、PageSetup で用紙サイズと向きを指定します。縦向き・横向きを選べます。ここでは A4 縦向きで出力します。
import os
from spire.xls import *
workbook = Workbook()
workbook.LoadFromFile("売上明細.csv", ",", 1, 1)
workbook.ConverterSetting.SheetFitToPage = False
sheet = workbook.Worksheets[0]
sheet.PageSetup.PaperSize = PaperSizeType.PaperA4
sheet.PageSetup.Orientation = PageOrientationType.Portrait
sheet.PageSetup.CenterHorizontally = True
for i in range(1, sheet.LastColumn + 1):
sheet.AutoFitColumn(i)
header = sheet.Range[1, 1, 1, sheet.LastColumn]
header.Style.Font.IsBold = True
header.Style.Color = Color.get_LightGray()
header.Style.HorizontalAlignment = HorizontalAlignType.Center
used = sheet.Range[1, 1, sheet.LastRow, sheet.LastColumn]
for edge in (BordersLineType.EdgeLeft, BordersLineType.EdgeRight,
BordersLineType.EdgeTop, BordersLineType.EdgeBottom):
used.Borders[edge].LineStyle = LineStyleType.Thin
workbook.SaveToFile("output/売上明細_A4.pdf", FileFormat.PDF)
workbook.Dispose()
print("保存しました: output/売上明細_A4.pdf")
print("ファイルサイズ:", os.path.getsize("output/売上明細_A4.pdf"), "bytes")
PaperSizeType.PaperA4 で A4 用紙を指定し、PageOrientationType.Portrait で縦向きにします。CenterHorizontally = True を設定すると、表がページの左右中央に配置されます。横向きにしたい場合は PageOrientationType.Landscape を指定します。列数が多い CSV では横向きが便利です。

SheetFitToPage = False にすると、用紙サイズに合わせてページが分割されます。1 ページに収めたい場合は前節の True、用紙サイズを優先したい場合は False を使い分けます。
5. 行数が多い CSV のページ分割
行数が多い CSV では、SheetFitToPage = False のまま用紙サイズを指定すると、表が複数ページに分割されます。ページの区切りは用紙サイズと余白、行の高さに応じて自動的に決まります。
60 行の明細を持つ CSV を A4 縦向きで変換すると、2 ページの PDF になります。大量の明細を 1 枚の一覧として確認したい場合は、前節までのように SheetFitToPage = True を使うと、全体を 1 ページに収めた PDF を作成できます。用途に応じて、ページ分割と 1 ページへの集約を使い分けてください。
まとめ
本記事では、Spire.XLS for Python を使って CSV を PDF に変換する方法を紹介しました。
- CSV を読み込む —
LoadFromFile()に区切り文字と取り込み開始位置を指定します。 - 列幅を整える —
AutoFitColumn()で 1 列目から最終列まで調整します。 - 1 ページに収める —
ConverterSetting.SheetFitToPage = Trueを設定します。 - 用紙サイズを指定する —
PageSetupのPaperSizeとOrientationで A4・横向きなどを指定します。
CSV の読み込みから PDF の保存までをスクリプト化しておくと、日次・月次の帳票出力を同じ手順で繰り返せます。見出し行の書式や罫線を加えると、配布先でそのまま使える PDF に仕上がります。
Excel を PDF に変換する方法は Python で Excel を PDF に変換する方法 で、CSV の読み書きは Python リストを CSV に変換する方法 で解説しています。
Spire.XLS for Python の全機能を評価したい場合は、30 日間の無料ライセンスを申請できます。
7. FAQ
Microsoft Excel をインストールせずに CSV を PDF に変換できますか?
Spire.XLS for Python は Excel のアプリケーションを必要としないため、Python だけで CSV の読み込みから PDF の保存まで完結します。
日本語を含む CSV が文字化けしないようにするにはどうすればよいですか?
CSV を UTF-8(BOM 付き)で保存し、LoadFromFile() で読み込みます。本記事のサンプルでは、日本語の商品名や担当者名もそのまま PDF に出力されています。
CSV 全体を 1 ページの PDF に収めるにはどうすればよいですか?
workbook.ConverterSetting.SheetFitToPage = True を設定し、AutoFitColumn() で列幅を調整してから SaveToFile() で PDF に保存します。
用紙サイズや向きを指定できますか?
はい。sheet.PageSetup.PaperSize に PaperSizeType.PaperA4 などを設定し、sheet.PageSetup.Orientation に PageOrientationType.Landscape または Portrait を指定します。
列幅を内容に合わせるにはどうすればよいですか?
for i in range(1, sheet.LastColumn + 1): sheet.AutoFitColumn(i) のように、1 列目から最終列まで AutoFitColumn() を呼び出して列幅を内容に合わせます。
行数が多い CSV はどうなりますか?
SheetFitToPage = False のまま用紙サイズを指定すると、表が複数ページに分割されます。1 ページにまとめたい場合は SheetFitToPage = True を設定します。






