チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル».NET»Spire.Presentation for .NET»保護»C#:PowerPoint プレゼンテーションを保護または保護解除する方法
2026-10-30

Python で CSV を PDF に変換する方法(レイアウト調整)

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 ファイルと変換後の PDF の比較

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

CSV から PDF への変換を実行したときのコンソール出力

見出し行は太字・薄いグレーの背景・中央揃えにし、表全体に細い罫線を引いています。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 では横向きが便利です。

A4 縦向きで出力した売上明細の PDF

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 に変換する方法を紹介しました。

  1. CSV を読み込む — LoadFromFile() に区切り文字と取り込み開始位置を指定します。
  2. 列幅を整える — AutoFitColumn() で 1 列目から最終列まで調整します。
  3. 1 ページに収める — ConverterSetting.SheetFitToPage = True を設定します。
  4. 用紙サイズを指定する — 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 を設定します。

Read 6 times