יצירת ברקודים וקודי QR בג'אווה

1. סקירה כללית

ברקודים משמשים להעברת מידע באופן חזותי. סביר להניח שנספק תמונת ברקוד מתאימה בדף אינטרנט, דוא"ל או מסמך להדפסה.

במדריך זה נבדוק כיצד ליצור את סוגי הברקודים הנפוצים ביותר ב- Java.

ראשית, נלמד על הפנימיות של כמה סוגים של ברקודים. לאחר מכן, נחקור את ספריות Java הפופולריות ביותר ליצירת ברקודים. לבסוף נראה כיצד ניתן לשלב ברקודים ביישום שלנו על ידי הגשתם משירות אינטרנט באמצעות Spring Boot.

2. סוגי ברקודים

ברקודים מקודדים מידע כגון מספרי מוצרים, מספרים סידוריים ומספרי אצווה. כמו כן, הם מאפשרים לצדדים כמו קמעונאים, יצרנים וספקי תחבורה לעקוב אחר נכסים בכל שרשרת האספקה.

אנו יכולים לקבץ את סימבולוגיות הברקוד הרבות והשונות לשתי קטגוריות עיקריות:

  • ברקודים ליניאריים
  • ברקודים דו-ממדיים

2.1. קודי UPC (קוד מוצר אוניברסלי)

קודי UPC הם חלק מברקודי 1D הנפוצים ביותר, ואנחנו מוצאים אותם בעיקר בארצות הברית.

UPC-A הוא קוד מספרי בלבד המכיל 12 ספרות: מספר זיהוי יצרן (6 ספרות), מספר פריט (5 ספרות), וספרת בדיקה. יש גם קוד UPC-E שמונה 8 ספרות בלבד ומשמש לחבילות קטנות.

2.2. קודי EAN

קודי EAN ידועים ברחבי העולם הן מספר המאמר האירופי והן מספר המאמר הבינלאומי. הם מיועדים לסריקת נקודת מכירה. ישנן גם מספר וריאציות שונות של קוד EAN, כולל EAN-13, EAN-8, JAN-13 ו- ISBN.

קוד EAN-13 הוא תקן ה- EAN הנפוץ ביותר והוא דומה לקוד UPC. הוא עשוי מ- 13 ספרות - "0" מוביל ואחריו קוד UPC-A.

2.3. קוד 128

ברקוד קוד 128 הוא קוד ליניארי קומפקטי בצפיפות גבוהה משמש בתעשיות הלוגיסטיקה והתחבורה להזמנה והפצה. הוא יכול לקודד את כל 128 התווים של ASCII, ואורכו משתנה.

2.4. PDF417

PDF417 הוא ברקוד ליניארי מוערם המורכב ממספר ברקודים חד-ממדיים מוערמים זה על גבי זה. לפיכך, הוא יכול להשתמש בסורק לינארי מסורתי.

אנו עשויים לצפות למצוא אותו במגוון יישומים כגון נסיעות (כרטיסי עלייה למטוס), תעודות זהות וניהול מלאי.

PDF417 משתמש בתיקון שגיאות ריד-סולומון במקום ספרות צ'ק. תיקון שגיאות זה מאפשר לסמל לסבול נזק כלשהו מבלי לגרום לאובדן נתונים. עם זאת, הוא יכול להתרחב בגודלו - גדול פי 4 מברקודים דו-ממדיים אחרים כגון Datamatrix ו- QR Codes.

2.5. קודי QR

קודי QR הופכים לברקודי 2D המוכרים ביותר בעולם. היתרון הגדול של קוד ה- QR הוא בכך אנו יכולים לאחסן כמויות גדולות של נתונים במקום מוגבל.

הם משתמשים בארבעה מצבי קידוד סטנדרטיים לאחסון נתונים ביעילות:

  • מספרי
  • אותיות ומספרים
  • בתים / בינאריים
  • קאנג'י

יתר על כן, הם גמישים בגודלם ונסרקים בקלות באמצעות טלפון חכם. בדומה ל- PDF417, קוד QR יכול לעמוד בפני נזק כלשהו מבלי לגרום לאובדן נתונים.

3. ספריות ברקוד

אנו הולכים לחקור כמה ספריות:

  • על האש
  • ברקוד 4j
  • ZXing
  • QRGen

על האש היא ספריית Java עם קוד פתוח התומכת במערך נרחב של פורמטים ברקוד 1D. כמו כן, ניתן להפיק את הברקודים ל- PNG, GIF, JPEG ו- SVG.

ברקוד 4j היא גם ספריית קוד פתוח. בנוסף, הוא מציע פורמטים של ברקוד דו-ממדי - כמו DataMatrix ו- PDF417 - ופורמטי פלט נוספים. פורמט PDF417 זמין בשתי הספריות. אבל, בניגוד ל- Barcode4j, ברביקיו רואה בו ברקוד ליניארי.

ZXing ("מעבר זברה") היא קוד פתוח וספריית עיבוד תמונות ברקוד 1D / 2D בעלת מספר רב של פורמטים המיושמת בג'אווה, עם יציאות לשפות אחרות. זה הספרייה הראשית התומכת בקודי QR בג'אווה.

QRGen הספרייה מציעה ממשק API פשוט של QRCode הבנוי על גבי ZXing. הוא מספק מודולים נפרדים עבור Java ו- Android.

4. יצירת ברקודים לינאריים

בואו ניצור מחולל תמונות ברקוד לכל ספרייה וזוג ברקודים. אנו נאחזר את התמונה בפורמט PNG, אך נוכל גם להשתמש בפורמטים אחרים כמו GIF או JPEG.

4.1. שימוש בספריית הברביקיו

כפי שנראה, ברביקיו מספק את ה- API הפשוט ביותר ליצירת ברקודים. עלינו לספק רק את טקסט הברקוד כקלט מינימלי. אך באפשרותנו להגדיר גופן ורזולוציה (נקודות לאינץ '). לגבי הגופן, נוכל להשתמש בו להצגת טקסט הברקוד מתחת לתמונה.

ראשית, עלינו להוסיף את התלות בברביקיו Maven:

 net.sourceforge.barbecue barbecue 1.5-beta1 

בואו ניצור גנרטור עבור ברקוד EAN13:

סטטי ציבורי BufferedImage createEAN13BarcodeImage (מחרוזת ברקוד טקסט) זורק חריג {ברקוד ברקוד = BarcodeFactory.createEAN13 (ברקוד טקסט); barcode.setFont (BARCODE_TEXT_FONT); להחזיר BarcodeImageHandler.getImage (ברקוד); }

אנו יכולים ליצור תמונות עבור שאר סוגי הברקודים הליניאריים באופן דומה.

עלינו לציין כי איננו צריכים לספק את ספרת בדיקת הבדיקה עבור ברקודי EAN / UPC, מכיוון שהיא מוסיפה אוטומטית על ידי הספרייה.

4.2. שימוש בספריית Barcode4j

נתחיל בהוספת תלות Barcode4j Maven:

 net.sf.barcode4j ברקוד 4j 2.1 

כמו כן, בואו נבנה גנרטור עבור ברקוד EAN13:

סטטי ציבורי BufferedImage createEAN13BarcodeImage (מחרוזת ברקוד טקסט) {EAN13Bean barcodeGenerator = חדש EAN13Bean (); בד BitmapCanvasProvider = BitmapCanvasProvider חדש (160, BufferedImage.TYPE_BYTE_BINARY, false, 0); barcodeGenerator.generateBarcode (בד, ברקוד טקסט); החזר canvas.getBufferedImage (); }

ה BitmapCanvasProvider בנאי לוקח מספר פרמטרים: רזולוציה, סוג תמונה, האם לאפשר כיוון נגד כינויים, וכיוון התמונה. כמו כן, איננו צריכים להגדיר גופן כי הטקסט שמתחת לתמונה מוצג כברירת מחדל.

4.3. באמצעות ספריית ZXing

כאן עלינו להוסיף שתי תלות של Maven: ספריית תמונות הליבה ולקוח Java:

 com.google.zxing core 3.3.0 com.google.zxing javase 3.3.0 

בואו ניצור מחולל EAN13:

סטטי ציבורי BufferedImage createEAN13BarcodeImage (מחרוזת ברקוד טקסט) זורק חריג {EAN13Writer barcodeWriter = EAN13Writer חדש (); BitMatrix bitMatrix = barcodeWriter.encode (barcodeText, BarcodeFormat.EAN_13, 300, 150); להחזיר MatrixToImageWriter.toBufferedImage (bitMatrix); }

כאן עלינו לספק מספר פרמטרים כקלט, כגון טקסט ברקוד, פורמט ברקוד ומידות ברקוד. בניגוד לשתי הספריות האחרות, עלינו להוסיף גם את ספרת בדיקת הבדיקה עבור ברקודי EAN. אבל עבור ברקודים של UPC-A, בדיקת הבדיקה היא אופציונלית.

יתר על כן, ספרייה זו לא תציג טקסט ברקוד מתחת לתמונה.

5. יצירת ברקודים דו-ממדיים

5.1. באמצעות ספריית ZXing

אנו נשתמש בספרייה זו כדי ליצור קוד QR. ה- API דומה לזה של הברקודים הליניאריים:

סטטי ציבורי BufferedImage createQRCodeImage (מחרוזת ברקוד טקסט) זורק חריג {QRCodeWriter barcodeWriter = QRCodeWriter חדש (); BitMatrix bitMatrix = barcodeWriter.encode (barcodeText, BarcodeFormat.QR_CODE, 200, 200); להחזיר MatrixToImageWriter.toBufferedImage (bitMatrix); }

5.2. באמצעות ספריית QRGen

הספרייה כבר לא נפרסת למייבון סנטרל, אך אנו יכולים למצוא אותה באתר jitpack.io.

ראשית, עלינו להוסיף את מאגר ה- jitpack ואת תלות ה- QRGen ל- pom.xml שלנו:

  jitpack.io //jitpack.io com.github.kenglxn.qrgen javase 2.6.0 

בואו ניצור שיטה שיוצרת קוד QR:

סטטי ציבורי BufferedImage createQRCodeImage (מחרוזת ברקוד טקסט) זורק חריג {ByteArrayOutputStream stream = QRCode .from (barcodeText) .withSize (250, 250) .stream (); ByteArrayInputStream bis = ByteArrayInputStream חדש (stream.toByteArray ()); להחזיר ImageIO.read (bis); }

כפי שאנו רואים, ה- API מבוסס על דפוס Builder והוא מספק שני סוגים של פלט: קוֹבֶץ ו OutputStream. אנחנו יכולים להשתמש ב- ImageIO הספרייה להמיר אותו ל- BufferedImage.

6. בניית שירות REST

כעת יש לנו אפשרות לבחור את ספריית הברקודים, בואו נבדוק כיצד להגיש ברקודים משירות אינטרנט של Spring Boot.

נתחיל עם RestController:

@RestController @RequestMapping ("/ barcodes") ברקודים ציבוריים בכיתה ציבורית {@GetMapping (value = "/ barbecue / ean13 / {barcode}", מייצר = MediaType.IMAGE_PNG_VALUE) מענה מנגל ציבורי ENAN13 ברקוד (@PathVariable ("ברקוד") ברקוד מחרוזת זורק Exception {return okResponse (BarbecueBarcodeGenerator.generateEAN13BarcodeImage (barcode)); } // ...}

כמו כן, עלינו לבצע ידנית לרשום ממיר הודעות לתגובות HTTP של BufferedImage כי אין ברירת מחדל:

@Bean ציבורי HttpMessageConverter createImageHttpMessageConverter () {להחזיר BufferedImageHttpMessageConverter חדש (); }

לבסוף, אנו יכולים להשתמש בדוור או בדפדפן כדי להציג את הברקודים שנוצרו.

6.1. יצירת ברקוד UPC-A

בואו להתקשר לשירות האינטרנט UPC-A באמצעות ספריית הברביקיו:

[GET] // localhost: 8080 / barcodes / barbecue / upca / 12345678901

הנה התוצאה:

6.2. יצירת ברקוד EAN13

באופן דומה אנו נתקשר לשירות האינטרנט EAN13:

[GET] // localhost: 8080 / barcodes / barbecue / ean13 / 012345678901

והנה הברקוד שלנו:

6.3. יצירת קוד קוד 128

במקרה זה נשתמש בשיטת POST. בואו להתקשר לשירות האינטרנט Code128 באמצעות ספריית ברביקיו:

[POST] // localhost: 8080 / ברקודים / ברביקיו / code128

אנו נספק את גוף הבקשה המכיל את הנתונים:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod temporid incididunt to labore et dolore magna aliqua.

בואו נראה את התוצאה:

6.4. יצירת ברקוד PDF417

כאן נתקשר לשירות האינטרנט PDF417, הדומה לקוד 128:

[POST] // localhost: 8080 / ברקודים / ברביקיו / pdf417

אנו נספק את גוף הבקשה המכיל את הנתונים:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod temporid incididunt to labore et dolore magna aliqua.

והנה הברקוד שנוצר:

6.5. יצירת ברקוד QR קוד

בואו להתקשר לשירות האינטרנט QR Code באמצעות ספריית ZXing:

[POST] // localhost: 8080 / ברקודים / zxing / qrcode

אנו נספק את גוף הבקשה המכיל את הנתונים:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod temporid incididunt to labore et dolore magna aliqua. ללא שם: עד מינימום ויניאם, אימון תרגיל נוסטרוד ullamco laboris nisi ut aliquip ex ea commodo consequat.

הנה קוד ה- QR שלנו:

כאן אנו יכולים לראות את העוצמה של קודי QR לאחסן כמויות גדולות של נתונים במרחב מוגבל.

7. מסקנה

במאמר זה למדנו כיצד ליצור את סוגי הברקודים הנפוצים ביותר ב- Java.

ראשית, למדנו את הפורמטים של מספר סוגים של ברקודים ליניאריים ו- 2D. לאחר מכן בחנו את ספריות הג'אווה הפופולריות ביותר ליצירתן. למרות שניסינו כמה דוגמאות פשוטות, אנו יכולים ללמוד את הספריות עוד ליישומים מותאמים אישית יותר.

לבסוף ראינו כיצד ניתן לשלב את מחוללי הברקודים בשירות REST וכיצד לבדוק אותם.

כמו תמיד, קוד הדוגמה ממדריך זה זמין ב- GitHub.