チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル»barcode net

Displaying items by tag: barcode net

ASP.NET CoreでC#とSpire.Barcodeを使ってQRコードとバーコードをスキャン

現在、多くの業務アプリケーションでは ASP.NET 環境で QR コードやバーコードをスキャン するニーズが高まっています。チケット認証や決済、在庫管理などで、ASP.NET の QR コードスキャナーやバーコード読み取り機能を導入すると、Web/エンタープライズシステムの効率と精度が大きく向上します。

本チュートリアルでは、Spire.Barcode for .NET を使用し、C# で ASP.NET にバーコードスキャン機能を実装する手順を解説します。画像アップロードから QR/各種バーコードの読み取りまでをカバーし、高い認識精度と既存プロジェクトへの容易な統合を実現します。

ガイド構成

1. プロジェクトの準備

ステップ 1:プロジェクトの作成

スキャン機能の土台となる ASP.NET Core Razor Pages プロジェクトを作成します。以下のコマンド(または Visual Studio での作成)を使用します。

dotnet new webapp -n QrBarcodeScanner
cd QrBarcodeScanner

ステップ 2:Spire.Barcode for .NET のインストール

幅広いバーコード形式をデコードできる Spire.Barcode for .NET の NuGet パッケージをインストールします。NuGet パッケージ マネージャーから検索するか、次のコマンドを実行します。

dotnet add package Spire.Barcode

Spire.Barcode for .NET は、QR コードに加え Code128、EAN-13、Code39 など多数の形式をサポートします。追加の画像処理ライブラリは不要で、ASP.NET Core へ簡単に組み込めます。対応形式の一覧は BarcodeType API リファレンス を参照してください。

小規模用途には Free Spire.Barcode for .NET も利用できます。

2. ASP.NETでC#によるQRコード・バーコードスキャン機能の実装

信頼性の高いスキャン機能は、次の 2 要素で構成します。

  • アップロード画像を処理・デコードする バックエンドロジック
  • ユーザーが画像をアップロードできる シンプルな Web インターフェイス

まずバックエンド実装でスキャン処理を確実に動かし、その後最小構成の Razor Pages フロントエンドに接続します。

バックエンド:Spire.Barcode によるスキャン処理

アップロードファイルをメモリに読み込み、Spire.Barcode で処理します(MemoryStream またはファイルパスのいずれも可)。スキャン結果は配列で返却されます。形式ごとの分岐は不要で、QR/各種バーコードを一括認識できます。

Index.cshtml.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Spire.Barcode;

public class IndexModel : PageModel
{
    [BindProperty]
    public IFormFile Upload { get; set; }  // アップロードされたファイル

    public string Result { get; set; }     // スキャン結果
    public string UploadedImageBase64 { get; set; } // プレビュー用 Base64 文字列

    public void OnPost()
    {
        if (Upload != null && Upload.Length > 0)
        {
            using (var ms = new MemoryStream())
            {
                // ファイルをメモリに読み込む
                Upload.CopyTo(ms);

                // HTML <img> 表示用に Base64 へ変換
                UploadedImageBase64 = "data:" + Upload.ContentType + ";base64," +
                                      Convert.ToBase64String(ms.ToArray());

                // ストリーム位置を先頭に戻す
                ms.Position = 0;

                // バーコード/QR コードをスキャン
                try
                {
                    string[] scanned = BarcodeScanner.Scan(ms);
                    Result = scanned != null && scanned.Length > 0
                        ? string.Join(", ", scanned)
                        : "コードが検出されませんでした。";
                }
                catch (Exception ex)
                {
                    Result = "スキャン中にエラーが発生しました: " + ex.Message;
                }
            }
        }
    }
}

主なクラスとメソッド

  • BarcodeScanner:QR/バーコードをデコードする静的クラス

  • BarcodeScanner.Scan(Stream imageStream):ストリームから直接スキャンし、検出文字列の配列を返します(1 枚の画像内に複数コードがある場合も対応)。

  • 補助メソッド(任意)

    • BarcodeScanner.Scan(string imagePath):ファイルパスでスキャンします。
    • BarcodeScanner.ScanInfo(string imagePath):種類・位置・データなど追加情報を含む結果を取得します。

要件に応じて使い分けできます。

フロントエンド:アップロード&結果表示 UI

以下は、画像をアップロードしてスキャン結果を表示する簡易 UI です。アップロード後にプレビューと認識結果を表示し、ワンクリックでコピーできます。検証を素早く行えるよう、最低限のスタイルにしています。

Index.cshtml

@page
@model IndexModel
@{
    ViewData["Title"] = "QR & バーコードスキャナー";
}

<div style="max-width:420px;margin:40px auto;padding:20px;border:1px solid #ccc;border-radius:8px;background:#f9f9f9;">
    <h2 style="font-size:1.5rem;">QR & バーコードスキャナー</h2>
    <form method="post" enctype="multipart/form-data" id="uploadForm">
        <input type="file" name="upload" accept="image/*" required onchange="this.form.submit()" style="margin:10px 0;" />
    </form>

    @if (!string.IsNullOrEmpty(Model.UploadedImageBase64))
    {
        <div style="margin-top:15px;text-align:center;">
            <img src="@Model.UploadedImageBase64" style="width:300px;height:300px;object-fit:contain;border:1px solid #ddd;background:#fff;" />
        </div>
    }

    @if (!string.IsNullOrEmpty(Model.Result))
    {
        <div style="margin-top:15px;padding:10px;background:#e8f5e9;border-radius:6px;">
            <b>スキャン結果:</b>
            <p id="scanText">@Model.Result</p>
            <button type="button" onclick="navigator.clipboard.writeText(scanText.innerText)" style="background:#28a745;color:#fff;padding:6px 10px;border:none;border-radius:4px;">コピー</button>
        </div>
    }
</div>

以下は、QR コードと Code128 バーコードの両方を認識した後の画面イメージです。結果表示とワンクリックコピーが利用できます。

ASP.NET Core QRコードとCode128バーコードのスキャン結果表示例

この ASP.NET Core アプリは、アップロード画像から QR コードおよび各種バーコードをスキャンできます。コード生成が必要な場合は、ASP.NET Core で QR コードを生成する方法 も参照してください。

3. テストとトラブルシューティング

アプリを実行したら、次のような画像で動作確認を行います。

  • URL またはプレーンテキストを含む QR コード画像
  • Code128EAN-13 などの バーコード画像

認識がうまくいかない場合のチェックポイント:

  • コントラストが高く、歪みの少ない画像を使用します。
  • 解像度は極端に大きすぎ/小さすぎないものにします。
  • JPG / PNG / BMP など複数形式で試します。
  • 反射・映り込み・暗所などを避けます。
  • 1 枚の画像に複数コードがある場合は、各コードの間隔を十分に空けて認識精度を高めます。

回帰テスト向けに、サンプルの QR/バーコード画像ライブラリを小規模に用意しておくと便利です。

4. 他の .NET アプリケーションへの応用

本チュートリアルのスキャンロジックは アプリ種別に依存しません。画像の受け渡し方法だけを変えれば、以下のような環境でも同じ BarcodeScanner.Scan() を再利用できます。

  • ASP.NET Core MVC コントローラーWeb API エンドポイント
  • WinForms / WPF などのデスクトップアプリ
  • コンソールユーティリティ(バッチ処理)

例:最小構成の ASP.NET Core Web API HTTP POST で画像ファイルを受け取り、JSON で結果を返します。

[ApiController]
[Route("api/[controller]")]
public class ScanController : ControllerBase
{
    [HttpPost]
    public IActionResult Scan(IFormFile file)
    {
        if (file == null) return BadRequest("No file uploaded");
        using var ms = new MemoryStream();
        file.CopyTo(ms);
        ms.Position = 0;
        string[] results = BarcodeScanner.Scan(ms);
        return Ok(results);
    }
}

例:コンソールアプリ ローカル画像をスキャンして結果を出力します。

string[] result = BarcodeScanner.Scan(@"C:\path\to\image.png");
Console.WriteLine(string.Join(", ", result));

この柔軟性により、既存/新規の .NET プロジェクトへ QR/バーコードスキャンを素早く追加できます。

5. まとめ

本記事では、Spire.Barcode for .NET を用いて ASP.NET Core に QR/バーコードスキャン機能を実装する手順 を解説しました。画像を受け取り、デコードし、結果を表示するまでの流れをシンプルに構築でき、EC、チケット、ドキュメント認証など多様な業務シナリオに応用できます。

高度な要件に対しては、認識処理のカスタマイズや複数画像形式・バーコード種類への詳細対応など、追加機能も利用可能です。すべての高度機能を解放するには、無償評価ライセンスの申請 を行ってください。

今すぐ Spire.Barcode for .NET をダウンロード して、ASP.NET 向けのバーコードスキャン機能を実装しましょう。

Published in Spire.Barcode for .NET
Tagged under

Spire.Barcode for .NETを使ってASP.NET C#でQRコードを生成

QRコードは、認証や非接触決済、URL・連絡先情報の共有など、現代のWebアプリケーションに欠かせない要素となっています。 ASP.NET を使った開発においても、C#でQRコードを生成する機能は、実用的かつ頻繁に求められる機能の一つです。

本記事では、Spire.Barcode for .NET を用いて、ASP.NET(Razor Pagesベース)でQRコードを生成する方法を、実際のコードを交えながら丁寧に解説します。紹介する手法は、MVCやWeb API、Web Formsといった他のASP.NETプロジェクトにも応用可能です。

目次

1. プロジェクトの準備と依存関係

必要な環境:

以下の環境が必要です:

  • Visual Studio 2019 以降
  • .NET 6 以降
  • ASP.NET Core Web アプリ(Razor Pages テンプレート)
  • NuGetパッケージ:Spire.Barcode for .NET

ライブラリのインストール:

NuGet パッケージマネージャーコンソールから以下のコマンドでインストールします:

Install-Package Spire.Barcode

Spire.Barcode は、外部APIを使用せずにQRコードをメモリ上で生成できる、完全な.NET向けバーコードライブラリです。小規模なプロジェクトであれば、Free Spire.Barcode for .NET の利用も可能です。

2. ASP.NETでQRコードを生成(C#)

このセクションでは、ASP.NET Core Razor Pages プロジェクトを使って、QRコード生成機能を実装する方法を解説します。

ステップ1:PageModelにQRコード生成ロジックを追加

以下は、Index.cshtml.cs ファイルに記述するC#コードです。ユーザーの入力を受け取り、Spire.Barcodeを使ってQRコードを生成し、それをBase64文字列としてフロントエンドに返します。

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Spire.Barcode;

public class IndexModel : PageModel
{
    [BindProperty]
    public string InputData { get; set; }

    public string QrCodeBase64 { get; set; }

    public void OnPost()
    {
        if (!string.IsNullOrWhiteSpace(InputData))
        {
            QrCodeBase64 = GenerateQrCodeBase64(InputData);
        }
    }
    
    private string GenerateQrCodeBase64(string input)
    {
        var settings = new BarcodeSettings
        {
            Type = BarCodeType.QRCode,            // QRコードの種類
            Data = input,                         // エンコードするメインデータ
            Data2D = input,                       // 2次元バーコード用に必要(通常は Data と同じ)
            QRCodeDataMode = QRCodeDataMode.Byte, // バイトモード(多言語コンテンツに対応)
            QRCodeECL = QRCodeECL.M,              // 中レベルの誤り訂正(15%)
            X = 3,                                // モジュールサイズ(画像の寸法に影響)
            ShowText = false,                     // デフォルトのバーコードテキストを非表示
            ShowBottomText = true,                // カスタムの下部テキストを表示
            BottomText = input                    // QRコードの下に表示するテキスト
        };

        var generator = new BarCodeGenerator(settings);
        using var ms = new MemoryStream();
        var qrImage = generator.GenerateImage();
        qrImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        return Convert.ToBase64String(ms.ToArray());
    }
}

ポイント:

  • BarcodeSettings でQRコードの設定(内容、誤り訂正レベル、表示文字など)を定義
  • GenerateImage() でQRコード画像を生成
  • Base64文字列に変換することで、ファイル保存せずにHTML上に直接表示が可能

ステップ2:QRコード表示用のRazorページを作成

以下は、Index.cshtml のマークアップです。入力フォーム、QRコードの表示、画像のダウンロードリンクを含みます。

@page
@model IndexModel
@{
    ViewData["Title"] = "QRコードジェネレーター";
}

<h2>QRコードジェネレーター</h2>

<form method="post">
    <label for="InputData">テキストまたはURLを入力してください:</label>
    <input type="text" id="InputData" name="InputData" style="width:300px;" required />
    <button type="submit">QRコードを生成</button>
</form>

@if (!string.IsNullOrEmpty(Model.QrCodeBase64))
{
    <div style="margin-top:20px">
        <img src="data:image/png;base64,@Model.QrCodeBase64" alt="QRコード" />
        <br />
        <a href="data:image/png;base64,@Model.QrCodeBase64" download="qrcode.png"
           style="
              display: inline-block;
              margin-top: 10px;
              padding: 8px 16px;
              background-color: #0078D7;
              color: white;
              text-decoration: none;
              border-radius: 4px;
              font-weight: 600;
              cursor: pointer;
           ">
           QRコードをダウンロード
        </a>
    </div>
}

QRコードは Base64 形式の data: URI を使ってブラウザに直接表示され、ダウンロードも可能です。

実行例は以下の通りです:

ASP.NET Core Razor Pageで生成されたQRコード

QRコードのスキャン機能が必要な場合は、C#でQRコードを読み取る方法をご参照ください。

3. QRコードの出力をカスタマイズする

BarcodeSettings クラスを使って、QRコードの見た目や動作を柔軟に調整できます:

プロパティ 機能説明
QRCodeDataMode テキストのエンコードモード QRCodeDataMode.Byte
QRCodeECL 誤り訂正レベル QRCodeECL.H
X モジュールのサイズ(解像度) settings.X = 6
ImageWidth/Height 画像の幅・高さを指定 settings.ImageWidth = 300
ForeColor 色を変更 settings.ForeColor = Color.Blue
ShowText バーコードの文字を表示/非表示 settings.ShowText = false
BottomText カスタムテキストを下部に表示 settings.BottomText = "スキャン"
ShowBottomText 下部テキストの表示切り替え settings.ShowBottomText = true
QRCodeLogoImage ロゴ画像を中央に挿入 settings.QRCodeLogoImage = Image.FromFile("logo.png")

詳細な仕様については BarcodeSettings APIドキュメント をご覧ください。

4. MVC・Web API・Web Formsへの応用

このQRコード生成ロジックは、Razor Pages以外のASP.NETプロジェクトにも簡単に応用できます。

MVCの場合:

コントローラーに以下のようなアクションを追加します:

public class QrController : Controller
{
    public ActionResult Generate(string data)
    {
        var settings = new BarcodeSettings
        {
            Type = BarCodeType.QRCode,
            Data = data,
            QRCodeDataMode = QRCodeDataMode.Byte,
            QRCodeECL = QRCodeECL.M,
            X = 5
        };

        var generator = new BarCodeGenerator(settings);
        using var ms = new MemoryStream();
        generator.GenerateImage().Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        return File(ms.ToArray(), "image/png");
    }
}

Web APIの場合:

以下のように GET エンドポイントを作成できます:

[ApiController]
[Route("api/[controller]")]
public class QrApiController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GetQr(string data)
    {
        var settings = new BarcodeSettings
        {
            Type = BarCodeType.QRCode,
            Data = data
        };

        var generator = new BarCodeGenerator(settings);
        using var ms = new MemoryStream();
        generator.GenerateImage().Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        return File(ms.ToArray(), "image/png");
    }
}

React や Vue などのフロントエンドからAPIとして呼び出すのに最適です。

Web Formsの場合:

コードビハインドで以下のように処理可能です:

protected void btnGenerate_Click(object sender, EventArgs e)
{
    var settings = new BarcodeSettings
    {
        Type = BarCodeType.QRCode,
        Data = txtInput.Text
    };

    var generator = new BarCodeGenerator(settings);
    using var ms = new MemoryStream();
    generator.GenerateImage().Save(ms, System.Drawing.Imaging.ImageFormat.Png);
    imgQR.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(ms.ToArray());
}

QRコード画像を <asp:Image> コントロールに埋め込んで表示します。

5. まとめ

Spire.Barcode for .NET を使えば、Razor Pages、MVC、Web API、Web Forms など、すべての ASP.NET プロジェクトにおいて、QRコードの生成とカスタマイズが簡単に実装できます。

画像をBase64文字列で扱うことで、ファイル保存や管理が不要になり、展開や保守もシンプルになります。 認証システム、チケット発行、連絡先共有といったさまざまな用途に対応できる、信頼性の高いアプローチです。

よくある質問(FAQ)

Q: 日本語やアラビア語などの文字に対応していますか? A: はい。QRCodeDataMode.Byte を使用すればUnicode対応可能です。

Q: QRコードのサイズや色は変更できますか? A: 可能です。XForeColorImageWidth などのプロパティを使って調整できます。

Q: このソリューションは完全にオフラインで動作しますか? A: はい。外部APIへの接続なしでローカルで完結します。

Q: Web API経由でQRコード生成機能を提供できますか? A: はい。ASP.NET Web API を使って他のアプリに画像を提供できます。

Published in Spire.Barcode for .NET
Tagged under

C#でQRコードを読み取るチュートリアルのカバー画像(バーコードスキャナーとコード)

QR コードは、ユーザー認証、モバイル決済、商品パッケージ、イベントチケットなど、現代の多くのアプリケーションで広く利用されています。これらのシーンにおいて、特にスキャン画像やアップロードファイルを処理する際、C# で QR コードを読み取るニーズは高まっています。

そのためには、精度が高く、実装が簡単なデコード手法が必要です。本チュートリアルでは、C# を使って画像から QR コードを読み取るシンプルな方法を紹介します。セットアップも少なく、簡潔に統合できます。

目次

1. プロジェクトの準備

まず、QR コードの読み取りに対応した .NET 向けバーコードライブラリを使用します。ここでは、画像ファイルやストリームから QR コードを読み取る簡単なAPIを提供する Spire.Barcode for .NET を使用します。

1.1 NuGet経由でライブラリをインストール

以下のコマンドで NuGet からインストールできます:

Install-Package Spire.Barcode

基本的な用途であれば、Free Spire.Barcode for .NET も利用可能です:

Install-Package FreeSpire.Barcode

1.2 コンソールアプリケーションの作成

デモとして、Visual Studio で C# コンソールアプリを作成します:

  • 対応フレームワーク:.NET Framework, .NET Core/.NET 6+, ASP.NET, Xamarin(クロスプラットフォーム対応)
  • NuGetを使わない場合は、Spire.Barcode.dll への参照を追加します

2. C# で画像から QR コードを読み取る

C# で画像ファイルから QR コードを読み取るには、ライブラリが提供する静的メソッド BarcodeScanner.Scan() を使用します。このメソッドは画像のパスと BarCodeType を引数として受け取り、指定したバーコードタイプ(ここでは QR コード)に一致するすべての結果を返します。

この方法は、JPG、PNG、EMF 形式の画像に対応しており、デスクトップアプリやファイルアップロードを処理するバックエンドサービスに最適です。

2.1 サンプルコード:画像ファイルからQRコードをデコード

using Spire.Barcode;

class Program
{
    static void Main(string[] args)
    {
        // QRコード画像を読み込む
        string imagePath = @"C:\qr-code.png";

        // QRコードをスキャン
        string[] results = BarcodeScanner.Scan(imagePath, BarCodeType.QRCode);

        // 結果を表示
        foreach (string result in results)
        {
            Console.WriteLine("QRコードの内容: " + result + "\n");
        }
    }
}

QR コード画像と、C#による読み取り結果:

画像からQRコードを読み取り、コンソールに表示するC#コード

2.2 解説

  • Scan() は、画像内のすべてのバーコードを読み取ってデコードします
  • BarCodeType.QRCode により、QR コードのみを対象とすることができます(他の種類にも変更可能)
  • QR コードが複数含まれている場合でも、すべて配列で取得可能です

3. C# でストリームから QR コードを読み取る

Web API やモダンなアプリケーションでは、画像を Stream として処理する場面がよくあります。たとえば、アップロードファイルやクラウドストレージからの読み取りなどです。

BarcodeScanner.Scan() メソッドは Stream を直接受け取ることもでき、Bitmap に変換せずにメモリストリームから QR コードを読み取れます。

using Spire.Barcode;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        using (FileStream fs = new FileStream(@"C:\qr-code.png", FileMode.Open, FileAccess.Read))
        {
            // ストリームから直接QRコードを読み取る
            string[] results = BarcodeScanner.Scan(fs, BarCodeType.QRCode, false);
            foreach (string result in results)
            {
                Console.WriteLine("QRコードの内容: " + result);
            }
        }
    }
}

この方法は、WPF や ASP.NET Core アプリでメモリ上で画像を扱う場合に特に便利です。

関連チュートリアル: C# で PDF からバーコードを読み取る方法

4. 精度向上とエラー処理

実際のアプリケーションでは、画像品質や入力の問題により、QR コードの認識に失敗することもあります。以下は、C# での認識精度向上とエラー対策のベストプラクティスです。

4.1 精度を高めるポイント

  • 高解像度の画像を使用し、ぼやけや圧縮を避ける
  • **QR コード周囲の余白(クワイエットゾーン)**を確保する
  • PNG 形式など、劣化の少ない画像形式を使用する
  • 歪みのない正面画像を使う(斜めからの撮影を避ける)

4.2 エラー処理を追加する

try-catch ブロックで処理を囲み、失敗時の例外処理やユーザー通知を行います:

try
{
    string[] results = BarcodeScanner.Scan(imagePath, BarCodeType.QRCode);

    if (results.Length == 0)
    {
        Console.WriteLine("QRコードが見つかりませんでした。");
    }
    else
    {
        Console.WriteLine("QRコード: " + results[0]);
    }
}
catch (Exception ex)
{
    Console.WriteLine("QRコードのデコード中にエラーが発生しました: " + ex.Message);
}

5. おまけ:QR コードの座標を取得する

画像内の QR コードの正確な位置(切り抜き、マーク表示、アノテーション用途など)が必要な場合は、ScanInfo() メソッドを使って座標情報を取得できます:

BarcodeInfo[] results = BarcodeScanner.ScanInfo(imagePath, BarCodeType.QRCode);
foreach (BarcodeInfo result in results)
{
    Console.WriteLine("データ: " + result.DataString);
    Console.WriteLine($"座標: " + string.Join(",", result.Vertexes.Select(p => $"({p.X},{p.Y})")) + "\n");
}

これにより、各 QR コードのデータと頂点座標(四隅)が取得できます。

読み取り結果:

QR コードのデータと座標を取得するC#コード

6. よくある質問(FAQ)

C# で QR コードを読み取るには?

Spire.Barcode for .NET ライブラリの BarcodeScanner.Scan() メソッドを使用することで、画像ファイルやストリームから簡単に QR コードを読み取ることができます。

自分の QR コード画像を読み取るには?

画像ファイルのパスを渡すか、WPF や Web アプリであればストリームとして読み込んでスキャナーに渡します。すべての QR コードが自動的にデコードされます。

QR コード以外のバーコードも読み取れますか?

はい、画像パスを Scan() メソッドに渡すだけで、対応しているすべてのバーコードタイプを自動で読み取れます。特定の種類(例:QR コードや Code128)のみに限定する場合は、BarCodeType を第二引数で指定します。

C# でおすすめのバーコードライブラリは?

Spire.Barcode for .NET は、使いやすさと多様なフォーマット対応、API のシンプルさから人気があります。無料・商用いずれの用途にも対応しています。

7. まとめ

Spire.Barcode for .NET を使用すれば、C# での QR コード読み取りは数行のコードで実装可能です。画像ファイルにもストリームにも対応しており、デスクトップ、サーバーサイド、WPF アプリケーションでも安定して動作します。最小限のセットアップで高性能な読み取り処理が行えます。

QR コードの生成、ドキュメントへの統合、リアルタイムスキャンなどへの応用も可能です。

💡すべてのバーコード読み取り機能を試したい方は、
無料の一時ライセンスを申請して、Spire.Barcode for .NET の全機能を体験してください。

Published in Spire.Barcode for .NET
Tagged under

C#でPDFからバーコードを読み取る概要図

C#でPDFファイルからバーコードを読み取ることは、多くのビジネスワークフローで実用的なニーズです。特にスキャン済みの書類やデジタルフォームを自動処理する場合に頻繁に使用されます。物流、金融、医療、製造などの分野では、PDF内に画像として埋め込まれたバーコード、またはベクターグラフィックスとして描かれたバーコードが含まれていることがよくあります。

本記事では、C# を使用して PDF からバーコードを読み取るための 2 つの実践的な方法を紹介します。1 つは PDF ページに埋め込まれた画像を抽出してスキャンする方法、もう 1 つはページ全体を画像としてレンダリングし、その画像からバーコードを認識する方法です。いずれの方法も、1次元バーコードと2次元バーコードの両方に対応しています。

目次

✅ 準備:必要な環境とライブラリ

C#でPDFからバーコードを認識するには、以下の環境を用意してください:

  • NuGet パッケージに対応した C# プロジェクト(.NET Framework / .NET Core / .NET 6 など)
  • 以下の2つのライブラリをインストール:

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++;
            }
        }
    }
}

以下は、方法①(画像抽出)でのスキャン結果イメージです:

C#でPDFから埋め込み画像のバーコードを抽出

🔍 おすすめのケース:スキャンされた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");
                }
            }
        }
    }
}

以下は、方法②(ページ全体のレンダリング)によるスキャン結果の例です:

C#でPDFページ全体を画像化してバーコード認識

🔍 おすすめのケース: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 .NETFree Spire.PDF for .NET の組み合わせで基本的なバーコード読み取りが可能です。ただし、無料版には機能制限があります。商用利用や高機能が必要な場合は、無料トライアルライセンスを申請して評価することもできます。


✅ まとめ

C# を使って PDF ファイルからバーコードを読み取るには、画像抽出とページレンダリングという 2 つの方法があり、それぞれのPDF形式に応じて柔軟に対応できます。Spire.Barcode と Spire.PDF を活用すれば、効率的かつ確実なバーコード認識が実現できます。

Published in Spire.Barcode for .NET
Tagged under