مشكلة في مطابقة الرموز الشريطية Code128A التي تم إنشاؤها باستخدام iTextSharp vs.الباركود.4NET

StackOverflow https://stackoverflow.com/questions/294773

سؤال

أولاً، أنا جديد نوعًا ما على تنسيقات الباركود وما أعرفه، تعلمته من ويكيبيديا.

لدينا بعض الرموز الشريطية التي تم إنشاؤها بواسطة تطبيق موجود يستخدم مكتبة Barcode.4NET.الرمز الشريطي بتنسيق Code 128A.رمز إنشائها بسيط جدًا، ويبدو كالتالي:

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

لم يتم تعيين أي معلمات أخرى له - بعد تعيين البيانات، نحصل فقط على نسخة GIF من الباركود من المكتبة.

أنا أعمل على تطبيق جديد يستخدم iTextSharp لإنشاء ملفات PDF واعتقدت أنه بدلاً من استخدام مكتبتين، سأستخدم مكتبة إنشاء الرموز الشريطية الخاصة بـ iTextSharp لأنها تدعم الرموز الشريطية Code128.يحتوي على عدد قليل من الأشكال المختلفة للرمز 128، ولكن لا يوجد منها "الرمز 128A".

إليك ما يبدو عليه الكود الخاص به:

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

الصورة أدناه توضح أفضل ما أنجزته حتى الآن.

alt text

يتم إنشاء الصورة الموجودة في الأعلى بواسطة iTextSharp ويتم إنشاء الصورة الموجودة في الأسفل بواسطة Barcode4Net.من الواضح أنهما ليسا متماثلين (وليس فقط في الحجم والخط - فالبيانات المشفرة بالباركود مختلفة تمامًا).

هل هناك أي شخص على دراية كافية بمكونات الباركود الخاصة بـ iTextSharp (أو iText نفسه) أو بالرموز الشريطية Code 128A ليخبرني بكيفية جعل iTextSharp يبدو تمامًا مثل Barcode.4NET؟

هل كانت مفيدة؟

المحلول

هل من الضروري حقًا أن يبدوا متماثلين تمامًا؟الإصدارات المختلفة من Code 128 كلها قادرة على تشفير الأرقام، حتى لو كانت الرموز الشريطية نفسها تبدو مختلفة تمامًا؛يجب على القارئ فرز كل شيء في النهاية.

أفضّل الإصدار B، لأنه يحتوي على أحرف صغيرة بالإضافة إلى الأحرف الكبيرة.يمكنك رؤية جدول يوضح الاختلافات في http://www.barcodeisland.com/code128.phtml

يبدو أن iTextSharp يقوم بإنشاء المتغير C، وهو الأكثر إحكاما إذا كان النص يتكون من أرقام عشرية فقط.يقوم بتشفير رقمين في نفس مقدار المساحة مثل حرف واحد في الترميزات الأخرى.

نصائح أخرى

يجب أن يكون الرقم:

*045746201627080857*

تحتاج إلى إضافة العلامة النجمية إلى البداية والنهاية حتى يمكن قراءة الباركود، وتحتاج إلى التحقق من وثائق المكونات التي يحتاجها الشخص إلى هذه الأحرف.

يحتاج الماسح الضوئي إلى العلامة النجمية البادئة والزائدة على هذا النوع من BC.

لما أستطيع رؤيته في التعليمات البرمجية الخاصة بك، السطر

code128.StartStopText = true;

يضيفها تلقائيًا، حاول ضبط هذه الخاصية على false، وسينتهي بك الأمر بنفس الرمز الشريطي.في الكود الأول يجب عليك استخدامه

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

جرب بنفسك :)

تم التعديل:

الباركود الصحيح هو:

نص بديل http://www.bcgen.com/demo/linear-dbgs.aspx?D=045746201627080857&S=13&CS=1

من الرابط أدناه (باستخدام خدمة مجانية لأتمتة الهوية):

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

ما لديك هو:

نص بديل http://www.bcgen.com/demo/linear-dbgs.aspx?D=045746201627080857&S=13&CS=3

وهذا هو كود128C بدلاً من الكود128أ كما يمكنك التحقق من الرابط (لقد غيرت ملف خصائص الباركود إلى Code128C)

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

وحين اعتقد balexandre لديها مولدات اختلطت، نصيحته جيدة.

والواضح Barcode.4NET هو صحيح توليد الباركود كود 128A التي أحاول أن تحاكي.

وiTextSharp هو توليد الباركود كود 128C التي، وفقا لمارك رانسوم، ينبغي أن يكون موافق إلا للمستخدمين والعملاء من المحتمل أن ننظر في الأمر ويقول "انها قصيرة جدا، وينبغي أن تبدو وكأنها بعضها الآخر!"

وهكذا، وتقديم المشورة كبيرة، ولكن ما زلت إلى "كيف يمكنني توليد الباركود كود 128A مع iTextSharp؟"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top