C#で複数のPDFファイルを結合する!実用的なサンプルコード付き解説

複数のPDFファイルをひとつのファイルにまとめたいと思ったことはありませんか?
特にファイル名が「1.pdf」「2.pdf」…「100.pdf」のように連番で管理されている場合、手動で結合するのは非常に面倒です。
この記事では、C#を使って1から100までの番号付きPDFファイルを自動で読み込み、順番通りにひとつのPDFファイルにまとめるプログラムの作り方を解説します。
初心者にもわかりやすいようにライブラリの導入からコードの解説まで丁寧にご紹介しますので、ぜひ参考にしてください。


PDF結合に使うライブラリ「PdfSharpCore」

C#でPDFを操作するには、専用のライブラリが必要です。今回は、.NET Core/.NET 5+に対応している PdfSharpCore を使用します。
このライブラリは無料で使用でき、PDFの読み込み・作成・結合が可能です。

PdfSharpCoreのインストール方法

  1. Visual Studio でプロジェクトを作成(コンソールアプリでOK)
  2. NuGetパッケージマネージャで以下をインストールします:
bashコピーする編集するInstall-Package PdfSharpCore

また、PDFの読み込みに対応するためには PdfSharpCore.FontsSystem.Text.Encoding.CodePages なども合わせて導入しておくとトラブルを回避できます。


フォルダ構成と前提条件

今回のプログラムでは、次のような前提でファイルを読み込みます:

  • PDFファイルはすべて「input」フォルダに格納されている
  • ファイル名は「1.pdf」~「100.pdf」
  • 結合したファイルは「output」フォルダに「merged.pdf」として保存される

以下のような構成にしてください:

プロジェクトフォルダ/
├─ input/
│ ├─ 1.pdf
│ ├─ 2.pdf
│ └─ ...
├─ output/
└─ Program.cs

実際のC#コード

以下が実際の結合プログラムのソースコードです。

using System;
using System.IO;
using PdfSharpCore.Pdf;
using PdfSharpCore.Pdf.IO;

class Program
{
static void Main()
{
string inputFolder = "input";
string outputFolder = "output";
string outputFile = Path.Combine(outputFolder, "merged.pdf");

if (!Directory.Exists(inputFolder))
{
Console.WriteLine($"入力フォルダ '{inputFolder}' が存在しません。");
return;
}

if (!Directory.Exists(outputFolder))
{
Directory.CreateDirectory(outputFolder);
}

using (PdfDocument outputDocument = new PdfDocument())
{
for (int i = 1; i <= 100; i++)
{
string filePath = Path.Combine(inputFolder, $"{i}.pdf");

if (!File.Exists(filePath))
{
Console.WriteLine($"ファイル {i}.pdf が見つかりません。スキップします。");
continue;
}

try
{
using (PdfDocument inputDocument = PdfReader.Open(filePath, PdfDocumentOpenMode.Import))
{
foreach (PdfPage page in inputDocument.Pages)
{
outputDocument.AddPage(page);
}

Console.WriteLine($"{i}.pdf を追加しました。");
}
}
catch (Exception ex)
{
Console.WriteLine($"ファイル {i}.pdf の読み込みに失敗しました: {ex.Message}");
}
}

outputDocument.Save(outputFile);
Console.WriteLine($"結合完了!保存先: {outputFile}");
}
}
}

コードのポイント解説

1. フォルダとファイルの存在確認

結合対象のフォルダが存在するかを確認し、存在しない場合は処理を止めます。また、出力フォルダがなければ自動で作成するようにしています。

2. PdfReader.Openによる読み込み

各PDFファイルは PdfReader.Open で読み込み、Import モードにすることで編集不可のままページ単位で読み込むことができます。

3. エラーハンドリングも忘れずに

ファイルが存在しない・壊れているなどの状況に備えて、例外処理を入れています。
スムーズなバッチ処理を行うためには、こういった「スキップしつつ続ける設計」が重要です。


実行結果と注意点

このプログラムを実行すると、最大100枚のPDFファイルがひとつのファイル「merged.pdf」に順番通りに結合されます。

注意点

  • 各ファイルが正しくPDF形式で保存されている必要があります。
  • すべてのPDFに同じサイズのページが含まれているとは限らないため、見た目に若干のズレが出る可能性があります。
  • ファイル数が非常に多くなる場合、メモリ使用量に注意してください。

応用:ファイル名がバラバラの場合の対処

もしファイル名が「001_履歴書.pdf」「002_職務経歴書.pdf」のように番号付きでも名称が異なる場合、Directory.GetFiles()で取得し、ソートして結合する方法もあります。

例:

var files = Directory.GetFiles("input", "*.pdf")
.OrderBy(f => int.Parse(Path.GetFileNameWithoutExtension(f).Split('_')[0]));

まとめ

今回は、C#とPdfSharpCoreライブラリを使って、連番のPDFファイル(1.pdf~100.pdf)を順番に結合する方法を紹介しました。

このようなPDF結合ツールは、書類の整理、資料の一括提出など、ビジネスシーンでも非常に役立ちます。
ぜひあなたの業務にも取り入れて、効率化に役立ててください!

タイトルとURLをコピーしました