เขียน Spring Boot แสดง Barcodes
บทความนี้เขียนเพื่อศึกษา source code เดิมที่มีอยู่ในโปรเจกต์ เรามีวิธีการใดบ้างที่จะแสดง Barcode ในรูปแบบต่างๆโดยใช้ Spring Boot อ่อ ขอเป็น Kotlin นะครับ
Barcode เป็นเพียงรูปแบบการสื่อสารข้อมูลลักษณะหนึ่ง เน้นไปที่การปรากฏต่อสายตา (การสื่อสารที่สามารถมองเห็นได้) อาจส่งผ่านทางจดหมายอิเล็กทรอนิกส์ (email) เว็บไซต์หรือสื่อสิ่งพิมพ์ก็ได้ (printable document) (อ่านเพิ่มเติม)
เพราะผมทำงานใช้ภาษาจาวาเป็นหลัก (Java Developer) จริงๆก็ไม่แน่ใจว่ามี Barcode ประเภทใดบ้างที่ไลบรารี (.jar) ให้การสนับสนุน
เราจะมาเรียนรู้ Barcode ประเภทต่างๆก่อน (เท่าที่ผมหาความรู้มาได้) แล้วค่อยหยิบใช้ไลบรารีที่น่าสนใจ (ซึ่งส่วนใหญ่เขียนด้วยภาษาจาวา) มาลองทำเป็น RESTful API ซึ่งเขียนด้วยภาษา Kotlin โดย Sprint Boot ครับ
อ่อ เพื่อนๆอาจอยากถามว่าทำไมไม่เขียนด้วยภาษาจาวาไปเลยล่ะ?
ตอบ ผมอยากท้าทายตนเอง และผมก็ชอบ Kotlin ครับ
เป้าหมาย
บลาๆๆ
เตรียมความพร้อม
ภาษาที่ใช้พัฒนา
- Kotlin ศึกษาพื้นฐานได้ที่นี่
เครื่องมือที่ใช้พัฒนา
- JVM เวอร์ชัน 1.8 เป็นโปรแกรมรัน Bytecode ซึ่งผมติดตั้งผ่าน JDK เวอร์ชัน 1.8
- Kotlin Compiler ตัวแปลภาษา Kotlin เป็น Bytecode (ตัวอย่างการติดตั้ง)
- Maven เป็น build tool หรือตัวจัดการโครงสร้างโปรเจกต์และไลบรารีต่างๆ
- Visual Studio Code (VS Code) หรือ IntelliJ IDEA เป็น Editor
- Spring Boot Extension Pack for VS Code ทำให้ Editor เข้าใจ Spring Boot
- Spring Initializr Java Support (extension) for VS Code สามารถสร้างโปรเจกต์จาก Spring Initializr เหมือนบนเว็บได้จาก Editor เลย
- Kotlin (extension) for VS Code
- Git ใช้เป็น version control system ง่ายๆว่าเป็นตัวบันทึกการเปลี่ยนแปลงที่เกิดขึ้น
พัฒนา
เริ่มจากสร้างโปรเจกต์ เปิด VS Code ขึ้นมาจากนั้นกด command + p (ผมใช้ Mac ใครที่ใช้ Windows ลองหา shortcut key เอานะครับ)
พิพม์ไปว่า >spring init
ประมาณนี้แล้วเลือก Generate a Maven Project
มันเป็นขั้นตอนเหมือนเราใช้ Spring Initializr บนเว็บนั่นแหละ
- จากนั้นเลือกภาษา Kotlin
- จากนั้นตั้งชื่อกลุ่ม (Group name) ผมตั้งเป็น com.pros
- จากนั้นตั้งชื่อโปรเจกต์ ผมตั้งเป็น barcode
- จากนั้นเลือกเวอร์ชันของ Maven ผมเลือก 2.2.5
- จากนั้นเลือก spring boot starter พิมพ์ไปว่า spring web แล้วเลือก Spring Web
- เพิ่ม Spring Boot DevTools เข้าไปด้วย
- พอแล้วก็กด enter จากนั้นเลือก location ที่จะให้สร้างโปรเจกต์นี้บนเครื่อง
ผมเลือกเป็น /Users/pros/works/spring
กดปุ่ม Generate into this folder แล้วเปิดโปรเจกต์ขึ้นมา
ลองสังเกตุที่มุมซ้ายล่าง (หรือแล้วแต่เวอร์ชันของ VS Code) มันจะบอกว่ากำลังทำอะไร
สามารถเปิด terminal ภายใน VS Code ขึ้นมาชมได้ คีย์ลัด command + j
เมื่อกระบวนการข้างต้นแล้วเสร็จ เราทราบว่า main program อยู่ตรงนี้
อยากให้ใช้ Git
ก่อนจะไปต่อผมอยากให้ใช้ Git เป็น version control system ใครยังไม่รู้จักสามารถอ่านได้จากบทความเหล่านี้
หรือจากเว็บไซต์โดยตรงของมัน
เริ่มจากใช้ terminal ที่อยู่ ณ root project ครับ พิมพ์ไปว่า
git init
VS Code จะทราบว่าเราใช้ Git มันจะสร้างไฟล์ที่จำเป็นให้ รวมถึงไฟล์ .gitignore (ไฟล์นี้จะบอกกับ Git ว่าไม่ต้องสนใจไฟล์ใดบ้าง)
ทดลองพิมพ์
git status
ผล
จากนั้น commit
git add .git commit -m "init project"
เอาล่ะ มารันเจ้านี่กันดีกว่าครับ (อ้างอิง)
mvn spring-boot:run
ผล
ประเภทของ Barcoces
ตัว barcode เป็นสื่อที่ถูก encode (เข้ารหัส) โดยทั่วไปเกี่ยวข้องกับ 3 อย่างนี้
- product numbers
- serial numbers
- batch numbers
ใช้ในร้านค้าปลีก โรงงาน บริการขนส่งเพื่อติดตามสินค้า เป็นต้น
แบ่งตามสัญลักษณ์ได้ 2 กลุ่ม
- linear barcodes
- 2D barcodes
มีอะไรบ้าง มาดูกันครับ
Universal Product Code (UPC)
ลักษณ์เป็น 1D ใช้มากในสหรัฐอเมริกา ประกอบด้วย 12 ตัวเลข
- ใช้ 6 ตัวเลขเป็น manufacturer identification number
- ใช้ 5 ตัวเลขเป็น item number
- ใช้ 1 ตัวเลขเป็น check digit
นอกจากนี้ยังมี UPC-E code ที่ใช้เพียง 8 ตัวเลข เหล่านี้ใช้ได้กับสินค้าที่มีจำนวนไม่มากนัก (อ่านเพิ่มเติม)
European Article Number (EAN Code)
ถูกสร้างมาเพื่อ Point-of-Sale scanning มีความแตกต่างกันที่จำนวนตัวเลข ได้แก่ EAN-13, EAN-8, JAN-13 และ ISBN (อ่านเพิ่มเติม)
Code 128
ตามชื่อเลยครับ 128 characters ใช้ในเรื่องโลจิสติกและอุตสาหกรรมการขนส่งสำหรับการสั่งซื้อและกระจายสินค้า โดย 128 characters นี้เป็น ASCII (อ่านเพิ่มเติม)
PDF 417
ออกแบบให้เป็น stacked linear barcode ประกอบด้วย 1D barcodes นำมาซ้อนกัน สามารถสแกนด้วยเครื่องสแกนแบบเชิงเส้น ใช้กับ
- บัตร travel boarding passes
- identification cards
- inventory management
QR Code
เป็น 2D barcodes ที่ถูกใช้อย่างกว้างขวางทั่วโลก หัวใจคือสามารถบรรจุจำนวนข้อมูลขนาดใหญ่ได้ในพื้นที่จำกัด สร้างขึ้นด้วยมาตราฐานที่เรียกว่า encoding modes ประกอบด้วย
- numeric
- alphanumeric
- byte/binary
- kanji
ยิ่งไปกว่านั้นมันยังมีความยืนหยุ่นสูงสามารถสแกนได้ด้วยสมาร์ทโพน คล้ายกับ PDF 417 มันทนต่อความเสียหายโดยไม่ทำให้ข้อมูลสูญหาย (อ่านเพิ่มเติม)
Barcode Libraries
มีไลบรารีจำนวนไม่น้อยสามารถช่วยเราสร้าง barcode ได้ แต่ขอยกมาเพียงเท่านี้
โดยทั่วไปแล้ว libraries ข้างต้นรองรับ PNG, GIF, JPEG และ SVG
Barbecue
เป็น open-source Java library ใช้สำหรับสร้าง 1D barcode
เริ่มจากบอก pom.xml ให้นำเข้ามาจาก Maven Repository
<dependency> <groupId>net.sourceforge.barbecue</groupId> <artifactId>barbecue</artifactId> <version>1.5-beta1</version></dependency>
เวอร์ชันทดลองอาจมี bug นะ
เราจะเรียกใช้คลาส BarcodeFactory ซึ่งเป็น facotory สามารถผลิต barcode ชนิดต่างๆได้ดังนี้
หยิบมาสักอย่างครับ ลองสร้าง EAN-13 barcode แล้วกัน
สร้าง package ขึ้นมาชื่อ controller
สร้างไฟล์ BarbecueController.kt ไว้ภายใน controller package
เรียกใช้งานโดยส่งตัวเลขสมมติจำนวน 12 ตัวเลขเป็น input
http://localhost:8080/barbecue/ean13/012345678912
ผล
ดึกแล้ว ไว้มาเขียนเพิ่มให้นะครับ
อ้างอิง
https://www.baeldung.com/java-generating-barcodes-qr-codes