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

前回の投稿 で説明したように、バーコードを生成して PDF ドキュメントに追加できます。場合によっては、PDF ドキュメントに埋め込まれたバーコードをプログラムで検出して読み取る必要があります。請求書、領収書、レポートなどの PDF ドキュメントからバーコードや QR コードの形式で埋め込まれた情報をデコードするのに役立ちます。この記事では、C# を使用して PDF ドキュメントからバーコードを読み取る方法を学習します。

この記事は、次のトピックをカバーするものとします。

  1. PDF からバーコードを読み取る C# API
  2. PDF からバーコードを読み取る
  3. PDF を画像に変換し、バーコードを読み取る
  4. PngDevice を使用して PDF からバーコードを読み取る
  5. PDF からバーコードを抽出して読み取る
  6. PDF からバーコード イメージを検索して読み取る

PDF からバーコードを読み取る C# API

PDF ドキュメントからバーコードを読み取るには、2 段階の手順に従います。まず、Aspose.PDF for .NET API を使用して PDF ドキュメントを読み込み、そのページをラスター イメージにレンダリングします。その後、Aspose.BarCode for .NET API を使用して、レンダリングされた画像からバーコードを読み取ります。

APIのDLLをダウンロードするか、NuGetを使ってインストールしてください。

PM> Install-Package Aspose.BarCode
PM> Install-Package Aspose.PDF

C# を使用して PDF からバーコードを読み取る

Aspose.PDF API の Document クラスは、PDF ドキュメントを表します。 API の ConvertToPNGMemoryStream() 関数は、PDF ページを PNG メモリ ストリームにレンダリングします。 Aspose.BarCode API の BarCodeReader クラスを使用すると、ReadBarCodes 操作を実行してバーコードを検出できます。 BarCodeResult クラスは、検出されたバーコード情報 (バーコード タイプ、コード テキスト、領域、その他のパラメーターなど) を格納します。

以下の手順に従って、PDF ドキュメントの任意のページに埋め込まれたバーコード イメージを読み取ることができます。

  1. まず、Document クラスを使用して PDF ドキュメントを読み込みます。
  2. 次に、すべてのページをループしてメモリ ストリームにレンダリングします。
  3. 次に、ストリーム オブジェクトを使用して BarCodeReader クラスのインスタンスを作成します。
  4. その後、ReadBarCodes() メソッドを呼び出して BarCodeResult オブジェクトを取得します。
  5. 最後に、バーコード情報を表示します。

次のコード例は、C# を使用して PDF ドキュメントからバーコードを読み取る方法を示しています。

// このコード例は、C# を使用して PDF ドキュメントからバーコードを読み取る方法を示しています。
// ドキュメントへのパス
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// PDF ドキュメントを読み込む
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);

// 1 ページ目からすべての PDF ページに進む
for (int i = 1; i <= pdfDoc.Pages.Count; ++i)
{
    // PDF ページをストリームにレンダリングする
    MemoryStream ms = pdfDoc.Pages[i].ConvertToPNGMemoryStream();
    ms.Position = 0;

    // ページのレンダリング画像からバーコードを認識
    BarCodeReader reader = new BarCodeReader(ms);
    
    // 結果を示す
    foreach (BarCodeResult result in reader.ReadBarCodes())
    {
        Console.WriteLine("Codetext found: " + result.CodeText);
        Console.WriteLine("Symbology: " + result.CodeType);
        Console.WriteLine("-------------------------------");
    }
}
Codetext found: Aspose.Barcode Pdf417 Example
Symbology: Pdf417
-------------------------------
Codetext found: Aspose.Barcode QR Example
Symbology: QR
-------------------------------
Codetext found: Aspose.Barcode DataMatrix Example
Symbology: DataMatrix
-------------------------------

このブログ投稿で使用されている バーコード付きの入力 PDF ドキュメントをダウンロード してください。

C# を使用して PDF を画像に変換し、バーコードを読み取る

PdfConverter クラスを使用して PDF ページを画像に変換することにより、PDF ドキュメントからバーコードを読み取ることができます。 PDF ファイルの各ページを画像に変換し、変換された画像からバーコード情報を読み取ります。

以下の手順に従って、変換された PDF ページからバーコードを読み取ることができます。

  1. まず、Document クラスを使用して PDF ドキュメントを読み込みます。
  2. 次に、PdfConverter クラスのインスタンスを作成します。
  3. 必要に応じて、BarcodeOptimization などのレンダリング オプションを設定します。
  4. 次に、画像の解像度を設定します。
  5. 次に、StartPage と EndPage を指定して、ページの範囲をイメージにレンダリングします。
  6. 次に、DoConvert() メソッドを呼び出して、選択したページを画像にレンダリングします。
  7. 次に、画像を保存してループでストリーミングします。
  8. 次に、ストリーム オブジェクトを使用して BarCodeReader クラスのインスタンスを作成します。
  9. その後、ReadBarCodes() メソッドを呼び出して BarCodeResult オブジェクトを取得します。
  10. 最後に、バーコード情報を表示します。

次のコード例は、C# を使用して PDF ページを画像に変換し、バーコードを読み取る方法を示しています。

// 次のコード例は、PDF Converter を使用して PDF ページを画像に変換し、C# を使用してバーコードを読み取る方法を示しています。
// ドキュメントへのパス
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// PDF ドキュメントを読み込む
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);

// PdfConvertor を初期化する
Aspose.Pdf.Facades.PdfConverter pdfConverter = new Aspose.Pdf.Facades.PdfConverter(pdfDoc);

// バーコード最適化の設定
pdfConverter.RenderingOptions.BarcodeOptimization = true;

// ページ解像度の設定
// 300 dpi が標準解像度です
pdfConverter.Resolution = new Aspose.Pdf.Devices.Resolution(300);

// すべてのページを画像にレンダリングするように設定する
pdfConverter.StartPage = 1; //starts from page 1
pdfConverter.EndPage = pdfConverter.Document.Pages.Count;

// 選択したページを画像にレンダリング
pdfConverter.DoConvert();
while (pdfConverter.HasNextImage())
{
    // 現在のページをメモリ ストリーム イメージにレンダリングする
    MemoryStream ms = new MemoryStream();
    pdfConverter.GetNextImage(ms, ImageFormat.Png);
    ms.Position = 0;

    // ページのレンダリング画像からバーコードを認識
    BarCodeReader reader = new BarCodeReader(ms);
    
    // 結果を示す
    foreach (BarCodeResult result in reader.ReadBarCodes())
    {
        Console.WriteLine("Codetext found: " + result.CodeText);
        Console.WriteLine("Symbology: " + result.CodeType);
        Console.WriteLine("-------------------------------");
    }
}

C# で PngDevice を使用して PDF からバーコードを読み取る

前の方法に似た別の方法を次に示します。唯一の違いは、このメソッドでは、API の PngDevice クラスを使用して PDF ドキュメントのページを画像に変換することです。 PDFドキュメントのページをPNG画像に変換できます。

以下の手順に従って、変換された PDF ページからバーコードを PNG 画像として読み取ることができます。

  1. まず、Document クラスを使用して PDF ドキュメントを読み込みます。
  2. 次に、PngDevice クラスのインスタンスを作成します。
  3. 次に、すべてのページをループし、Process() メソッドを呼び出してストリームにレンダリングします。
  4. 次に、ストリーム オブジェクトを使用して BarCodeReader クラスのインスタンスを作成します。
  5. その後、ReadBarCodes() メソッドを呼び出して BarCodeResult オブジェクトを取得します。
  6. 最後に、バーコード情報を表示します。

次のコード例は、PDF ページを PNG 画像に変換し、C# を使用してバーコードを読み取る方法を示しています。

// 次のコード例は、PngDevice を使用して PDF ページを画像に変換し、C# を使用してバーコードを読み取る方法を示しています。
// ドキュメントへのパス
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// PDF ドキュメントを読み込む
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);

// 300 dpi の標準解像度で PNG デバイスを作成する
Aspose.Pdf.Devices.PngDevice pngDevice = new Aspose.Pdf.Devices.PngDevice(new Aspose.Pdf.Devices.Resolution(300));

// 1ページから始まるすべてのPDFページに進みます
for (int i = 1; i <= pdfDoc.Pages.Count; ++i)
{
    // PDF ページをストリームにレンダリングする
    MemoryStream ms = new MemoryStream();
    pngDevice.Process(pdfDoc.Pages[i], ms);
    ms.Position = 0;

    // ページのレンダリング画像からバーコードを認識
    BarCodeReader reader = new BarCodeReader(ms);

    // 結果を示す
    foreach (BarCodeResult result in reader.ReadBarCodes())
    {
        Console.WriteLine("Codetext found: " + result.CodeText);
        Console.WriteLine("Symbology: " + result.CodeType);
        Console.WriteLine("-------------------------------");
    }
}

C# を使用して PDF からバーコードを抽出して読み取る

PdfExtractor クラスを使用して、PDF ページに埋め込まれたバーコード画像も認識できます。 PDF から画像を抽出し、抽出した画像からバーコード情報を読み取ります。

以下の手順に従って、抽出した画像からバーコードを読み取ることができます。

  1. まず、PdfExtractor クラスのインスタンスを作成します。
  2. 次に、BindPdf() メソッドを使用して入力 PDF ドキュメントをバインドします。
  3. 次に、画像を抽出するページ範囲を設定します。
  4. 次に、ExtractImage() メソッドを呼び出して画像を抽出します。
  5. 次に、画像を保存してループでストリーミングします。
  6. 次に、ストリーム オブジェクトを使用して BarCodeReader クラスのインスタンスを作成します。
  7. その後、ReadBarCodes() メソッドを呼び出して BarCodeResult オブジェクトを取得します。
  8. 最後に、バーコード情報を表示します。

次のコード例は、C# を使用して PDF ドキュメントからバーコード イメージを抽出して読み取る方法を示しています。

// 次のコード例は、PdfExtractor を使用して PDF ページを画像に変換し、C# を使用してバーコードを読み取る方法を示しています。
// ドキュメントへのパス
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// PDF ドキュメントを製本する
Aspose.Pdf.Facades.PdfExtractor pdfExtractor = new Aspose.Pdf.Facades.PdfExtractor();
pdfExtractor.BindPdf(file);

// 画像抽出のページ範囲を設定する
pdfExtractor.StartPage = 1;
pdfExtractor.EndPage = 3;

// 画像を抽出する
pdfExtractor.ExtractImage();

// 画像を保存してループでストリーミングする
while (pdfExtractor.HasNextImage())
{
  // 画像をストリームに保存
  MemoryStream imageStream = new MemoryStream();
  pdfExtractor.GetNextImage(imageStream);
  imageStream.Position = 0;

  // 上の画像ストリームからバーコードを認識
  BarCodeReader reader = new BarCodeReader(imageStream);
  foreach (BarCodeResult result in reader.ReadBarCodes())
  {
      Console.WriteLine("Codetext found: " + result.CodeText);
      Console.WriteLine("Symbology: " + result.CodeType);
      Console.WriteLine("-------------------------------");
  }
}

C# を使用して PDF からバーコード画像を検索して読み取る

ImagePlacementAbsorber クラスを使用して、PDF ドキュメントからバーコード イメージを検索して抽出することもできます。画像配置オブジェクトの吸収体オブジェクトを表します。画像の使用状況の検索を実行し、ImagePlacements コレクションを介して検索結果へのアクセスを提供します。この方法は、元の解像度でバーコードを認識するのに役立ちます。ベクター形式を正しく認識しない場合があります。

以下の手順に従って、PDF ドキュメントからバーコードを見つけて読み取ることができます。

  1. まず、Document クラスを使用して PDF ドキュメントを読み込みます。
  2. 次に、ImagePlacementAbsorber クラスのインスタンスを作成します。
  3. 次に、ループ内の各ページに対して Visit() メソッドを呼び出します。
  4. 次に、ImagePlacements コレクションで見つかったすべての画像をループします。
  5. 次に、イメージをメモリ ストリームに保存します。
  6. 次に、ストリーム オブジェクトを使用して BarCodeReader クラスのインスタンスを作成します。
  7. その後、ReadBarCodes() メソッドを呼び出して BarCodeResult オブジェクトを取得します。
  8. 最後に、バーコード情報を表示します。

次のコード例は、C# を使用して PDF からバーコード イメージを検索して読み取る方法を示しています。

// このコード例は、ImagePlacementAbsorber を使用して PDF ドキュメントからバーコードを読み取る方法を示しています。
// ドキュメントへのパス
string file = @"C:\Files\BarCode\sample-PDF-with-Barcodes.pdf";

// PDF ドキュメントを読み込む
Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(file);

// ImagePlacementAbsorber の初期化
Aspose.Pdf.ImagePlacementAbsorber imagePlacementAbsorber = new Aspose.Pdf.ImagePlacementAbsorber();

// ドキュメント内のすべての PDF ページを 1 ページ目から処理する
for (int i = 1; i <= pdfDoc.Pages.Count; ++i)
{
    // ページにアクセスして、イメージ エクストラクタを作成します
    imagePlacementAbsorber.Visit(pdfDoc.Pages[i]);

    // PDF ページからすべての画像を抽出する
    foreach (Aspose.Pdf.ImagePlacement imagePlacement in imagePlacementAbsorber.ImagePlacements)
    {
        // PDF ページからストリームへの画像の変換
        MemoryStream ms = new MemoryStream();
        imagePlacement.Save(ms, ImageFormat.Png);
        ms.Position = 0;

        // ページの抽出画像からバーコードを認識
        BarCodeReader reader = new BarCodeReader(ms);

        // 結果を示す
        foreach (BarCodeResult result in reader.ReadBarCodes())
        {
            Console.WriteLine("Codetext found: " + result.CodeText);
            Console.WriteLine("Symbology: " + result.CodeType);
            Console.WriteLine("-------------------------------");
        }
    }
}

無料ライセンスを取得する

無料の一時ライセンスを取得して、評価制限なしでライブラリを試すことができます。

結論

この記事では、C# で PDF ドキュメントからバーコードを読み取る方法を学びました。また、PDF ドキュメントから画像を抽出し、埋め込まれたバーコードをプログラムでデコードするためのさまざまなアプローチと方法も見てきました。さらに、Aspose.BarCode のドキュメントAspose.PDF のドキュメント を使用して API の詳細を学ぶことができます。ご不明な点がございましたら、フォーラムまでお気軽にお問い合わせください。

関連項目