.NET用Aspose.BarCodeとIronBarcodeの比較:C#バーコードライブラリの比較
Aspose.BarCodeを使用したことがある開発者は、この行の何らかのバージョンを書いています:--code-37948--@@。 画像のフォーマットが分かっていれば、問題なく動作します。 そうでない場合 - 外部システムからのドキュメント、ラベルフォーマットを変更したサプライヤー、またはユーザーのアップロード - デコードタイプのリストを推測するか、DecodeType.AllSupportedTypesに手を伸ばすかのどちらかですが、これは明らかに遅いです。 フォーマット指定の要件は致命的な問題ではないが、コードベースにおけるあらゆる読み取り操作において、日々蓄積される摩擦要因となる。
PDFに関する話は、予算に関する話だ。 PDFドキュメントからバーコードを処理する場合、Aspose.BarCode単体では処理できません。 まず、ページを画像としてレンダリングするために、Aspose.PDF for .NETが必要です。Aspose.PDFは別のサブスクリプションサービスで、Aspose.BarCodeの料金に加えて、年間999ドルから4,995ドルの費用がかかります。 ほとんどの開発者が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は60種類以上のバーコードシンボルをサポートしており、これは市販の.NETバーコードライブラリの中で最も包括的なフォーマットリストです。 その幅広さこそが、この図書館の最大の強みだ。 APIの適用範囲はそれに応じて広く、機能が増えるにつれてAPIの冗長性も高まります。 基本的なCode 128バーコードを生成するには、BarcodeGeneratorをインスタンス化し、@@--CODE-37951--@、@@--CODE-37952--@、およびその他のパラメータを設定し、明示的なフォーマット引数で@@--CODE-37953--@を呼び出す必要があります。 読むには、検索するデコードタイプを指定し、ReadBarCodes()を呼び出し、FoundBarCodesを反復する必要があります。 どちらの操作も正しく動作するが、必要以上に冗長である。
Aspose.BarCodeの主なアーキテクチャ特性:
- フォーマット優先読み取りモデル: すべての読み取り操作では、@--CODE-37956--@@を明示的に指定する必要があります。 フォールバックの
DecodeType.AllSupportedTypesは、デコーダーが既知のすべてのシンボロジーを順次実行するため、ターゲットリストよりも大幅に遅くなります。 - インスタンスベースAPI:@--CODE-37958--@と@--CODE-37959--@の両方は、@--CODE-37960--@を実装するインスタンス化されたオブジェクトです。 これらを
usingブロックでラップしないと、リソースリークになります。 -ネイティブPDFサポートなし: Aspose.BarCodeはPDFドキュメントを直接開いたりレンダリングしたりすることはできません。 PDFファイルからバーコードを読み取るには、Aspose.PDFという別売りのサブスクリプション製品が必要で、料金は年間999ドルから4,995ドルです。 - 深いパラメータ階層: カスタマイズはプロパティチェーンを通して処理されます。 -サブスクリプションライセンスのみ:すべてのプランは年間サブスクリプションです。 永久ライセンスは単体製品としては提供されていません。
- ファイルベースのライセンス認証:本番環境でのデプロイには、既知のパスでアクセス可能な@--CODE-37963--@@ファイルが必要です。
フォーマット優先の読書モデル
Aspose.BarCode の読み取り API は、呼び出し元がバーコードのフォーマットを知っているという前提に基づいて構築されています。
// Aspose.BarCode: must specify format or use slow AllSupportedTypes
using Aspose.BarCode.BarCodeRecognition;
var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
reader.ReadBarCodes();
foreach (var result in reader.FoundBarCodes)
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
// Aspose.BarCode: must specify format or use slow AllSupportedTypes
using Aspose.BarCode.BarCodeRecognition;
var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
reader.ReadBarCodes();
foreach (var result in reader.FoundBarCodes)
Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
Imports Aspose.BarCode.BarCodeRecognition
' Aspose.BarCode: must specify format or use slow AllSupportedTypes
Dim reader As New BarCodeReader("barcode.png", DecodeType.Code128)
reader.ReadBarCodes()
For Each result In reader.FoundBarCodes
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);
CODE-37965を使用しないことは、リソースリークとなります。 また、BarcodeGeneratorは、IDisposableを実装していますが、これを処分しなかった場合の結果はそれほど深刻ではありません。 どちらの場合も、静的ファクトリAPIが自動的に処理するオブジェクトのライフサイクルを管理していることになります。
IronBarcodeを理解する
IronBarcodeは、読み取りと書き込みの両方に静的ファクトリメソッドを使用します。 構築、構成、または破棄するインスタンスが存在しません。 読み取りAPIはデフォルトではフォーマットに依存しないため、ソースファイルがPNG、JPEG、TIFF、PDFのいずれであっても、同じ呼び出しで動作します。
IronBarcodeは、 .NET開発ツールに特化した企業であるIron Softwareによって開発および保守されています。 このライブラリは、バーコードの読み取りにバーコード形式に関する事前の知識は不要であるという原則に基づいて設計されています。ライブラリの検出エンジンが画像の内容から形式を自動的に判別します。 生成においては、他のライブラリでよく見られる多段階のパラメータ階層構造の代わりに、流暢なメソッドチェーンが採用されている。
IronBarcodeの主な特徴:
- 自動フォーマット検出:@--CODE-37968--@は、呼び出し元が@@--CODE-37969--@の等価物を指定することなく、画像コンテンツからバーコードシンボロジーを識別します。 -静的ステートレスAPI:すべての読み取りおよび書き込み操作は静的メソッドです。 管理すべき使い捨てインスタンスはなく、APIは並行使用に対して本質的にスレッドセーフです。
- ネイティブPDFサポート:@--CODE-37970--@@は、追加のパッケージやレンダリングステップなしでPDFファイルから直接読み込みます。結果には、@--CODE-37971--@@が含まれます。
- フルエント生成API: @--CODE-37972--@@ 連鎖可能なオブジェクトを返します。 カスタマイズでは、プロパティ階層ではなくメソッドチェーンが使用されます。 -永久ライセンスモデル:すべてのプランで、年間更新不要の買い切り型ライセンスを提供しています。
- 文字列ベースのライセンス認証:ライセンスキーは、環境変数やCI/CDシークレットマネージャーと互換性のある
IronBarCode.License.LicenseKey@を介して設定されます。
機能比較
| フィーチャー | Aspose.BarCode | IronBarcode |
|---|---|---|
| フォーマット検出 | マニュアル - 必ず DecodeType を指定するか、遅い AllSupportedTypes を使用してください。 |
サポートされているすべてのフォーマットで自動的に |
| シンボル数 | 60歳以上 | 50歳以上 |
| PDFサポート | ネイティブサポートなし - 別途Aspose.PDFライセンスが必要です | ネイティブ - BarcodeReader.Read("doc.pdf") パッケージに組み込まれています。 |
| 価格設定モデル | 購読のみ — 年間999ドル~4,995ドル | 永久ライセンス 749ドル~(一括払い) |
| 永久ライセンス | 不可 | はい、全ティア |
| APIスタイル。 | インスタンスベースの詳細な設定 | 静的ファクトリメソッド、流暢なAPI |
| IDisposable 要件 | はい - BarCodeReaderおよびBarcodeGenerator@。 |
いいえ — ステートレスな静的メソッド |
| スレッドセーフ。 | スレッドごとに個別のインスタンスが必要 | ステートレス — 同時使用でも当然安全 |
詳細な機能比較
| フィーチャー | Aspose.BarCode | IronBarcode |
|---|---|---|
| 世代 | ||
| APIスタイル | コード-37979 | コード-37980 |
| カスタマイズモデル | プロパティ階層 | Fluentメソッドチェーン (@--CODE-37982--@@, @--CODE-37983--@@) |
| ロゴ入りQRコード | 生成後に手動でGDI+オーバーレイを実装します。 | CODE-37984-- ビルトイン |
| バイト単位で出力 | コード-37985 | コード-37986 |
| カラーバーコード | コード-37987 | コード-37988 |
| 読む | ||
| フォーマット仕様 | 必須 (@--CODE-37989--@@) | 不要 - 自動 |
| 不明なフォーマットのフォールバック | CODE-37990--@@ (遅い) | 同じ呼び出しで、フォールバックモードは不要です。 |
| パフォーマンスチューニング | 12+--CODE-37991--@@ パラメータ | CODE-37992--列挙 - 3つのレベル |
| 使い捨てリーダー | はい - @--CODE-37993--@@@. | いいえ — 静的呼び出し、破棄するオブジェクトはありません |
| 結果へのアクセス | CODE-37995に電話した後、reader.FoundBarCodes@に連絡してください。 |
の戻り値--CODE-37996--@@@。 |
| バーコード値プロパティ | コード-37997 | コード-37998 |
| フォーマット名プロパティ | コード-37999 | コード-38000 |
| PDFサポート | ||
| ネイティブPDFリーダー | なし | はい |
| PDFに必要 | Aspose.PDF(年間999ドル~4,995ドルの追加料金) | 追加パッケージなし |
| 検索結果のページ番号 | 該当なし | コード-38001 |
| ライセンスについて | ||
| ライセンスモデル | 購読のみ、年間更新 | 永久購入、一括購入 |
| 単独開発者 | 年間999ドル | 749ドル |
| 開発者10人 | 年間4,995ドル(サイトライセンス) | 2,999ドル(一括払い)(Professional) |
| 無制限の開発者 | 年間14,985ドル(OEM) | 5,999ドル(一括払い、無制限) |
| PDFサポートが含まれています | いいえ — Aspose.PDF のサブスクリプションは別途必要です | はい |
| プラットフォームと展開 | ||
| ライセンス認証 | ファイルパス | 文字列キー — 環境変数 |
| Dockerデプロイメント | ファイルをイメージにコピーするか、マウントする必要があります。 | 環境変数 — ファイルは不要 |
| .NET フレームワーク | はい | はい(4.6.2以降) |
| .NET Core / .NET 5 以上 | はい | はい(.NET Core 3.1以降、 .NET 5/6/7/8/9) |
| ウィンドウズ | はい | はい(x64/x86) |
| Linux | はい | はい(64ビット版) |
| macOS | はい | はい(x64/ARM) |
| ドッカー | はい | はい |
| Azure / AWS Lambda | はい | はい |
ジェネレーションAPI
生成APIは、日常的なコードにおいて、2つのライブラリ間の冗長性の違いが最も顕著に現れる部分です。
Aspose.BarCode アプローチ
Aspose.BarCodeは、設定にParameters@階層を持つBarcodeGenerator@クラスを使用します。 最小限の生成呼び出しには、インスタンス化、保存呼び出し、フォーマット指定という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コードにロゴを重ねるために、手動でGDI+描画を行う必要があります - バーコード画像を生成し、System.Drawing.Graphicsを使ってロゴを中央に合成します。 IronBarcodeのAddBrandLogoは1回の呼び出しでそれを処理し、自動的にエラー訂正を適切に設定します。
PDFバーコード読み取り
多くのチームにとって、これが最も重要な比較点です。PDF文書からバーコードを読み取ることは、一般的なワークフローです。例えば、受信した請求書、PDF形式で保存された配送ラベル、スキャンされた文書アーカイブなどが挙げられます。
Aspose.BarCode アプローチ
Aspose.BarCodeにはネイティブのPDFサポートはありません。 Asposeを使用してPDFからバーコードを読み取るには、PDFを読み込んでページを画像にレンダリングするためのAspose.PDFと、レンダリングされた画像をスキャンするためのAspose.BarCodeが必要です。 どちらも定期購入商品です。 どちらもライセンス認証が必要です。 これらを合わせると、ほとんどの開発者が単一の機能と考えるものに対して、年間1,998ドルから9,990ドルの費用がかかることになります。
// 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つの名前空間からの2つのusing文、レンダリング・パイプライン、メモリ・ストリーム管理、ネストされたループです。また、DecodeType.AllSupportedTypesを使用しています。画像抽出の時点では、通常、バーコードがどのフォーマットを使用しているかわからないからです。
IronBarcodeのアプローチ
IronBarcodeは、PDFの解析、ページレンダリング、バーコード検出を内部的に処理します。 CODE-38011--@を@@CODE-38012--@で終わるパスで呼び出すと、@@CODE-38013--@を含むBarCode結果が返されます。 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 アプローチ
CODE-38014--@@@は、フォーマット不明シナリオに対するAsposeのソリューションです。 Asposeの公式ドキュメントにも、デコーダーが既知のシンボル体系を順番に処理するため、対象リストを指定するよりも処理速度が遅くなると記載されている。 大量処理、例えば倉庫で1分間に数千枚のラベルをスキャンするような場合、この性能差は決して些細なものではない。
using Aspose.BarCode.BarCodeRecognition;
// AllSupportedTypes scans for every known format — significantly slower
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;
// AllSupportedTypes scans for every known format — significantly slower
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
' AllSupportedTypes scans for every known format — significantly slower
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)
CODE-38016はスループットを優先します。 損傷した画像や低コントラストの画像については、正確さを優先します。 どちらの場合も、事前にフォーマットを知っておく必要はありません。 チューニングパラメータの全セットについては、 IronBarcodeの読み取りオプションを参照してください。
APIマッピングリファレンス
| Aspose.BarCode | IronBarcode |
|---|---|
| コード-38018 | コード-38019 |
| コード-38020 | コード-38021 |
| コード-38022 | コード-38023 |
| CODE-38024--@@ (ゆっくり、徹底的にスキャン) | 自動 — 常に高速、すべてのフォーマットで同じ呼び出し |
| コード-38025 | (part of BarcodeReader.Read — returns results directly) |
| コード-38027 | コード-38028の戻り値 |
| コード-37997 | コード-37998 |
| コード-37999 | コード-38000 |
| コード-38033 | コード-38033 |
| コード-38035 | コード-38036 - 1パッケージ |
| コード-38037 | コード-38038 |
| --コード-38039--@ + @@--コード-38040--@@。 | (not needed — single key covers all environments) |
| コード-37985 | CODE-38042--@@または.SaveAsPng()@。 |
| CODE-38044--@@ + @@--CODE-38045--@ + マニュアルロゴオーバーレイ | コード-38046 |
チームがAspose.BarCodeからIronBarcodeへの移行を検討する場合
開発チームがAspose.BarCodeの代替としてIronBarcodeを評価するきっかけとなるシナリオはいくつかあります。
購読更新のお知らせが届きました
年間購読の更新時期は、チームが図書館に関する決定事項を見直す最も頻繁な機会です。 Aspose.BarCodeがスタック内の唯一のAspose製品である場合、バーコード機能に年間999ドルから4,995ドルかかるため、比較検討が必要となる。 大抵の会話は"私たちはこれを毎年ずっと払い続けることになる"というものだ。 IronBarcodeの費用はいくらですか?Professionalプラン(開発者10名で2,999ドル)の場合、 IronBarcodeはサイトライセンス料を差し引いても、最初の1年以内に元が取れます。
Aspose.Totalを使用しているチーム(Aspose.BarCodeが20以上の他の製品とバンドルされている)の場合、計算方法は異なります。 そのバンドルに含まれるAspose.BarCodeの限界費用はゼロに近づく。 それらのチームには、チームを移籍させる理由が少ない。
PDFサポートが必須要件となる
多くのプロジェクトは、画像からのバーコード読み取りから始まり、その後、関係者が受信文書が画像ファイルではなくPDFファイルであることに気付いた時点で、PDFサポートを追加する。 その時点で、Aspose.BarCodeチームは、Aspose.PDFを追加する(別のサブスクリプションが必要になる)、サードパーティ製のPDFレンダラーを探す、またはバーコードライブラリを再評価するという決断を迫られます。
Aspose.PDFを追加すれば当面の要件は満たされるが、サブスクリプション費用が倍増する。サードパーティ製のレンダラーを探すと、依存関係が増え、統合作業も必要になる。 バーコードライブラリを再評価した結果、 IronBarcodeが一度限りの料金でPDFをネイティブに読み取れることを発見する、というのがよくある結果である。
本番環境におけるフォーマット不明なシナリオ
顧客向けアプリケーションで文書のアップロードを受け付ける場合、アップロードされた文書が使用するバーコード形式を制御することはできません。 アプリケーションがCode 128入力を想定して構築され、顧客がDataMatrixラベルをアップロードした場合、ハードコードされたDecodeType.Code128は無言で結果を返しません。 CODE-38048--@@に変更すると、正しさは修正されますが、パフォーマンス上のコストが発生します。
新しいフォーマットが製品に登場するたびに、リーダー設定にどんどんDecodeType@値を追加していくという、この問題に直面したことのあるチームは、新しいフォーマットソースが追加されるたびに更新が必要なリストを維持することになりがちです。 IronBarcodeの自動検出機能により、そのリストは不要になります。
クラウドおよびコンテナ化されたデプロイメント
Aspose.BarCodeのファイルベースのライセンスでは、デプロイメント手順が1つ追加されます。ライセンスファイルは、アプリケーションが読み取れるパスから実行時にアクセスできる必要があります。 GitOpsワークフローでは、ライセンスファイルはソース管理下に置かれるか(セキュリティリスク)、マウントされたシークレットボリュームを介して注入される必要がある。 IronBarcodeのキーベースのアプローチは、KubernetesのシークレットやCI/CDのシークレット変数にスムーズに適合し、コンテナイメージ内で管理するファイルは一切ありません。
一般的な移行の考慮事項
Aspose.BarCodeからIronBarcodeに移行するチームは、予測可能な一連の技術的な調整に遭遇します。
プロパティ名のマッピング
パッケージを交換した後に最もよくあるコンパイルエラーは、result.CodeTextからresult.Valueへのリネームです。 コードベース全体を検索すれば、すぐにこの問題を解決できます。
grep -r "\.CodeText" --include="*.cs" .
grep -r "\.CodeTypeName" --include="*.cs" .
grep -r "\.CodeText" --include="*.cs" .
grep -r "\.CodeTypeName" --include="*.cs" .
CODE-38052--@@は、result.Valueになります。 CODE-38054--@@は、result.Format.ToString()になります。 CODE-38056--@@プロパティはBarcodeEncoding列挙値であり、必要に応じて型付き比較も可能です。
デコードタイプの削除
コードベース内のDecodeType.*@参照はすべて削除できます:
grep -r "DecodeType\." --include="*.cs" .
grep -r "DecodeType\." --include="*.cs" .
特定のDecodeTypeが、既知のフォーマットでのパフォーマンスを向上させるために記載されている場合、BarcodeReaderOptionsのReadingSpeed.Fasterは、フォーマットの知識なしで同様の利点を提供します。
ライセンス初期化の変更
Aspose.BarCodeは、.lic@ファイルを使用し、license.SetLicense()を介して読み込まれます。 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では、COPY Aspose.BarCode.lic行を削除し、ENV IRONBARCODE_LICENSEエントリに置き換えてください。
EncodeTypesからBarcodeEncodingへのマッピング
CODE-38067--@@は、BarcodeEncoding.QRCodeに対応します。この命名の違いは、世代コードを移行した後、チームが最初のコンパイルエラーに遭遇することが最も多い場所です。 その他のマッピングはすべて、命名規則が統一された直接的な同等物です。
IronBarcodeの追加機能
IronBarcodeは、基本的な比較ポイント以外にも、アプリケーションの状況に応じて役立つ可能性のある機能を提供します。
- 画像ごとの複数バーコード検出:@--CODE-38069--@@は、1 つの画像で見つかったすべてのバーコードを、それぞれの位置座標とともに返します。
- PDFへのバーコード印字:別途PDFライブラリを用意することなく、既存のPDFページに直接バーコードを書き込みます。
- TIFFマルチフレーム読み取り:複数ページのTIFFファイルのすべてのフレームからバーコードを1回の呼び出しで読み取ります。 -スタイリッシュなQRコード:色、ロゴ、エラー訂正レベルはすべて、外部画像処理なしで、スムーズな処理チェーンを通じて設定されます。
- Azure FunctionsとAWS Lambdaのサポート:標準ライセンスでは、両プラットフォームでサーバーレスデプロイメントがサポートされます。 -バイナリデータエンコーディング:バイナリペイロードのユースケース向けに、バイト配列をデータマトリックスまたはPDF417バーコードに直接エンコードします。
.NETの互換性と将来の準備
IronBarcodeは、.NET フレームワーク4.6.2以降、 .NET Core 3.1以降、および.NET 5、6、7、8、9をサポートしています。このライブラリは、Microsoftの.NETリリースサイクルに合わせて定期的に更新され、2026年後半にリリース予定の.NET 10との互換性が確保されています。Aspose.BarCodeも同じ.NETバージョン範囲をサポートしているため、どちらのライブラリも現在のバージョンとの互換性において優位性はありません。 将来への備えという点で重要な違いはライセンスにあります。今日購入したIronBarcodeの永久ライセンスは、追加費用なしで将来の.NETバージョンをカバーしますが、Aspose.BarCodeのサブスクリプションは、更新されたビルドにアクセスするために継続的な更新が必要です。
結論
Aspose.BarCodeとIronBarcodeは、バーコードライブラリの設計において、それぞれ異なる哲学に基づいている。 Aspose.BarCodeは、明示的なインスタンスベースのAPIに基づいて構築されており、呼び出し元はフォーマットを指定し、オブジェクトのライフサイクルを管理し、プロパティ階層を通じて各操作を構成します。 IronBarcodeは、静的でフォーマットに依存しないAPIに基づいて構築されており、ライブラリが検出、オブジェクトのライフサイクル、およびPDFレンダリングを内部的に処理します。 どちらのアプローチも本質的に正しいとは言えず、最適な選択はアプリケーションのニーズによって異なる。
Aspose.BarCodeは、既にAsposeエコシステム内で運用しているチームにとって、より優れた選択肢です。 Aspose.Totalのライセンスが既に取得されている場合、Aspose.BarCodeは追加費用なしで導入でき、60種類以上のシンボルリストは、市販の.NETバーコードライブラリの中で最も充実しています。 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#アプリケーションでバーコードを生成および読み取るための.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 はどの.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()でサポートされています。

