2008-11-17 5 views
3

Tout d'abord, je suis un peu nouveau pour les formats de codes à barres et ce que je sais, j'ai appris de Wikipedia.Problème de correspondance Code128A Barcodes générés avec iTextSharp vs Barcode.4NET

Nous avons des codes à barres générés par une application existante qui utilise la bibliothèque Barcode.4NET. Le code à barres est au format Code 128A. Le code pour générer eux est assez simple, en regardant quelque chose comme ceci:

// Create the barcode 
Code128ABarcode c128A = new Code128ABarcode("045746201627080857"); 

Aucun autre paramètres sont définis pour elle - après avoir réglé les données, nous obtenons juste une version GIF du code à barres arrière de la bibliothèque. Je travaille sur une nouvelle application qui utilise iTextSharp pour la génération de PDF et j'ai pensé qu'au lieu d'utiliser deux bibliothèques, j'utiliserais la bibliothèque de génération de codes à barres d'iTextSharp car elle supporte les codes à barres Code128. Il a quelques variations différentes du code 128, mais aucun d'entre eux sont "Code 128A".

Voici ce que le code ressemble pour elle:

Barcode128 code128 = new Barcode128(); 
code128.CodeType = Barcode.CODE128; 
code128.ChecksumText = true; 
code128.GenerateChecksum = true; 
code128.StartStopText = true; 
code128.Code = "045746201627080857"; 

L'image ci-dessous montre le mieux que je l'ai accompli jusqu'à présent.

alt text

L'image sur le dessus est généré par iTextSharp et l'une sur la partie inférieure est générée par Barcode4Net. De toute évidence, ils ne sont pas les mêmes (et pas seulement dans la taille et la police - les données à code-barres sont assez différentes).

Est-ce que quelqu'un est assez familier avec les composants de codes à barres d'iTextSharp (ou iText lui-même) ou avec les codes à barres Code 128A pour me dire comment rendre l'iTextSharp exactement comme le Barcode.4NET?

Répondre

3

Est-il vraiment nécessaire qu'ils aient exactement la même apparence? Les différentes versions du code 128 sont toutes capables d'encoder des nombres, même si les codes à barres eux-mêmes ont l'air complètement différents; le lecteur devrait tout trier à la fin.

Je préfère la variante B, car elle a les lettres minuscules en plus de la majuscule. Vous pouvez voir un tableau détaillant les différences à http://www.barcodeisland.com/code128.phtml

iTextSharp semble générer la variante C, qui est la plus compacte si le texte est seulement des chiffres décimaux. Il code 2 chiffres dans la même quantité d'espace qu'un seul caractère dans les autres encodages.

+0

Bien que ce ne soit pas exactement la réponse que je cherchais, je lui donnerai le signe de tête. Mon client a dit que tant qu'un scanner standard pouvait lire l'un ou l'autre, nous étions OK et maintenant je sais lequel est qui. – CMPalmer

3

le nombre devrait être:

*045746201627080857* 

vous devez ajouter l'astérisque au début et à la fin de sorte que le code-barres peut être readed, vous devez vérifier dans la sorcière de la documentation des composants il faut ces caractères.

le scanner a besoin de l'astérisque de début et de fin sur ce type de BC.

pour ce que je peux voir dans votre code, la ligne

code128.StartStopText = true; 

ajoute automatiquement, essayez de définir cette propriété sur false, vous finirez avec le même code à barres.Dans le premier code, vous devez utiliser

Code128ABarcode c128A = new Code128ABarcode("*045746201627080857*"); 

vous essayer :)

Modifié:

Le code-barres est correct:

alt text http://www.bcgen.com/demo/linear-dbgs.aspx?D=045746201627080857&S=13&CS=1

à partir du lien ci-dessous (en utilisant ID Automation free service):

http://www.bcgen.com/demo/linear-dbgs.aspx?D=045746201627080857&S=13&CS=1 

ce que vous avez est:

alt text http://www.bcgen.com/demo/linear-dbgs.aspx?D=045746201627080857&S=13&CS=3

et c'est Code128C au lieu de Code128A que vous pouvez vérifier le lien (j'ai changé le barcode properties à Code128C)

http://www.bcgen.com/demo/linear-dbgs.aspx?D=045746201627080857&S=13&CS=3

+0

La ligne Code128ABarcode est celle qui est apparemment * correcte * (c'est celle que j'essaie de faire correspondre). Toute combinaison d'astérisques et de modification de StartStopText que j'ai essayée ne correspond toujours pas. – CMPalmer

+0

Je viens d'éditer et ajouté le bon code. La bibliothèque Barcode.4NET vous donne Code128C à la place Code128A. – balexandre

+0

Les astérisques ne sont requis que pour le code 3 de 9, PAS le code 128. –

1

Alors que je pense que balexandre a les générateurs mélangés, ses conseils sont bons.

Evidemment Barcode.4NET génère correctement le code à barres Code 128A que j'essaie d'émuler. ITextSharp génère un code à barres Code 128C qui, selon Mark Ransom, devrait être OK, sauf pour les utilisateurs et le client va probablement le regarder et dire "Il est trop court et devrait ressembler aux autres!"

Donc, un excellent conseil, mais je suis encore de retour à "Comment puis-je générer un code à barres Code 128A avec iTextSharp?"

+0

Le lecteur de codes-barres lira les deux, si vous l'avez configuré, par défaut, les périphériques Datalogic et Symbol lisent Code128 A à C sans paramètres spécifiques. – balexandre

+0

Merci. Je vérifie avec notre client pour voir si elles me dérange de passer aux codes à barres 128C. – CMPalmer