Aspose.BarCode for .NET vs IronBarcode : Comparaison de la bibliothèque de codes-barres C#
Tous les développeurs qui ont utilisé Aspose.BarCode ont écrit une version ou une autre de cette ligne : new BarCodeReader(path, DecodeType.Code128). Cela fonctionne parfaitement lorsque vous connaissez le format de l'image. Dans le cas contraire - lorsqu'un document provient d'un système externe, d'un fournisseur qui a modifié le format de son étiquette ou d'un téléchargement par l'utilisateur - vous devez soit deviner une liste de types de décodage, soit utiliser DecodeType.AllSupportedTypes, ce qui est nettement plus lent. L'exigence de spécification de format n'est pas un obstacle insurmontable, mais elle représente une friction quotidienne qui s'accumule à chaque opération de lecture dans votre base de code.
L'histoire du PDF, c'est l'histoire du budget. Si vous traitez des codes-barres à partir de documents PDF, Aspose.BarCode ne peut pas le faire seul. Vous avez besoin d'Aspose.PDF pour .NET pour convertir les pages en images. Aspose.PDF nécessite un abonnement supplémentaire : entre 999 $ et 4 995 $ par an, en plus du prix que vous payez déjà pour Aspose.BarCode. Deux abonnements pour un flux de travail que la plupart des développeurs considèrent comme une seule tâche.
IronBarcode détecte automatiquement le format des codes-barres, lit nativement les fichiers PDF dans un seul package et propose une licence perpétuelle à partir de 749 $. Ce comparatif examine les deux bibliothèques en détail afin de vous permettre de faire un choix éclairé.
Comprendre Aspose.BarCode
Aspose développe depuis des années des bibliothèques de traitement de documents pour .NET, Java et d'autres plateformes. Aspose.BarCode est l'un des nombreux produits de la famille, aux côtés d'Aspose.Words, Aspose.Cells, Aspose.PDF, Aspose.Slides et d'une douzaine d'autres. Pour les équipes qui paient déjà Aspose.Total (l'offre groupée regroupant tous les produits Aspose), Aspose.BarCode est inclus sans surcoût. En revanche, pour celles qui n'ont besoin que d'une bibliothèque de codes-barres, le modèle d'abonnement est plus difficile à justifier.
Aspose.BarCode prend en charge plus de 60 symbologies de codes-barres, ce qui constitue la liste de formats la plus complète de toutes les bibliothèques de codes-barres .NET commerciales. Cette diversité est le principal atout de la bibliothèque. La surface de l'API est par conséquent importante, et sa verbosité augmente avec les fonctionnalités. La génération d'un code-barres Code 128 de base nécessite l'instanciation d'un BarcodeGenerator, la définition de XDimension, BarHeight, et d'autres paramètres, puis l'appel de Save avec un argument de format explicite. La lecture nécessite de spécifier les types de décodage à rechercher, d'appeler ReadBarCodes(), puis d'itérer FoundBarCodes. Les deux opérations fonctionnent correctement, elles sont simplement plus verbeuses qu'elles ne devraient l'être.
Principales caractéristiques architecturales d'Aspose.BarCode :
- Modèle de lecture avec format d'abord: Chaque opération de lecture nécessite de spécifier explicitement
DecodeType. La solution de repliDecodeType.AllSupportedTypesest nettement plus lente qu'une liste ciblée, car le décodeur parcourt chaque symbologie connue de manière séquentielle. - Instance-Based API:
BarCodeReaderetBarcodeGeneratorsont des objets instanciés qui implémententIDisposable. Le fait de ne pas les envelopper dans des blocsusingentraîne des fuites de ressources. - Absence de prise en charge native du format PDF : Aspose.BarCode ne peut pas ouvrir ni afficher directement les documents PDF. La lecture des codes-barres à partir de fichiers PDF nécessite Aspose.PDF, un produit d'abonnement distinct dont le prix varie de 999 $ à 4 995 $ par an.
- Hiérarchie de paramètres profonde: La personnalisation est gérée par des chaînes de propriétés
generator.Parameters.Barcode.*- une hiérarchie d'objets à plusieurs niveaux qui nécessite une mémorisation. - Licence par abonnement uniquement : tous les niveaux sont des abonnements annuels. Aucune option perpétuelle n'est disponible en tant que produit autonome.
- Activation de licence basée sur un fichier : Les déploiements en production nécessitent un fichier
.licaccessible à un chemin connu, ce qui ajoute une étape de déploiement pour les environnements Dockeret Kubernetes.
Le modèle de lecture axé sur le format
L'API de lecture d'Aspose.BarCode repose sur l'hypothèse que l'appelant connaît le format du code-barres :
// 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
Lorsque le format est connu, ce modèle convient parfaitement. Le problème, c'est que même en connaissant le format, un système d'achat traitant les factures fournisseurs ne peut garantir que chaque fournisseur utilise le même type de code-barres. Un système de gestion de documents qui accepte les téléchargements des utilisateurs ne peut pas prédire le format utilisé par un scanner. Dans ces cas, DecodeType.AllSupportedTypes est la solution de repli, et elle est nettement plus lente qu'une liste de types de décodage ciblée.
Le décodeur doit également être mis au rebut :
using var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
using var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
Ne pas utiliser using est une fuite de ressources. Le BarcodeGenerator met également en œuvre le IDisposable, bien que les conséquences de ne pas s'en débarrasser soient moins graves. Dans les deux cas, vous gérez la durée de vie des objets, ce qu'une API de fabrique statique gérerait automatiquement.
Comprendre IronBarcode
IronBarcode utilise des méthodes de fabrique statiques pour la lecture et l'écriture. Il n'y a aucune instance à construire, configurer ou supprimer. L'API de lecture est indépendante du format par défaut, et le même appel fonctionne que le fichier source soit un PNG, un JPEG, un TIFF ou un PDF.
IronBarcode est développé et maintenu par Iron Software, une société spécialisée exclusivement dans les outils de développement .NET . La bibliothèque est conçue selon le principe que la lecture des codes-barres ne doit pas nécessiter de connaissance préalable du format du code-barres ; le moteur de détection de la bibliothèque détermine le format à partir du contenu de l'image. Pour la génération, une chaîne de méthodes fluide remplace la hiérarchie de paramètres à plusieurs niveaux courante dans d'autres bibliothèques.
Caractéristiques principales d' IronBarcode:
- Détection automatique du format:
BarcodeReader.Read()identifie la symbologie du code-barres à partir du contenu de l'image sans que l'appelant n'ait à spécifier un équivalentDecodeType. - API statique sans état : toutes les opérations de lecture et d'écriture sont des méthodes statiques. Aucune instance jetable à gérer, et l'API est naturellement thread-safe pour une utilisation concurrente.
- Support PDF natif:
BarcodeReader.Read("doc.pdf")lit directement les fichiers PDF sans paquetage supplémentaire ni étape de rendu. Les résultats comprennentresult.PageNumber. - Fluent Generation API:
BarcodeWriter.CreateBarcode()renvoie un objet chaînable. La personnalisation utilise l'enchaînement de méthodes plutôt qu'une hiérarchie de propriétés. - Modèle de licence perpétuelle : Tous les niveaux proposent un achat unique sans obligation de renouvellement annuel.
- Activation de licence basée sur des chaînes de caractères: La clé de licence est définie via
IronBarCode.License.LicenseKey, compatible avec les variables d'environnement et les gestionnaires de secret CI/CD.
Comparaison des fonctionnalités
| Fonction | Aspose.BarCode | Code-barres IronBarcode |
|---|---|---|
| Détection de format | Manuel - doit spécifier DecodeType ou utiliser le AllSupportedTypes lent |
Automatique pour tous les formats pris en charge |
| Nombre de symboles | 60+ | 50 ans et plus |
| Prise en charge des fichiers PDF | Aucune prise en charge native — nécessite une licence Aspose.PDF distincte | Natif - BarcodeReader.Read("doc.pdf") intégré dans le package |
| Modèle de tarification | Abonnement uniquement — 999 $ à 4 995 $/an | Perpétuel à partir de 749 $ (paiement unique) |
| Licence perpétuelle | Non disponible | Oui, tous les niveaux |
| Style API | Configuration détaillée basée sur les instances | Méthodes de fabrique statiques, API fluide |
| Exigence jetable | Oui - BarCodeReader et BarcodeGenerator |
Non — méthodes statiques sans état |
| Sécurité des threads | Instances distinctes requises par thread | Sans état — naturellement sûr pour une utilisation simultanée |
Comparaison détaillée des fonctionnalités
| Fonction | Aspose.BarCode | Code-barres IronBarcode |
|---|---|---|
| Génération | ||
| style API | new BarcodeGenerator(EncodeTypes.X, "data") |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.X) |
| Modèle de personnalisation | generator.Parameters.Barcode.* hiérarchie des propriétés |
Chaîne de méthodes fluides (.ResizeTo(), .ChangeBarCodeColor()) |
| Code QR avec logo | Superposition manuelle GDI+ après génération | .AddBrandLogo("logo.png") construit en |
| Sortie en octets | generator.GenerateBarCodeImage() |
.ToPngBinaryData() |
| Codes-barres colorés | generator.Parameters.Barcode.BarColor |
.ChangeBarCodeColor(Color.X) |
| En lisant | ||
| Spécification du format | Obligatoire (DecodeType) |
Non requis — automatique |
| Solution de repli en cas de format inconnu | DecodeType.AllSupportedTypes (lent) |
Même appel – aucun mode de repli nécessaire |
| Optimisation des performances | 12+ QualitySettings paramètres |
ReadingSpeed enum - trois niveaux |
| Lecteur jetable | Oui - using var reader = new BarCodeReader(...) |
Non — appel statique, aucun objet à supprimer |
| Accès aux résultats | reader.FoundBarCodesaprès avoir appelé ReadBarCodes() |
Valeur de retour de BarcodeReader.Read() |
| propriété de valeur du code-barres | result.CodeText |
result.Value |
| Nom du format propriété | result.CodeTypeName |
result.Format.ToString() |
| Prise en charge des fichiers PDF | ||
| Lecture native de PDF | Non | Oui |
| Requis pour le PDF | Aspose.PDF (999 $ à 4 995 $/an en supplément) | Aucun forfait supplémentaire |
| Numéro de page dans les résultats | N/A | result.PageNumber |
| Licence | ||
| Modèle de licence | Abonnement uniquement, renouvelable annuellement | Achat perpétuel et unique |
| Développeur unique | 999 $/an | 749 $ (une seule fois) |
| 10 développeurs | 4 995 $/an (Licence de site) | 2 999 $ (paiement unique) (Professional) |
| Développeurs illimités | 14 985 $/an (OEM) | 5 999 $ en une seule fois (illimité) |
| Prise en charge des fichiers PDF incluse | Non — abonnement Aspose.PDF séparé | Oui |
| Plateforme et déploiement | ||
| Activation de la licence | .lic chemin du fichier |
Clé de chaîne — variable d'environnement |
| Déploiement de Docker | Doit copier le fichier .lic dans l'image ou le monter |
Variable d'environnement — aucun fichier requis |
| .NET Framework | Oui | Oui (4.6.2+) |
| .NET Core / .NET 5+ | Oui | Oui (.NET Core 3.1+, .NET 5/6/7/8/9) |
| Fenêtres | Oui | Oui (x64/x86) |
| Linux | Oui | Oui (x64) |
| macOS | Oui | Oui (x64/ARM) |
| Docker | Oui | Oui |
| Azure / AWS Lambda | Oui | Oui |
API de génération
C'est au niveau de l'API de génération que la différence de verbosité entre les deux bibliothèques est la plus visible dans le code courant.
Approche Aspose.BarCode
Aspose.BarCode utilise une classe BarcodeGenerator avec une hiérarchie Parameters pour la configuration. Un appel de génération minimal nécessite trois étapes : l'instanciation, l'appel de sauvegarde et la spécification du format. L'utilisation réelle nécessite généralement de naviguer dans 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)
Chaque personnalisation navigue dans generator.Parameters.Barcode.*, qui est une hiérarchie d'objets à plusieurs niveaux. Ce n'est pas complexe une fois qu'on l'a mémorisé — mais cela nécessite de le mémoriser.
Approche IronBarcode
IronBarcode remplace la hiérarchie des paramètres par une chaîne de méthodes fluide. Les paramètres par défaut donnent des résultats corrects dans la plupart des cas d'utilisation, et la personnalisation s'effectue directement dans le code :
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()
Pour les codes QR, l'API de génération de QR codes d'IronBarcode inclut la prise en charge des logos de marque sans composition manuelle d'image :
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 nécessite un dessin GDI+ manuel pour superposer un logo sur un code QR - en générant l'image du code-barres, puis en utilisant System.Drawing.Graphics pour composer le logo centré sur celui-ci. Le AddBrandLogo d'IronBarcode gère cela en un seul appel et définit automatiquement la correction d'erreur de manière appropriée.
Lecture de codes-barres PDF
Pour de nombreuses équipes, c'est cette comparaison qui compte le plus. La lecture des codes-barres dans les documents PDF est une opération courante : factures entrantes, étiquettes d'expédition enregistrées au format PDF, archives de documents numérisés.
Approche Aspose.BarCode
Aspose.BarCode ne prend pas en charge nativement le format PDF. Pour lire un code-barres à partir d'un PDF avec Aspose, vous avez besoin d'Aspose.PDF pour charger le PDF et convertir les pages en images, et d'Aspose.BarCode pour scanner ces images. Ce sont deux produits par abonnement. Les deux nécessitent une activation de licence. Au total, cela représente un coût annuel de 1 998 $ à 9 990 $ pour ce que la plupart des développeurs considèrent comme une fonctionnalité unique.
// 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
Il s'agit de deux configurations de licence, de deux instructions d'utilisation de deux espaces de noms, d'un pipeline de rendu, d'une gestion de flux de mémoire et d'une boucle imbriquée. Il utilise également DecodeType.AllSupportedTypes parce qu'au moment de l'extraction de l'image, vous ne connaissez généralement pas le format utilisé par le code-barres.
Approche IronBarcode
IronBarcode gère en interne l'analyse des fichiers PDF, le rendu des pages et la détection des codes-barres. Vous appelez Read avec un chemin d'accès se terminant par .pdf, et il renvoie des résultats de code-barres qui incluent result.PageNumberafin que vous sachiez de quelle page chacun provient. Pas de deuxième paquet, pas de deuxième licence, pas de code de rendu.
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
La documentation de lecture des fichiers PDF IronBarcode couvre le traitement par lots multipages et les options de filtrage par plage de pages.
Lecture de formats de codes-barres inconnus
Lorsque vous ne connaissez pas le format du code-barres contenu dans une image, les deux bibliothèques gèrent la situation de manière très différente.
Approche Aspose.BarCode
DecodeType.AllSupportedTypes est la solution d'Aspose pour les scénarios de format inconnu. La documentation d'Aspose reconnaît elle-même que cette méthode est plus lente que la spécification d'une liste ciblée, car le décodeur parcourt séquentiellement chaque symbologie connue. Pour le traitement à grand volume — un entrepôt scannant des milliers d'étiquettes par minute —, cette différence de performance n'est pas négligeable.
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
Approche IronBarcode
Il n'existe pas de " mode lent " et de " mode rapide " basés sur la connaissance du format. La détection d'IronBarcode utilise le même algorithme, que l'image contienne un Code 128 ou un DataMatrix. Si vous souhaitez faire des compromis entre performance et précision, l'option ReadingSpeed vous permet de le faire sans avoir besoin de connaître le format :
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 donne la priorité au débit. ReadingSpeed.Detailed donne la priorité à la précision sur les images endommagées ou à faible contraste. Aucun des deux ne nécessite de connaître le format à l'avance. Consultez les options de lecture IronBarcode pour connaître l'ensemble des paramètres de réglage.
Référence de mappage d'API
| Aspose.BarCode | Code-barres 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 (analyse lente et exhaustive) |
Automatique — toujours rapide, même appel pour tous les formats |
reader.ReadBarCodes() |
(part of BarcodeReader.Read — returns results directly) |
reader.FoundBarCodes |
Valeur de retour de 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") - un paquet |
license.SetLicense("Aspose.BarCode.lic") |
IronBarCode.License.LicenseKey = "key" |
new Aspose.BarCode.Metered() + .SetMeteredKey() |
(not needed — single key covers all environments) |
generator.GenerateBarCodeImage() |
.ToPngBinaryData()ou .SaveAsPng() |
QREncodeMode.Auto + QRErrorLevel.LevelH + logo manuel superposé |
QRCodeWriter.CreateQrCode().AddBrandLogo() |
Lorsque les équipes envisagent de passer d'Aspose.BarCode à IronBarcode
Plusieurs scénarios incitent fréquemment les équipes de développement à évaluer Code-barres IronBarcode comme alternative à Aspose.BarCode.
Le renouvellement de l'abonnement est arrivé
Le renouvellement annuel des abonnements est le moment où les équipes réexaminent le plus souvent les décisions relatives à la bibliothèque. Si Aspose.BarCode est le seul produit Aspose de la pile, le coût annuel de 999 $ à 4 995 $ pour la fonctionnalité de code-barres justifie une comparaison. La conversation se déroule généralement ainsi : " Nous payons cela chaque année, indéfiniment. " " Combien coûte Code-barres IronBarcode une fois installé ? " Au niveau Professional (2 999 $ pour 10 développeurs), Code-barres IronBarcode est rentabilisé dès la première année grâce à la licence Site.
Pour les équipes utilisant Aspose.Total — où Aspose.BarCode est intégré à plus de 20 autres produits — le calcul est différent. Le coût marginal d'Aspose.BarCode au sein de ce pack tend vers zéro. Ces équipes ont moins de raisons de changer.
La prise en charge des fichiers PDF devient une exigence
De nombreux projets commencent par la lecture de codes-barres à partir d'images, puis ajoutent la prise en charge des fichiers PDF ultérieurement, lorsqu'un acteur clé se rend compte que les documents entrants sont des PDF et non des fichiers image. À ce stade, une équipe Aspose.BarCode doit prendre une décision : ajouter Aspose.PDF (un autre abonnement), trouver un moteur de rendu PDF tiers ou réévaluer la bibliothèque de codes-barres.
L'ajout d'Aspose.PDF répond au besoin immédiat, mais double le coût de l'abonnement. Le recours à un moteur de rendu tiers ajoute une dépendance et un effort d'intégration. Il en résulte souvent une réévaluation de la bibliothèque de codes-barres — et la découverte Code-barres IronBarcode lit nativement les PDF moyennant un paiement unique.
Scénarios de production au format inconnu
Les applications destinées aux clients qui acceptent le téléchargement de documents ne peuvent pas contrôler le format du code-barres utilisé par un document téléchargé. Si l'application a été construite en supposant des entrées de Code 128 et qu'un client télécharge une étiquette DataMatrix, un code en dur DecodeType.Code128 renverra silencieusement aucun résultat. Le passage à DecodeType.AllSupportedTypes corrige l'erreur mais introduit un coût de performance.
Les équipes qui ont rencontré ce problème - ajouter de plus en plus de valeurs DecodeType à leur configuration de lecteur à mesure que de nouveaux formats apparaissent en production - finissent souvent par maintenir une liste qui doit être mise à jour à chaque fois qu'une nouvelle source de format est ajoutée. La détection automatique d'IronBarcode rend cette liste inutile.
Déploiements dans le cloud et les conteneurs
Le système de licences basé sur des fichiers d'Aspose.BarCode ajoute une étape de déploiement : le fichier de licence doit être accessible lors de l'exécution à partir d'un chemin que l'application peut lire. Dans un flux de travail GitOps, le fichier de licence se retrouve soit dans le contrôle de version (un risque pour la sécurité), soit doit être injecté via un volume secret monté. L'approche d'IronBarcode basée sur les clés s'intègre parfaitement aux secrets Kubernetes et aux variables secrètes CI/CD, sans aucun fichier à gérer dans l'image du conteneur.
Considérations courantes en matière de migration
Les équipes qui passent d'Aspose.BarCode à Code-barres IronBarcode doivent effectuer un petit nombre d'ajustements techniques prévisibles.
Association des noms de propriétés
L'erreur de compilation la plus courante après l'échange de paquets est le renommage de result.CodeTexten result.Value. Une recherche dans l'ensemble du code source permet de le faire rapidement :
grep -r "\.CodeText" --include="*.cs" .
grep -r "\.CodeTypeName" --include="*.cs" .
grep -r "\.CodeText" --include="*.cs" .
grep -r "\.CodeTypeName" --include="*.cs" .
result.CodeText devient result.Value. result.CodeTypeNamedevient result.Format.ToString(). La propriété result.Format est une valeur BarcodeEncoding enum, qui permet également des comparaisons typées lorsque cela est nécessaire.
Suppression du type de décodage
Chaque référence DecodeType.* dans la base de code peut être supprimée :
grep -r "DecodeType\." --include="*.cs" .
grep -r "DecodeType\." --include="*.cs" .
Si un DecodeType spécifique a été listé pour améliorer les performances sur un format connu, ReadingSpeed.Faster dans BarcodeReaderOptions fournit un avantage similaire sans exigence de connaissance du format.
Modification de l'initialisation de la licence
Aspose.BarCode utilise un fichier .lic chargé via license.SetLicense(). Code-barres IronBarcode utilise une clé de type chaîne de caractères :
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"))
Supprimez le fichier .lic du référentiel et des artefacts de construction. Dans Docker, supprimez la ligne COPY Aspose.BarCode.lic et remplacez-la par une entrée ENV IRONBARCODE_LICENSE.
Correspondance entre les types d'encodage et l'encodage des codes-barres
EncodeTypes.QR correspond à BarcodeEncoding.QRCode - la différence de dénomination est l'endroit où les équipes rencontrent le plus souvent la première erreur de compilation après avoir migré le code de génération. Tous les autres mappages sont des équivalents directs avec une dénomination cohérente.
Fonctionnalités supplémentaires IronBarcode
Au-delà des principaux points de comparaison, Code-barres IronBarcode offre des fonctionnalités qui peuvent s'avérer pertinentes selon le contexte de l'application :
- Détection de plusieurs codes-barres par image:
ExpectMultipleBarcodes = truerenvoie tous les codes-barres trouvés dans une seule image, avec les coordonnées de position pour chacun. - Intégration de codes-barres dans les PDF : Insérez directement des codes-barres dans les pages PDF existantes sans bibliothèque PDF séparée.
- Lecture TIFF multi-images : Lisez les codes-barres de toutes les images d'un fichier TIFF multipage en un seul appel.
- Codes QR stylisés : Couleur, logo et niveau de correction d'erreur, tout est défini par la chaîne fluide sans traitement d'image externe.
- Prise en charge d'Azure Functions et d'AWS Lambda : les déploiements sans serveur sont pris en charge sur les deux plateformes avec la licence standard.
- Encodage de données binaires : Encodez directement des tableaux d'octets en codes-barres Data Matrix ou PDF417 pour les cas d'utilisation de charge utile binaire.
Compatibilité .NET et préparation à l'avenir
IronBarcode prend en charge .NET Framework4.6.2+, .NET Core 3.1+ et .NET 5, 6, 7, 8 et 9. La bibliothèque bénéficie de mises à jour régulières, synchronisées avec le calendrier de publication de .NET de Microsoft, garantissant ainsi sa compatibilité avec .NET 10, attendu fin 2026. Aspose.BarCode prend également en charge cette même plage de versions de .NET ; par conséquent, aucune des deux bibliothèques ne présente d'avantage en termes de compatibilité avec les versions actuelles. La différence significative pour la préparation à l'avenir réside dans la licence : une licence Code-barres IronBarcode perpétuelle achetée aujourd'hui couvre les futures versions de .NET sans frais supplémentaires, tandis que les abonnements Aspose.BarCode nécessitent un renouvellement continu pour accéder aux versions mises à jour.
Conclusion
Aspose.BarCode et Code-barres IronBarcode représentent deux philosophies différentes en matière de conception de bibliothèques de codes-barres. Aspose.BarCode est construit sur une API explicite, basée sur des instances, où l'appelant spécifie le format, gère la durée de vie des objets et configure chaque opération via une hiérarchie de propriétés. Code-barres IronBarcode repose sur une API statique et indépendante du format, où la bibliothèque gère en interne la détection, le cycle de vie des objets et le rendu PDF. Aucune de ces approches n'est intrinsèquement correcte ; le bon choix dépend des besoins de l'application.
Aspose.BarCode est le choix le plus judicieux pour les équipes opérant déjà au sein de l'écosystème Aspose. Lorsque Aspose.Total est déjà sous licence, Aspose.BarCode n'ajoute aucun coût marginal, et sa liste de plus de 60 symboles est la plus large disponible dans n'importe quelle bibliothèque de codes-barres .NET commerciale. Pour les applications nécessitant des formats inhabituels (MaxiCode, DotCode ou symbologies postales spécifiques ne figurant pas dans la liste de plus de 50 d'IronBarcode), Aspose.BarCode peut être la seule option viable. Sa maturité et la diversité de ses formats sont de véritables atouts.
Pour les équipes qui évaluent Aspose.BarCode comme un achat indépendant, le calcul de la valeur est plus difficile à effectuer. L'exigence de spécification du format ajoute des difficultés à chaque opération de lecture. L'absence de prise en charge native du format PDF double le coût de l'abonnement pour une fonctionnalité Code-barres IronBarcode inclut dans son offre de base. Et le modèle d'abonnement signifie que le coût s'accumule chaque année — 4 995 $ par an pour une équipe de 10 développeurs atteignent 24 975 $ sur cinq ans, contre 2 999 $ pour un achat unique Code-barres IronBarcode Professional . La détection automatique, la lecture native des fichiers PDF et la licence perpétuelle d'IronBarcode résolvent ces trois problèmes en un seul produit.
La décision finale repose sur l'adéquation à l'écosystème et les exigences en matière de symbolisme. Les équipes profondément intégrées aux produits Aspose, ou celles qui ont besoin de formats ne figurant pas dans la liste prise en charge par IronBarcode, doivent utiliser Aspose.BarCode. Les équipes qui souhaitent une licence perpétuelle autonome, la lecture native des PDF et une API qui ne nécessite pas de connaissance du format à chaque lecture trouveront en Code-barres IronBarcode le choix le plus pratique.
Questions Fréquemment Posées
Qu'est-ce que Aspose.BarCode for .NET ?
Aspose.BarCode for .NET est une bibliothèque de codes-barres .NET permettant de générer et de lire des codes-barres dans des applications C#. C'est l'une des nombreuses alternatives que les développeurs évaluent lorsqu'ils choisissent une solution de code-barres pour les projets .NET.
Quelles sont les principales différences entre Aspose.BarCode for .NET et IronBarcode ?
IronBarcode utilise une API statique, sans état, qui ne nécessite aucune gestion d'instance, alors qu'Aspose.BarCode for .NET requiert généralement la création et la configuration d'une instance avant d'être utilisé. IronBarcode offre également une prise en charge native du format PDF, une détection automatique du format et une licence à clé unique pour tous les environnements.
Est-il plus facile d'obtenir une licence pour IronBarcode que pour Aspose.BarCode for .NET ?
IronBarcode utilise une clé de licence unique couvrant à la fois les déploiements de développement et de production. Cela simplifie les pipelines CI/CD et les configurations Docker par rapport aux systèmes de licence qui séparent les clés SDK des clés d'exécution.
IronBarcode prend-il en charge tous les formats de codes-barres pris en charge par Aspose.BarCode for .NET ?
IronBarcode prend en charge plus de 30 symbologies de codes-barres, notamment QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1, et bien d'autres encore. L'auto-détection du format signifie qu'aucune énumération explicite du format n'est nécessaire.
IronBarcode prend-il en charge la lecture de codes-barres PDF en mode natif ?
Oui. IronBarcode lit les codes-barres directement à partir de fichiers PDF en utilisant BarcodeReader.Read("document.pdf") sans nécessiter de bibliothèque de rendu PDF séparée. Les résultats par page comprennent le numéro de page, le format du code-barres, la valeur et le score de confiance.
Comment IronBarcode gère-t-il le traitement par lots par rapport à Aspose.BarCode for .NET ?
Les méthodes statiques d'IronBarcode sont sans état et naturellement à l'abri des threads, ce qui permet d'utiliser directement Parallel.ForEach sans gestion d'instance par thread. Il n'y a pas de plafond de débit, quel que soit le niveau de prix.
Quelles versions de .NET sont prises en charge par IronBarcode ?
IronBarcode prend en charge .NET Framework 4.6.2+, .NET Core 3.1 et .NET 5, 6, 7, 8 et 9 dans un seul package NuGet. Les plates-formes visées sont Windows x64/x86, Linux x64 et macOS x64/ARM.
Comment installer IronBarcode for .NET dans un projet .NET ?
Installez IronBarcode via NuGet : exécutez "Install-Package IronBarCode" dans la console du gestionnaire de paquets, ou "dotnet add package IronBarCode" dans le CLI. Aucun installateur SDK ou fichier d'exécution supplémentaire n'est nécessaire.
Puis-je évaluer IronBarcode avant de l'acheter, contrairement à Aspose.BarCode ?
Oui. Le mode d'essai d'IronBarcode renvoie des valeurs de code-barres décodées complètes - seules les images de sortie générées reçoivent un filigrane. Vous pouvez comparer la précision de lecture sur vos propres documents avant de vous engager dans un achat.
Quelle est la différence de prix entre Aspose.BarCode for .NET et IronBarcode ?
IronBarcode est proposé à partir de 749 dollars pour une licence perpétuelle pour un seul développeur couvrant le développement et la production. Les détails des prix et les options de volume sont disponibles sur la page de licence d'IronBarcode. Il n'est pas nécessaire de disposer d'une licence d'exécution distincte.
Est-il simple de migrer d'Aspose.BarCode for .NET vers IronBarcode ?
La migration d'Aspose.BarCode for .NET vers IronBarcode implique principalement le remplacement des appels d'API basés sur des instances par les méthodes statiques d'IronBarcode, la suppression des modèles de licence et la mise à jour des noms des propriétés des résultats. La plupart des migrations impliquent une réduction du code plutôt qu'un ajout.
IronBarcode génère-t-il des codes QR avec des logos ?
Oui. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") incorpore une image de marque dans un code QR de manière native avec une correction d'erreur configurable. Les codes QR colorés sont également pris en charge via ChangeBarCodeColor().

