PDF は汎用性の高いファイル形式である一方、そのままでは表データの編集や計算を行うことが難しい。PDF 内に含まれる表形式のデータを集計・加工したい場合、Excel 形式への変換が有効な手段となる。
本記事では、.NET 環境で PDF から Excel への変換を行う方法の一つとして、ある PDF ライブラリを利用した基本的な実装手順を解説する。単純な変換に加え、複数ページを 1 つのワークシートにまとめる方法や、変換に関する注意点についても触れる。
ライブラリの概要
本記事で使用するライブラリは、.NET アプリケーションにおいて PDF ドキュメントの作成、読み取り、編集、変換などを可能にするものである。NuGet パッケージとして提供されており、Visual Studio のパッケージマネージャーコンソールから以下のコマンドでインストールできる。
PM> Install-Package Spire.PDF
このライブラリは .NET Framework および .NET Core に対応している。PDF から Excel への変換機能はバージョン 6.7.6 で追加され、以降のバージョンで拡張が続けられている。
基本的な PDF から Excel への変換
ライブラリを使用した PDF から Excel への変換は、PdfDocument クラスの LoadFromFile() メソッドと SaveToFile() メソッドを組み合わせることで実現できる。
手順の概要
-
PdfDocumentオブジェクトを作成する -
LoadFromFile()メソッドで PDF ファイルを読み込む -
SaveToFile()メソッドでFileFormat.XLSXを指定して保存する
C# コード例
using Spire.Pdf;
using Spire.Pdf.Conversion;
namespace PdfToExcelSample
{
class Program
{
static void Main(string[] args)
{
// PdfDocument オブジェクトを作成
PdfDocument pdf = new PdfDocument();
// PDF ファイルを読み込む
pdf.LoadFromFile(@"C:\input\sample.pdf");
// Excel 形式(XLSX)で保存する
pdf.SaveToFile(@"C:\output\result.xlsx", FileFormat.XLSX);
// リソースを解放
pdf.Dispose();
}
}
}
このコードは最小限の変換処理を示している。SaveToFile() メソッドで FileFormat.XLSX を指定することで、PDF の内容が Excel ワークブックとして出力される。
複数ページを 1 つのワークシートに変換する
デフォルトの変換動作では、PDF の各ページが個別のワークシートに変換される。すべてのページを 1 つのワークシートにまとめたい場合は、XlsxLineLayoutOptions クラスを使用して変換オプションを設定する。
手順の概要
-
PdfDocumentオブジェクトを作成し、PDFを読み込む -
XlsxLineLayoutOptionsのインスタンスを生成する -
ConvertOptions.SetPdfToXlsxOptions()メソッドで変換オプションを設定する -
SaveToFile()メソッドで保存する
C# コード例
using Spire.Pdf;
using Spire.Pdf.Conversion;
namespace PdfToOneSheet
{
class Program
{
static void Main(string[] args)
{
// PDF を読み込む
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile(@"C:\input\multi_page.pdf");
// 変換オプションを設定
// コンストラクタのパラメータは順に以下を表す:
// convertToMultipleSheet, rotatedText, splitCell, wrapText
XlsxLineLayoutOptions options = new XlsxLineLayoutOptions(
false, // 複数シートに変換しない
true, // 回転テキストを表示
true, // セルを分割
true // テキストを折り返す
);
// PDF から XLSX への変換オプションとして設定
pdf.ConvertOptions.SetPdfToXlsxOptions(options);
// Excel として保存
pdf.SaveToFile(@"C:\output\one_sheet.xlsx", FileFormat.XLSX);
pdf.Dispose();
}
}
}
XlsxLineLayoutOptions のコンストラクタの第 1 パラメータ convertToMultipleSheet に false を指定することで、複数ページが単一のワークシートに変換される。第 2 パラメータ以降は、回転テキストの表示、セルの分割、テキストの折り返しに関する設定である。
変換オプションの各パラメータについて
| パラメータ | 説明 |
|---|---|
| convertToMultipleSheet | PDF の各ページを別々のワークシートに変換するかどうか |
| rotatedText | PDF 内の回転テキストを Excel でも回転して表示するかどうか |
| splitCell | 複数行のテキストを含むセルを行単位で分割するかどうか |
| wrapText | セル内でテキストを折り返すかどうか |
| overlapText | 重複するテキストを表示するかどうか |
overlapText パラメータは、コンストラクタのオーバーロードによって指定できる場合がある。
変換精度に関する注意点
データ損失の可能性
PDF から Excel への変換において、特定の PDF でデータの一部が欠落する問題が報告されている。ライブラリのフォーラムでは、表の内容が変換後に消えるケースが報告されており、開発チームが調査を行っているものの、複雑な文字長の計算が絡むため解決に時間を要している状況が確認できる。
PDF の構造やレイアウトによっては、変換結果が元の表示と完全に一致しない可能性がある。変換対象の PDF で事前にテストを行うことが望ましい。
空のセルに関する問題
複数の表を含む PDF を変換した際に、Excel 出力に多数の空セルが生成されるという報告もある。これは PDF のレイアウト構造と Excel のグリッド構造の差異に起因するものであり、変換後の後処理が必要になる場合がある。
レイアウトのずれ
表抽出機能(PdfTableExtractor)を使用した場合に、行の位置がずれる問題も過去に報告されている。この問題はバージョンアップにより修正が進められているが、変換対象の PDF によっては同様の挙動が生じる可能性がある。
評価版の制限
ライセンス未設定の評価版では、生成される Excel ファイルに赤い透かしが追加され、変換可能なページ数が最初の 10 ページに制限される。この制限は製品版ライセンスを適用することで解除される。
なお、購入したライセンスであっても、展開先のマシン ID がライセンス条件で定められた数を超過している場合には評価版の警告メッセージが表示されることがある。ライセンスの適用範囲と実際の利用環境が一致しているか確認することが推奨される。
OCR による変換精度の向上
バージョン 11.7.14 以降では、XlsxLineLayoutOptions.TextRecognizer プロパティを使用して OCR ライブラリを統合し、PDF 内のテキスト認識精度を向上させることが可能になった。テキストが画像として埋め込まれている PDF など、通常の変換では文字情報を取得できないケースにおいて有効な選択肢となり得る。
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("in.pdf");
XlsxLineLayoutOptions options = new XlsxLineLayoutOptions(false, false, false, true);
options.TextRecognizer = new TextRecognizer();
doc.ConvertOptions.SetPdfToXlsxOptions(options);
doc.SaveToFile("out.xlsx", FileFormat.XLSX);
OCR ライブラリには PaddleOCRSharp などが利用可能であり、ITextRecognizer インターフェースを実装したクラスを作成してプロパティに設定する。
まとめ
本記事で紹介したライブラリを使用することで、C# コードから比較的少ない手順で PDF ファイルを Excel 形式に変換できる。基本的な変換は LoadFromFile() と SaveToFile() の 2 つのメソッドで完結し、XlsxLineLayoutOptions を利用することで複数ページを単一シートにまとめることも可能である。
一方で、PDF の構造によってはデータ損失や空セルの生成、レイアウトのずれが生じる可能性が報告されている。変換対象とする PDF の特性を把握した上で、事前のテストと必要に応じた後処理を検討することが重要である。