C#でPDFファイルからバーコードを読み取ることは、多くのビジネスワークフローで実用的なニーズです。特にスキャン済みの書類やデジタルフォームを自動処理する場合に頻繁に使用されます。物流、金融、医療、製造などの分野では、PDF内に画像として埋め込まれたバーコード、またはベクターグラフィックスとして描かれたバーコードが含まれていることがよくあります。
本記事では、C# を使用して PDF からバーコードを読み取るための 2 つの実践的な方法を紹介します。1 つは PDF ページに埋め込まれた画像を抽出してスキャンする方法、もう 1 つはページ全体を画像としてレンダリングし、その画像からバーコードを認識する方法です。いずれの方法も、1次元バーコードと2次元バーコードの両方に対応しています。
目次
✅ 準備:必要な環境とライブラリ
C#でPDFからバーコードを認識するには、以下の環境を用意してください:
- NuGet パッケージに対応した C# プロジェクト(.NET Framework / .NET Core / .NET 6 など)
- 以下の2つのライブラリをインストール:
- Spire.Barcode for .NET:バーコード認識用
- Spire.PDF for .NET:PDF 処理用
NuGet パッケージマネージャーで以下のコマンドを実行:
Install-Package Spire.Barcode
Install-Package Spire.PDF
🚀 ステップバイステップ:C#でPDFのバーコードを読み取る
バーコードの格納方法に応じて、以下のいずれかの方法を選んでください。
方法①:埋め込み画像を抽出してバーコードを認識
スキャンされたPDFでは、バーコードは画像として埋め込まれていることが多いため、この方法が効果的です。BarcodeScanner.ScanOne()
メソッドを使って画像から1つのバーコードを読み取ることができます。
サンプルコード:
using Spire.Barcode;
using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.Drawing;
namespace ReadPDFBarcodeByExtracting
{
class Program
{
static void Main(string[] args)
{
// PDFファイルを読み込む
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("Sample.pdf");
// ページの画像情報を取得する
PdfPageBase page = pdf.Pages[0];
PdfImageHelper imageHelper = new PdfImageHelper();
PdfImageInfo[] imagesInfo = imageHelper.GetImagesInfo(page);
// ページ内の画像を順に処理してバーコードを読み取る
int index = 0;
foreach (PdfImageInfo imageInfo in imagesInfo)
{
Image image = imageInfo.Image;
string scanResult = BarcodeScanner.ScanOne((Bitmap)image);
Console.WriteLine($"第 {index + 1} 個の画像のスキャン結果:\n" + scanResult + "\n");
index++;
}
}
}
}
以下は、方法①(画像抽出)でのスキャン結果イメージです:
🔍 おすすめのケース:スキャンされたPDFや、バーコードが画像として含まれている場合。
方法②:ページ全体を画像としてレンダリングしてスキャン
PDF内のバーコードが画像ではなく、ベクター形式で描画されている場合には、この方法が有効です。BarcodeScanner.Scan()
メソッドを使えば、1つの画像から複数のバーコードを一括で読み取ることが可能です。
サンプルコード:
using Spire.Barcode;
using Spire.Pdf;
using System.Drawing;
namespace ReadPDFBarcodeByExtracting
{
class Program
{
static void Main(string[] args)
{
// PDFファイルを読み込む
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("Sample.pdf");
// ドキュメントの各ページを処理し、ページを画像として保存
for (int i = 0; i < pdf.Pages.Count; i++)
{
Image image = pdf.SaveAsImage(i);
// 画像内のすべてのQRコード情報をスキャンして認識する
string[] scanResults = BarcodeScanner.Scan((Bitmap)image);
for (int j = 0; j < scanResults.Length; j++)
{
Console.WriteLine($"第 {i + 1} ページの第 {j + 1} 番目のバーコードのスキャン結果:\n" + scanResults[j] + "\n");
}
}
}
}
}
以下は、方法②(ページ全体のレンダリング)によるスキャン結果の例です:
🔍 おすすめのケース:PDF内のバーコードが画像ではなく描画されたコンテンツである場合。
🔎 どちらの方法を使うべき?
ケース | 推奨される方法 |
---|---|
スキャンされたページ | 埋め込み画像の抽出 |
デジタルPDF・描画バーコード | ページ全体の画像化 |
混在・不明な構造 | 両方を試すのがおすすめ |
構造が不明なPDFには、両方の方法を併用することでより確実な認識が可能です。
❓ FAQ(よくある質問)
Q: 複数ページのPDFでも対応できますか?
A: はい、すべてのページをループ処理することで対応可能です。
Q: 1ページに複数のバーコードがある場合は?
A: BarcodeScanner.Scan()
メソッドを使えば、複数のバーコードを一括で検出できます。
Q: 解像度を上げれば認識精度は向上しますか?
A: はい。たとえば、300 DPI以上で画像化すると、小さなバーコードでも認識精度が向上します。SaveAsImage(int, PdfImageType, int, int)
を使用してDPIを指定できます。
Q: 無料で使用できますか?
A: はい。 Free Spire.Barcode for .NET と Free Spire.PDF for .NET の組み合わせで基本的なバーコード読み取りが可能です。ただし、無料版には機能制限があります。商用利用や高機能が必要な場合は、無料トライアルライセンスを申請して評価することもできます。
✅ まとめ
C# を使って PDF ファイルからバーコードを読み取るには、画像抽出とページレンダリングという 2 つの方法があり、それぞれのPDF形式に応じて柔軟に対応できます。Spire.Barcode と Spire.PDF を活用すれば、効率的かつ確実なバーコード認識が実現できます。