C#でPDFファイルからバーコードを読み取ることは、多くのビジネスワークフローで実用的なニーズです。特にスキャン済みの書類やデジタルフォームを自動処理する場合に頻繁に使用されます。物流、金融、医療、製造などの分野では、PDF内に画像として埋め込まれたバーコード、またはベクターグラフィックスとして描かれたバーコードが含まれていることがよくあります。 本記事では、C# を使用して PDF からバーコードを読み取るための 2 つの実践的な方法を紹介します。1 つは PDF ページに埋め込まれた画像を抽出してスキャンする方法、もう 1 つはページ全体を画像としてレンダリングし、その画像からバーコードを認識する方法です。いずれの方法も、1次元バーコードと2次元バーコードの両方に対応しています。 目次 準備:必要な環境とライブラリ ステップバイステップ:C#でPDFのバーコードを読み取る 方法①:埋め込み画像を抽出してバーコードを認識 方法②:ページ全体を画像としてレンダリングしてスキャン どちらの方法を使うべき? FAQ(よくある質問) ✅ 準備:必要な環境とライブラリ 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や、バーコードが画像として含まれている場合。 参考記事:C#を使用して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 を活用すれば、効率的かつ確実なバーコード認識が実現できます。