複数のPDFファイルをひとつのファイルにまとめたいと思ったことはありませんか?
特にファイル名が「1.pdf」「2.pdf」…「100.pdf」のように連番で管理されている場合、手動で結合するのは非常に面倒です。
この記事では、C#を使って1から100までの番号付きPDFファイルを自動で読み込み、順番通りにひとつのPDFファイルにまとめるプログラムの作り方を解説します。
初心者にもわかりやすいようにライブラリの導入からコードの解説まで丁寧にご紹介しますので、ぜひ参考にしてください。
C#でPDFを操作するには、専用のライブラリが必要です。今回は、.NET Core/.NET 5+に対応している PdfSharpCore を使用します。
このライブラリは無料で使用でき、PDFの読み込み・作成・結合が可能です。
bashコピーする編集するInstall-Package PdfSharpCore
また、PDFの読み込みに対応するためには PdfSharpCore.Fonts
や System.Text.Encoding.CodePages
なども合わせて導入しておくとトラブルを回避できます。
今回のプログラムでは、次のような前提でファイルを読み込みます:
以下のような構成にしてください:
プロジェクトフォルダ/
├─ input/
│ ├─ 1.pdf
│ ├─ 2.pdf
│ └─ ...
├─ output/
└─ Program.cs
以下が実際の結合プログラムのソースコードです。
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}");
}
}
}
結合対象のフォルダが存在するかを確認し、存在しない場合は処理を止めます。また、出力フォルダがなければ自動で作成するようにしています。
各PDFファイルは PdfReader.Open
で読み込み、Import
モードにすることで編集不可のままページ単位で読み込むことができます。
ファイルが存在しない・壊れているなどの状況に備えて、例外処理を入れています。
スムーズなバッチ処理を行うためには、こういった「スキップしつつ続ける設計」が重要です。
このプログラムを実行すると、最大100枚のPDFファイルがひとつのファイル「merged.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結合ツールは、書類の整理、資料の一括提出など、ビジネスシーンでも非常に役立ちます。
ぜひあなたの業務にも取り入れて、効率化に役立ててください!