.NET開発にはどの C# バーコード ライブラリを使用すべきでしょうか?
Aspose.BarCodeを使用した開発者は、次のような行のバージョンを何らかの形で書いたことがあります: new BarCodeReader(path, DecodeType.Code128)。 画像のフォーマットが分かっていれば、問題なく動作します。 しない場合、つまり、文書が外部システムやラベル形式を変更したサプライヤーから来た場合、またはユーザーによるアップロードの場合、デコードタイプのリストを推測するか、DecodeType.AllSupportedTypesに頼ります。これは通常、Aspose自身のガイダンスによれば遅くなります。 フォーマット指定の要件は致命的な問題ではないが、コードベースにおけるあらゆる読み取り操作において、日々蓄積される摩擦要因となる。
PDFに関する話は、予算に関する話だ。 PDFドキュメントからバーコードを処理する場合、Aspose.BarCode単体では処理できません。 最初にページを画像にレンダリングするためには、Aspose.PDF for .NET が必要です。Aspose.PDF は、すでにAspose.BarCodeに支払っている料金に加えて別のサブスクリプション製品です。 ほとんどの開発者が1つのタスクと考えているワークフローに対して、2つのサブスクリプションが必要になる。
IronBarcodeは、バーコード形式を自動検出し、PDFをネイティブに読み込む機能を単一のパッケージで提供し、749ドルから永久ライセンスを提供しています。この比較記事では、両方のライブラリを詳細に検証し、読者が的確な選択を行えるようサポートします。
Aspose.BarCodeについて理解する
Asposeは長年にわたり、.NET、Java、その他のプラットフォーム向けにドキュメント処理ライブラリを開発してきました。 Aspose.BarCodeは、Aspose.Words、Aspose.Cells、Aspose.PDF、Aspose.Slidesなど、約12の製品群の一つです。 Aspose.Total(すべてのAspose製品を含むバンドル)を既に契約しているチームにとって、Aspose.BarCodeは追加費用なしで利用できます。一方、バーコードライブラリのみを必要とするチームにとっては、サブスクリプションモデルの導入は正当化しにくいでしょう。
Aspose.BarCodeは、あらゆる商用.NETバーコードライブラリの中で最も完全なフォーマットリストの1つである80以上のバーコードシンボロジーをサポートしています。 その幅広さこそが、この図書館の最大の強みだ。 APIの適用範囲はそれに応じて広く、機能が増えるにつれてAPIの冗長性も高まります。 基本的なCode 128バーコードを生成するには、Saveを呼び出します。 読み取りには、検索するデコードタイプを指定し、ReadBarCodes()によって返される結果を繰り返し処理する必要があります。 どちらの操作も正しく動作するが、必要以上に冗長である。
Aspose.BarCodeの主なアーキテクチャ特性:
- フォーマット優先の読み取りモデル: すべての読み取り操作には、
DecodeTypeを明示的に指定する必要があります。 フォールバックDecodeType.AllSupportedTypesは通常、ターゲットのリストよりも遅いです。なぜなら、デコーダーはすべての既知のシンボロジーを順番に処理するからです。 - インスタンスベースAPI:
IDisposableを実装したインスタンス化されたオブジェクトです。 ネイティブリソースを解放するためにusingブロックでラップされるべきです。 -ネイティブPDFサポートなし: Aspose.BarCodeはPDFドキュメントを直接開いたりレンダリングしたりすることはできません。 PDFからのバーコードの読み取りは、別のサブスクリプション製品であるAspose.PDFが必要です。 - パラメータ階層の深さ: カスタマイズは
generator.Parameters.Barcode.*プロパティチェーンを通じて処理されます。これは、記憶が必要な多階層のオブジェクト階層です。 - サブスクリプションライセンス: Asposeの公開された価格によれば、開発者単位およびサイト階層は年間サブスクリプションです; スタンドアロンの永続的なオプションはリストされていません。
- ファイルベースのライセンスアクティベーション: 本番環境のデプロイには、既知のパスでアクセス可能な
.licファイルが必要です。これは、DockerおよびKubernetes環境にデプロイメントステップを追加します。
フォーマット優先の読書モデル
Aspose.BarCode の読み取り API は、呼び出し元がバーコードのフォーマットを知っているという前提に基づいて構築されています。
using Aspose.BarCode.BarCodeRecognition;
var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
foreach (var result in reader.ReadBarCodes())
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
using Aspose.BarCode.BarCodeRecognition;
var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
foreach (var result in reader.ReadBarCodes())
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
Imports Aspose.BarCode.BarCodeRecognition
Dim reader As New BarCodeReader("barcode.png", DecodeType.Code128)
For Each result In reader.ReadBarCodes()
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}")
Next
フォーマットが分かっている場合は、このパターンで問題ありません。問題は"フォーマットが分かっている場合"という点です。仕入先からの請求書を処理する購買システムでは、すべての仕入先が同じバーコードタイプを使用していることを保証することはできません。 ユーザーによるアップロードを受け付ける文書管理システムは、スキャナーが使用したファイル形式を予測することはできません。 これらの場合、DecodeType.AllSupportedTypesがフォールバックとして使用されますが、これは通常ターゲットのデコードタイプリストよりも遅いです。
デコーダーも廃棄する必要がある。
using var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
using var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
usingを使用しないことはリソースリークです。 IDisposableを実装しますが、それを破棄しないことによる影響は軽微です。 どちらの場合も、静的ファクトリAPIが自動的に処理するオブジェクトのライフサイクルを管理していることになります。
IronBarcodeを理解する
IronBarcodeは、読み取りと書き込みの両方に静的ファクトリメソッドを使用します。 構築、構成、または破棄するインスタンスが存在しません。 読み取りAPIはデフォルトではフォーマットに依存しないため、ソースファイルがPNG、JPEG、TIFF、PDFのいずれであっても、同じ呼び出しで動作します。
IronBarcode は.NET 開発者ツールに特化した企業であるIron Software によって開発され、維持されています。 このライブラリは、バーコードの読み取りにバーコード形式に関する事前の知識は不要であるという原則に基づいて設計されています。ライブラリの検出エンジンが画像の内容から形式を自動的に判別します。 生成においては、他のライブラリでよく見られる多段階のパラメータ階層構造の代わりに、流暢なメソッドチェーンが採用されている。
IronBarcodeの主な特徴:
- 自動フォーマット検出:
DecodeType相当を指定することなく、画像コンテンツからバーコードシンボロジーを識別します。 -静的ステートレスAPI:すべての読み取りおよび書き込み操作は静的メソッドです。 管理すべき使い捨てインスタンスはなく、APIは並行使用に対して本質的にスレッドセーフです。 - ネイティブPDFサポート:
result.PageNumberが含まれます。 - 流暢な生成API:
BarcodeWriter.CreateBarcode()は連鎖可能なオブジェクトを返します。 カスタマイズでは、プロパティ階層ではなくメソッドチェーンが使用されます。 -永久ライセンスモデル:すべてのプランで、年間更新不要の買い切り型ライセンスを提供しています。 - 文字列ベースのライセンスアクティベーション: ライセンスキーは、環境変数やCI/CDシークレットマネージャと互換性のある
IronBarCode.License.LicenseKeyを介して設定されます。
機能比較
| フィーチャー | Aspose.BarCode | IronBarcode |
|---|---|---|
| フォーマット検出 | 手動 — AllSupportedTypesを使用する必要があります |
サポートされているすべてのフォーマットで自動的に |
| シンボル数 | 80歳以上 | 50歳以上 |
| PDFサポート | ネイティブサポートなし - 別途Aspose.PDFライセンスが必要です | ネイティブ — パッケージに組み込まれたBarcodeReader.Read("doc.pdf") |
| 価格設定モデル | サブスクリプションのみ — 年間$999から | 永久ライセンス 749ドル~(一括払い) |
| 永久ライセンス | 不可 | はい、全ティア |
| APIスタイル。 | インスタンスベースの詳細な設定 | 静的ファクトリメソッド、流暢なAPI |
| IDisposable 要件 | はい — BarcodeGenerator |
いいえ — ステートレスな静的メソッド |
| スレッドセーフ。 | スレッドごとに個別のインスタンスが必要 | 静的API — スレッドガイダンスのためにIronBarcodeのドキュメントを参照してください |
詳細な機能比較
| フィーチャー | Aspose.BarCode | IronBarcode |
|---|---|---|
| 世代 | ||
| APIスタイル | new BarcodeGenerator(EncodeTypes.X, "data") |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.X) |
| カスタマイズモデル | generator.Parameters.Barcode.*プロパティ階層 |
流暢なメソッドチェーン ( .ChangeBarCodeColor() ) |
| ロゴ入りQRコード | 生成後に手動でGDI+オーバーレイを実装します。 | 組み込みの.AddBrandLogo("logo.png") |
| バイト単位で出力 | generator.GenerateBarCodeImage() |
.ToPngBinaryData() |
| カラーバーコード | generator.Parameters.Barcode.BarColor |
.ChangeBarCodeColor(Color.X) |
| 読む | ||
| フォーマット仕様 | 必須 ( DecodeType ) |
不要 - 自動 |
| 不明なフォーマットのフォールバック | DecodeType.AllSupportedTypes (遅い) |
同じ呼び出しで、フォールバックモードは不要です。 |
| パフォーマンスチューニング | QualitySettingsパラメーターニセット |
ReadingSpeed列挙型 — 3レベル |
| 使い捨てリーダー | はい — using var reader = new BarCodeReader(...) |
いいえ — 静的呼び出し、破棄するオブジェクトはありません |
| 結果へのアクセス | reader.ReadBarCodes()を繰り返し処理する |
BarcodeReader.Read()の戻り値 |
| バーコード値プロパティ | result.CodeText |
result.Value |
| フォーマット名プロパティ | result.CodeTypeName |
result.Format.ToString() |
| PDFサポート | ||
| ネイティブPDFリーダー | なし | はい |
| PDFに必要 | Aspose.PDF(別途サブスクリプション) | 追加パッケージなし |
| 検索結果のページ番号 | 該当なし | result.PageNumber |
| ライセンスについて | ||
| ライセンスモデル | 購読のみ、年間更新 | 永久購入、一括購入 |
| 単独開発者 | 年間999ドル | 749ドル |
| 開発者10人 | 年間4,995ドル(サイトライセンス) | 2,999ドル(一括払い)(Professional) |
| 無制限展開(10名の開発者) | $13,986/年(サイトOEM) | 5,999ドル(一括払い、無制限) |
| PDFサポートが含まれています | いいえ — Aspose.PDF のサブスクリプションは別途必要です | はい |
| プラットフォームと展開 | ||
| ライセンス認証 | .licファイルパス |
文字列キー — 環境変数 |
| Dockerデプロイメント | 画像にファイルをコピーするか、またはマウントする必要がある.lic |
環境変数 — ファイルは不要 |
| .NET Framework | はい | はい(4.6.2以降) |
| .NET Core / .NET 5 以上 | はい | はい(.NET Core 3.1+、.NET 5/6/7/8) |
| ウィンドウズ | はい | はい(x64/x86) |
| Linux | はい | はい(64ビット版) |
| macOS | はい | はい(x64/ARM) |
| Docker | はい | はい |
| Azure / AWS Lambda | はい | はい |
ジェネレーションAPI
生成APIは、日常的なコードにおいて、2つのライブラリ間の冗長性の違いが最も顕著に現れる部分です。
Aspose.BarCode アプローチ
Aspose.BarCodeは、Parameters階層を使用して構成します。 最小限の生成呼び出しには、インスタンス化、保存呼び出し、フォーマット指定という3つのステップが必要です。 実際の使用は通常、generator.Parameters.Barcode.*へのナビゲーションを必要とします。
using Aspose.BarCode.Generation;
using System.Drawing;
var generator = new BarcodeGenerator(EncodeTypes.Code128, "ITEM-12345");
// Common customizations require navigating a deep parameter hierarchy
generator.Parameters.Barcode.XDimension.Pixels = 2;
generator.Parameters.Barcode.BarHeight.Pixels = 100;
generator.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below;
generator.Parameters.Barcode.CodeTextParameters.Font.FamilyName = "Arial";
generator.Parameters.Barcode.Padding.Left.Pixels = 10;
generator.Parameters.Barcode.Padding.Right.Pixels = 10;
generator.Parameters.BackColor = Color.White;
generator.Parameters.Resolution = 300;
generator.Save("barcode.png", BarCodeImageFormat.Png);
using Aspose.BarCode.Generation;
using System.Drawing;
var generator = new BarcodeGenerator(EncodeTypes.Code128, "ITEM-12345");
// Common customizations require navigating a deep parameter hierarchy
generator.Parameters.Barcode.XDimension.Pixels = 2;
generator.Parameters.Barcode.BarHeight.Pixels = 100;
generator.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below;
generator.Parameters.Barcode.CodeTextParameters.Font.FamilyName = "Arial";
generator.Parameters.Barcode.Padding.Left.Pixels = 10;
generator.Parameters.Barcode.Padding.Right.Pixels = 10;
generator.Parameters.BackColor = Color.White;
generator.Parameters.Resolution = 300;
generator.Save("barcode.png", BarCodeImageFormat.Png);
Imports Aspose.BarCode.Generation
Imports System.Drawing
Dim generator As New BarcodeGenerator(EncodeTypes.Code128, "ITEM-12345")
' Common customizations require navigating a deep parameter hierarchy
generator.Parameters.Barcode.XDimension.Pixels = 2
generator.Parameters.Barcode.BarHeight.Pixels = 100
generator.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below
generator.Parameters.Barcode.CodeTextParameters.Font.FamilyName = "Arial"
generator.Parameters.Barcode.Padding.Left.Pixels = 10
generator.Parameters.Barcode.Padding.Right.Pixels = 10
generator.Parameters.BackColor = Color.White
generator.Parameters.Resolution = 300
generator.Save("barcode.png", BarCodeImageFormat.Png)
すべてのカスタマイズはgenerator.Parameters.Barcode.*にナビゲートします。これは多階層のオブジェクト階層です。 一度覚えてしまえば複雑ではないが、暗記する必要がある。
IronBarcodeのアプローチ
IronBarcodeは、パラメータ階層を流暢なメソッドチェーンに置き換えます。 ほとんどのユースケースではデフォルト設定で正しい結果が得られ、カスタマイズはインラインで表現されます。
using IronBarCode;
// Default settings work for most cases
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
// Customization through a fluent chain
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
// Get as bytes instead of saving to disk
byte[] pngData = BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ToPngBinaryData();
using IronBarCode;
// Default settings work for most cases
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
// Customization through a fluent chain
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
// Get as bytes instead of saving to disk
byte[] pngData = BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ToPngBinaryData();
Imports IronBarCode
' Default settings work for most cases
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.SaveAsPng("barcode.png")
' Customization through a fluent chain
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("barcode.png")
' Get as bytes instead of saving to disk
Dim pngData As Byte() = BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.ToPngBinaryData()
IronBarcodeのQRコード生成APIは、QRコードに関しては、手動での画像合成なしでブランドロゴをサポートする機能を備えています。
using IronBarCode;
using IronSoftware.Drawing;
// With brand logo — built in, no manual image overlay needed
QRCodeWriter.CreateQrCode("https://example.com", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
// With high error correction (recommended when using a logo)
QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded-high-ecc.png");
// Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300)
.ChangeBarCodeColor(Color.DarkBlue)
.SaveAsPng("qr-colored.png");
using IronBarCode;
using IronSoftware.Drawing;
// With brand logo — built in, no manual image overlay needed
QRCodeWriter.CreateQrCode("https://example.com", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
// With high error correction (recommended when using a logo)
QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded-high-ecc.png");
// Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300)
.ChangeBarCodeColor(Color.DarkBlue)
.SaveAsPng("qr-colored.png");
Imports IronBarCode
Imports IronSoftware.Drawing
' With brand logo — built in, no manual image overlay needed
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.AddBrandLogo("logo.png") _
.SaveAsPng("qr-branded.png")
' With high error correction (recommended when using a logo)
QRCodeWriter.CreateQrCode( _
"https://example.com", _
500, _
QRCodeWriter.QrErrorCorrectionLevel.Highest) _
.AddBrandLogo("logo.png") _
.SaveAsPng("qr-branded-high-ecc.png")
' Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300) _
.ChangeBarCodeColor(Color.DarkBlue) _
.SaveAsPng("qr-colored.png")
Aspose.BarCodeは、QRコード用の単一呼び出しのブランドロゴヘルパーを出荷していません; 文書化されたアプローチは、バーコード画像を生成し、それにロゴを合成することです(例えばSystem.Drawing.Graphicsを使用して)。 IronBarcodeのAddBrandLogoは、1回の呼び出しで複合を処理し、誤り訂正を適切に自動設定します。
PDFバーコード読み取り
多くのチームにとって、これが最も重要な比較点です。PDF文書からバーコードを読み取ることは、一般的なワークフローです。例えば、受信した請求書、PDF形式で保存された配送ラベル、スキャンされた文書アーカイブなどが挙げられます。
Aspose.BarCode アプローチ
Aspose.BarCodeにはネイティブのPDFサポートはありません。 Asposeを使用してPDFからバーコードを読み取るには、PDFを読み込んでページを画像にレンダリングするためのAspose.PDFと、レンダリングされた画像をスキャンするためのAspose.BarCodeが必要です。 どちらも定期購入商品です。 どちらもライセンス認証が必要です。 多くの開発者が単一の機能と考えるものに対して、2つの年次サブスクリプション料金を支払っています。
// Requires both Aspose.PDF (separate license) and Aspose.BarCode
using Aspose.Pdf;
using Aspose.Pdf.Devices;
using Aspose.BarCode.BarCodeRecognition;
using System.IO;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var barcodeValues = new List<string>();
// Step 1: Load and render the PDF using Aspose.PDF
var pdfDocument = new Aspose.Pdf.Document(pdfPath);
var resolution = new Resolution(300);
var device = new PngDevice(resolution);
for (int pageNum = 1; pageNum <= pdfDocument.Pages.Count; pageNum++)
{
using var pageStream = new MemoryStream();
device.Process(pdfDocument.Pages[pageNum], pageStream);
pageStream.Seek(0, SeekOrigin.Begin);
// Step 2: Scan the rendered image for barcodes using Aspose.BarCode
using var reader = new BarCodeReader(pageStream, DecodeType.AllSupportedTypes);
foreach (var result in reader.ReadBarCodes())
{
barcodeValues.Add(result.CodeText);
}
}
return barcodeValues;
}
// Requires both Aspose.PDF (separate license) and Aspose.BarCode
using Aspose.Pdf;
using Aspose.Pdf.Devices;
using Aspose.BarCode.BarCodeRecognition;
using System.IO;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var barcodeValues = new List<string>();
// Step 1: Load and render the PDF using Aspose.PDF
var pdfDocument = new Aspose.Pdf.Document(pdfPath);
var resolution = new Resolution(300);
var device = new PngDevice(resolution);
for (int pageNum = 1; pageNum <= pdfDocument.Pages.Count; pageNum++)
{
using var pageStream = new MemoryStream();
device.Process(pdfDocument.Pages[pageNum], pageStream);
pageStream.Seek(0, SeekOrigin.Begin);
// Step 2: Scan the rendered image for barcodes using Aspose.BarCode
using var reader = new BarCodeReader(pageStream, DecodeType.AllSupportedTypes);
foreach (var result in reader.ReadBarCodes())
{
barcodeValues.Add(result.CodeText);
}
}
return barcodeValues;
}
Imports Aspose.Pdf
Imports Aspose.Pdf.Devices
Imports Aspose.BarCode.BarCodeRecognition
Imports System.IO
Public Function ReadBarcodesFromPdf(pdfPath As String) As List(Of String)
Dim barcodeValues As New List(Of String)()
' Step 1: Load and render the PDF using Aspose.PDF
Dim pdfDocument As New Aspose.Pdf.Document(pdfPath)
Dim resolution As New Resolution(300)
Dim device As New PngDevice(resolution)
For pageNum As Integer = 1 To pdfDocument.Pages.Count
Using pageStream As New MemoryStream()
device.Process(pdfDocument.Pages(pageNum), pageStream)
pageStream.Seek(0, SeekOrigin.Begin)
' Step 2: Scan the rendered image for barcodes using Aspose.BarCode
Using reader As New BarCodeReader(pageStream, DecodeType.AllSupportedTypes)
For Each result In reader.ReadBarCodes()
barcodeValues.Add(result.CodeText)
Next
End Using
End Using
Next
Return barcodeValues
End Function
ライセンス設定が2件、2つの異なる名前空間からのusing文、レンダリングパイプライン、メモリーストリーム管理、ネストされたループです。また、画像抽出時点で通常、バーコードが使用するフォーマットがわからないためDecodeType.AllSupportedTypesを使用します。
IronBarcodeのアプローチ
IronBarcodeは、PDFの解析、ページレンダリング、バーコード検出を内部的に処理します。 result.PageNumberを含みます。 2つ目のパッケージも、2つ目のライセンスも、レンダリングコードもありません。
using IronBarCode;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = BarcodeReader.Read(pdfPath);
return results.Select(r => r.Value).ToList();
}
using IronBarCode;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = BarcodeReader.Read(pdfPath);
return results.Select(r => r.Value).ToList();
}
Imports IronBarCode
Public Function ReadBarcodesFromPdf(pdfPath As String) As List(Of String)
Dim results = BarcodeReader.Read(pdfPath)
Return results.Select(Function(r) r.Value).ToList()
End Function
// With page number context
var results = BarcodeReader.Read("invoice-batch.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}");
}
// With page number context
var results = BarcodeReader.Read("invoice-batch.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}");
}
Imports System
' With page number context
Dim results = BarcodeReader.Read("invoice-batch.pdf")
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}")
Next
IronBarcodeのPDF読み取りに関するドキュメントには、複数ページの一括処理とページ範囲フィルタリングのオプションが記載されています。
未知のバーコード形式の読み取り
画像に含まれるバーコード形式がわからない場合、2つのライブラリは状況を異なって扱います。
Aspose.BarCode アプローチ
Asposeの解は、フォーマットが不明なシナリオに向けたものです。 Asposeの公式ドキュメントにも、デコーダーが既知のシンボル体系を順番に処理するため、対象リストを指定するよりも処理速度が遅くなると記載されている。 大量処理、例えば倉庫で1分間に数千枚のラベルをスキャンするような場合、この性能差は決して些細なものではない。
using Aspose.BarCode.BarCodeRecognition;
using var reader = new BarCodeReader("unknown-format.png");
reader.SetBarCodeReadType(DecodeType.AllSupportedTypes);
foreach (var result in reader.ReadBarCodes())
{
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
}
using Aspose.BarCode.BarCodeRecognition;
using var reader = new BarCodeReader("unknown-format.png");
reader.SetBarCodeReadType(DecodeType.AllSupportedTypes);
foreach (var result in reader.ReadBarCodes())
{
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
}
Imports Aspose.BarCode.BarCodeRecognition
Using reader As New BarCodeReader("unknown-format.png")
reader.SetBarCodeReadType(DecodeType.AllSupportedTypes)
For Each result In reader.ReadBarCodes()
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}")
Next
End Using
IronBarcodeのアプローチ
フォーマットに関する知識に基づく"低速モード"や"高速モード"といった概念は存在しません。 IronBarcodeの検出機能は、画像にCode 128が含まれている場合でも、DataMatrixが含まれている場合でも、同じアルゴリズムを実行します。 性能対精度のトレードオフを調整したい場合、ReadingSpeedオプションはフォーマット知識を必要とせずにそれを実現します。
using IronBarCode;
// The same call regardless of format — always auto-detects
var results = BarcodeReader.Read("unknown-format.png");
foreach (var result in results)
{
Console.WriteLine($"{result.Format}: {result.Value}");
}
using IronBarCode;
// The same call regardless of format — always auto-detects
var results = BarcodeReader.Read("unknown-format.png");
foreach (var result in results)
{
Console.WriteLine($"{result.Format}: {result.Value}");
}
Imports IronBarCode
' The same call regardless of format — always auto-detects
Dim results = BarcodeReader.Read("unknown-format.png")
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads = 4
};
var results = BarcodeReader.Read("document.png", options);
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads = 4
};
var results = BarcodeReader.Read("document.png", options);
Imports IronBarCode
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.MaxParallelThreads = 4
}
Dim results = BarcodeReader.Read("document.png", options)
ReadingSpeed.Fasterはスループットを優先します。 ReadingSpeed.Detailedは、損傷した画像や低コントラスト画像の精度を優先します。 どちらの場合も、事前にフォーマットを知っておく必要はありません。 チューニングパラメータの全セットについては、 IronBarcodeの読み取りオプションを参照してください。
APIマッピングリファレンス
| Aspose.BarCode | IronBarcode |
|---|---|
new BarcodeGenerator(EncodeTypes.Code128, "data") |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) |
generator.Save("file.png", BarCodeImageFormat.Png) |
.SaveAsPng("file.png") |
new BarCodeReader(path, DecodeType.Code128) |
BarcodeReader.Read(path) |
DecodeType.AllSupportedTypes (遅く、徹底したスキャン) |
自動 — 常に高速、すべてのフォーマットで同じ呼び出し |
reader.ReadBarCodes() |
(part of BarcodeReader.Read — returns results directly) |
繰り返しreader.ReadBarCodes() |
戻り値がBarcodeReader.Read |
result.CodeText |
result.Value |
result.CodeTypeName |
result.Format.ToString() |
result.Confidence |
result.Confidence |
Aspose.BarCode + Aspose.PDF for PDF reading |
BarcodeReader.Read("doc.pdf") — 1つのパッケージ |
license.SetLicense("Aspose.BarCode.lic") |
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" |
new Aspose.BarCode.Metered() + .SetMeteredKey() |
(not needed — single key covers all environments) |
generator.GenerateBarCodeImage() |
.ToPngBinaryData() または .SaveAsPng() |
QREncodeMode.Auto + QRErrorLevel.LevelH + 手動ロゴオーバーレイ |
QRCodeWriter.CreateQrCode().AddBrandLogo() |
チームがAspose.BarCodeからIronBarcodeへの移行を検討する場合
開発チームがAspose.BarCodeの代替としてIronBarcodeを評価するきっかけとなるシナリオはいくつかあります。
購読更新のお知らせが届きました
年間購読の更新時期は、チームが図書館に関する決定事項を見直す最も頻繁な機会です。 Aspose.BarCode がスタック内の唯一の Aspose 製品である場合、開発者ごとに年間 $999(またはサイト階層で $4,995/年)を支払うことは、バーコード機能に対して比較を促します。 大抵の会話は"私たちはこれを毎年ずっと払い続けることになる"というものだ。 IronBarcodeの費用はいくらですか?Professionalプラン(開発者10名で2,999ドル)の場合、 IronBarcodeはサイトライセンス料を差し引いても、最初の1年以内に元が取れます。
Aspose.Totalを使用しているチームにとって — Aspose.BarCodeが他の多くのAspose製品とバンドルされている場合には、計算は異なります。 そのバンドルに含まれるAspose.BarCodeの限界費用はゼロに近づく。 それらのチームには、チームを移籍させる理由が少ない。
PDFサポートが必須要件となる
多くのプロジェクトは、画像からのバーコード読み取りから始まり、その後、関係者が受信文書が画像ファイルではなくPDFファイルであることに気付いた時点で、PDFサポートを追加する。 その時点で、Aspose.BarCodeチームは、Aspose.PDFを追加する(別のサブスクリプションが必要になる)、サードパーティ製のPDFレンダラーを探す、またはバーコードライブラリを再評価するという決断を迫られます。
Aspose.PDFを追加することで直近の要件は解決されますが、2番目の年次サブスクリプションが必要になります。 サードパーティのレンダラーを見つけると依存関係と統合の取り組みが増えます。 バーコードライブラリを再評価した結果、 IronBarcodeが一度限りの料金でPDFをネイティブに読み取れることを発見する、というのがよくある結果である。
本番環境におけるフォーマット不明なシナリオ
顧客向けアプリケーションで文書のアップロードを受け付ける場合、アップロードされた文書が使用するバーコード形式を制御することはできません。 アプリケーションがCode 128入力を想定して構築され、顧客がDataMatrixラベルをアップロードした場合、ハードコーディングされたDecodeType.Code128は何の結果も返さないで黙ってスルーします。 DecodeType.AllSupportedTypesに変更すると、正確性は直りますが、パフォーマンスコストが発生します。
この問題に遭遇したチームは、DecodeType値を読み取り設定に追加し続け、新しいフォーマットが登場するたびに更新が必要なリストを維持することが多いです。 IronBarcodeの自動検出機能により、そのリストは不要になります。
クラウドおよびコンテナ化されたデプロイメント
Aspose.BarCodeのファイルベースのライセンスでは、デプロイメント手順が1つ追加されます。ライセンスファイルは、アプリケーションが読み取れるパスから実行時にアクセスできる必要があります。 GitOpsワークフローでは、ライセンスファイルはソース管理下に置かれるか(セキュリティリスク)、マウントされたシークレットボリュームを介して注入される必要がある。 IronBarcodeのキーベースのアプローチは、KubernetesのシークレットやCI/CDのシークレット変数にスムーズに適合し、コンテナイメージ内で管理するファイルは一切ありません。
一般的な移行の考慮事項
Aspose.BarCodeからIronBarcodeに移行するチームは、予測可能な一連の技術的な調整に遭遇します。
プロパティ名のマッピング
パッケージを交換した後の最も一般的なコンパイルエラーは、result.Valueへの名前変更です。 コードベース全体を検索すれば、すぐにこの問題を解決できます。
grep -r "\.CodeText" --include="*.cs" .
grep -r "\.CodeTypeName" --include="*.cs" .
grep -r "\.CodeText" --include="*.cs" .
grep -r "\.CodeTypeName" --include="*.cs" .
result.Valueに変わります。 result.Format.ToString()に変わります。 BarcodeEncoding列挙型の値で、必要に応じてタイプ付き比較も可能です。
デコードタイプの削除
コードベースのすべてのDecodeType.*参照を削除できます:
grep -r "DecodeType\." --include="*.cs" .
grep -r "DecodeType\." --include="*.cs" .
特定のReadingSpeed.Fasterは、フォーマット知識を必要とせずに同様の利益を提供します。
ライセンス初期化の変更
Aspose.BarCodeは、.licファイルを使用します。 IronBarcodeは文字列キーを使用します。
IronBarCode.License.LicenseKey =
Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
?? throw new InvalidOperationException("IronBarcode license key not configured");
IronBarCode.License.LicenseKey =
Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
?? throw new InvalidOperationException("IronBarcode license key not configured");
Imports IronBarCode
Imports System
License.LicenseKey = If(Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE"), Throw New InvalidOperationException("IronBarcode license key not configured"))
リポジトリおよびビルド成果物から.licファイルを削除します。 Docker環境で、ENV IRONBARCODE_LICENSEエントリに置き換えます。
EncodeTypesからBarcodeEncodingへのマッピング
BarcodeEncoding.QRCodeにマッピングされます。名前の違いが原因で、生成コードを移行した直後に最初のコンパイルエラーに最もよく遭遇します。 他のほとんどのマッピングは、名前が一致する直接の同等物です。
IronBarcodeの追加機能
IronBarcodeは、基本的な比較ポイント以外にも、アプリケーションの状況に応じて役立つ可能性のある機能を提供します。
- 画像ごとの複数バーコード検出:
ExpectMultipleBarcodes = trueは、1つの画像内で見つかったすべてのバーコードを返し、各バーコードの位置座標を含みます。 - PDFへのバーコード印字:別途PDFライブラリを用意することなく、既存のPDFページに直接バーコードを書き込みます。
- TIFFマルチフレーム読み取り:複数ページのTIFFファイルのすべてのフレームからバーコードを1回の呼び出しで読み取ります。 -スタイリッシュなQRコード:色、ロゴ、エラー訂正レベルはすべて、外部画像処理なしで、スムーズな処理チェーンを通じて設定されます。
- Azure FunctionsとAWS Lambdaのサポート:標準ライセンスでは、両プラットフォームでサーバーレスデプロイメントがサポートされます。 -バイナリデータエンコーディング:バイナリペイロードのユースケース向けに、バイト配列をデータマトリックスまたはPDF417バーコードに直接エンコードします。
.NETの互換性と将来の準備
IronBarcodeは.NET Framework 4.6.2+、.NET Core 3.1+、.NET 5、6、7、および8をサポートしています。ライブラリはMicrosoft for .NETリリースリズムに合わせた定期的な更新を受けます。 Aspose.BarCodeも同等 for .NETバージョン範囲をサポートしているため、最新バージョンではどちらのライブラリも互換性の優位性を示しません。 将来への備えという点で重要な違いはライセンスにあります。今日購入したIronBarcodeの永久ライセンスは、追加費用なしで将来 for .NETバージョンをカバーしますが、Aspose.BarCodeのサブスクリプションは、更新されたビルドにアクセスするために継続的な更新が必要です。
結論
Aspose.BarCodeとIronBarcodeは、バーコードライブラリの設計において、それぞれ異なる哲学に基づいている。 Aspose.BarCodeは、明示的なインスタンスベースのAPIに基づいて構築されており、呼び出し元はフォーマットを指定し、オブジェクトのライフサイクルを管理し、プロパティ階層を通じて各操作を構成します。 IronBarcodeは、静的でフォーマットに依存しないAPIに基づいて構築されており、ライブラリが検出、オブジェクトのライフサイクル、およびPDFレンダリングを内部的に処理します。 どちらのアプローチも本質的に正しいとは言えず、最適な選択はアプリケーションのニーズによって異なる。
Aspose.BarCodeは、既にAsposeエコシステム内で運用しているチームにとって、より優れた選択肢です。 Aspose.Totalがすでにライセンスされている場合、Aspose.BarCodeは追加の費用が発生せず、その80以上のシンボロジーリストは商用.NETバーコードライブラリの中で最も広いものの1つです。 IronBarcodeの50種類以上のリストに含まれていない、MaxiCode、DotCode、または特定の郵便記号体系といった特殊なフォーマットを必要とするアプリケーションの場合、Aspose.BarCodeが唯一の実行可能な選択肢となる可能性があります。 その成熟度とフォーマットの幅広さは、真の強みである。
Aspose.BarCodeを単体で購入することを検討しているチームにとって、その価値を計算するのはより困難です。 フォーマット指定の要件は、あらゆる読み取り操作に煩雑さを加える。 ネイティブのPDFサポートがないことで、 IronBarcodeが基本パッケージに含めている機能の購読料が2倍になってしまう。 また、サブスクリプションモデルでは、コストが毎年増加します。10人の開発者チームの場合、年間4,995ドルで5年間で24,975ドルになりますが、 IronBarcode Professionalを1回限りで購入する場合は2,999ドルです。 IronBarcodeの自動検出機能、ネイティブPDF読み取り機能、そして永久ライセンスは、これら3つの懸念事項すべてを1つのパッケージで解決します。
最終的な決定は、生態系への適合性とシンボル表示の要件によって左右される。 Aspose製品と深く連携しているチーム、またはIronBarcodeがサポートするリストに含まれていないフォーマットを必要とするチームは、Aspose.BarCodeに属します。 スタンドアロンの永久ライセンス、ネイティブなPDF読み取り機能、そして読み取りのたびにフォーマットの知識を必要としないAPIを求めるチームにとって、 IronBarcodeはより実用的な選択肢となるでしょう。
よくある質問
Aspose.BarCode for .NETとは何ですか?
Aspose.BarCode for .NETは、C#アプリケーションでバーコードを生成および読み取るため for .NETバーコードライブラリです。これは、開発者が.NETプロジェクト用のバーコードソリューションを選択する際に評価するいくつかの選択肢の1つです。
Aspose.BarCode for .NETとIronBarcodeの主な違いは何ですか?
IronBarcodeはインスタンス管理を必要としない静的なステートレスAPIを使用します。一方、Aspose.BarCode for .NETは通常、使用前にインスタンスの作成と設定が必要です。IronBarcodeはまた、ネイティブPDFサポート、自動フォーマット検出、すべての環境でのシングルキーライセンスを提供します。
IronBarcodeはAspose.BarCode for .NETよりもライセンスが簡単ですか?
IronBarcodeは単一のライセンスキーで開発環境と本番環境の両方をカバーします。これは、SDKキーとランタイムキーを分離するライセンスシステムと比較して、CI/CDパイプラインとDocker構成を簡素化します。
IronBarcode はAspose.BarCode for .NETがサポートしているすべてのバーコードフォーマットをサポートしていますか?
IronBarcodeはQRコード、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1など30以上のバーコードシンボロジーをサポートしています。フォーマットの自動検出は、明示的なフォーマットの列挙が不要であることを意味します。
IronBarcodeはネイティブPDFバーコード読み取りをサポートしていますか?
IronBarcodeは、別のPDFレンダリングライブラリを必要とせず、BarCodeReader.Read("document.pdf")を使用してPDFファイルから直接バーコードを読み取ります。ページごとの結果には、ページ番号、バーコードフォーマット、値、信頼度スコアが含まれます。
IronBarcode はAspose.BarCode for .NETと比較してどのようにバッチ処理を行いますか?
IronBarcodeの静的メソッドはステートレスで当然スレッドセーフであり、スレッドごとのインスタンス管理なしにParallel.ForEachを直接使用できます。どの価格帯でもスループットの上限はありません。
IronBarcode はど for .NETバージョンをサポートしていますか?
IronBarcodeは.NET Framework 4.6.2+、.NET Core 3.1、.NET 5、6、7、8、9を単一のNuGetパッケージでサポートしています。プラットフォーム・ターゲットには、Windows x64/x86、Linux x64、macOS x64/ARMが含まれます。
.NETプロジェクトにIronBarcodeをインストールするには?
NuGet経由でIronBarcodeをインストールする:パッケージマネージャーコンソールで'Install-Package IronBarCode'を実行するか、CLIで'dotnet add package IronBarCode'を実行する。追加のSDKインストーラーやランタイムファイルは必要ありません。
Aspose.BarCodeとは異なり、購入前にIronBarcodeを評価することはできますか?
IronBarcodeのトライアルモードでは、完全なデコードされたバーコード値を返します。購入を決定する前に、ご自身のドキュメントで読み取り精度をベンチマークすることができます。
Aspose.BarCode for .NETとIronBarcodeの価格の違いは何ですか?
IronBarcodeは、開発および量産をカバーする永続的なシングルデベロッパーライセンスで749ドルからご利用いただけます。価格の詳細とボリュームオプションはIronBarcodeのライセンスページでご覧いただけます。別途ランタイムライセンスは必要ありません。
Aspose.BarCode for .NETからIronBarcodeへの移行は簡単ですか?
Aspose.BarCode for .NETからIronBarcodeへの移行は、主にインスタンスベースのAPIコールをIronBarcodeのスタティックメソッドに置き換え、ライセンスの定型文を削除し、結果のプロパティ名を更新します。ほとんどの移行はコードを追加するのではなく、コードを削減します。
IronBarcodeはロゴ入りQRコードを生成できますか?
はい。QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")は、設定可能なエラー修正機能付きで、ブランド画像をネイティブにQRコードに埋め込みます。カラーQRコードもChangeBarCodeColor()でサポートされています。

