เขียน Spring Boot แสดง Barcodes

Phai Panda
4 min readMar 8, 2020

--

บทความนี้เขียนเพื่อศึกษา source code เดิมที่มีอยู่ในโปรเจกต์ เรามีวิธีการใดบ้างที่จะแสดง Barcode ในรูปแบบต่างๆโดยใช้ Spring Boot อ่อ ขอเป็น Kotlin นะครับ

Barcode เป็นเพียงรูปแบบการสื่อสารข้อมูลลักษณะหนึ่ง เน้นไปที่การปรากฏต่อสายตา (การสื่อสารที่สามารถมองเห็นได้) อาจส่งผ่านทางจดหมายอิเล็กทรอนิกส์ (email) เว็บไซต์หรือสื่อสิ่งพิมพ์ก็ได้ (printable document) (อ่านเพิ่มเติม)

https://www.silverfox.co.uk/qr-code-vs-barcode/

เพราะผมทำงานใช้ภาษาจาวาเป็นหลัก (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

select maven project

มันเป็นขั้นตอนเหมือนเราใช้ Spring Initializr บนเว็บนั่นแหละ

  • จากนั้นเลือกภาษา Kotlin
  • จากนั้นตั้งชื่อกลุ่ม (Group name) ผมตั้งเป็น com.pros
ตั้งชื่อกลุ่มหรือชื่อบริษัทของเรา
  • จากนั้นตั้งชื่อโปรเจกต์ ผมตั้งเป็น barcode
ตั้งชื่อโปรเจกต์
  • จากนั้นเลือกเวอร์ชันของ Maven ผมเลือก 2.2.5
  • จากนั้นเลือก spring boot starter พิมพ์ไปว่า spring web แล้วเลือก Spring Web
select web starter
  • เพิ่ม Spring Boot DevTools เข้าไปด้วย
also select dev tools starter
  • พอแล้วก็กด enter จากนั้นเลือก location ที่จะให้สร้างโปรเจกต์นี้บนเครื่อง

ผมเลือกเป็น /Users/pros/works/spring

กดปุ่ม Generate into this folder แล้วเปิดโปรเจกต์ขึ้นมา

ลองสังเกตุที่มุมซ้ายล่าง (หรือแล้วแต่เวอร์ชันของ VS Code) มันจะบอกว่ากำลังทำอะไร

wait for download and init all dependencies

สามารถเปิด terminal ภายใน VS Code ขึ้นมาชมได้ คีย์ลัด command + j

vs code terminal for see the progress

เมื่อกระบวนการข้างต้นแล้วเสร็จ เราทราบว่า main program อยู่ตรงนี้

DemoApplication.kt

อยากให้ใช้ Git

ก่อนจะไปต่อผมอยากให้ใช้ Git เป็น version control system ใครยังไม่รู้จักสามารถอ่านได้จากบทความเหล่านี้

หรือจากเว็บไซต์โดยตรงของมัน

เริ่มจากใช้ terminal ที่อยู่ ณ root project ครับ พิมพ์ไปว่า

git init

VS Code จะทราบว่าเราใช้ Git มันจะสร้างไฟล์ที่จำเป็นให้ รวมถึงไฟล์ .gitignore (ไฟล์นี้จะบอกกับ Git ว่าไม่ต้องสนใจไฟล์ใดบ้าง)

ทดลองพิมพ์

git status

ผล

git status

จากนั้น commit

git add .git commit -m "init project"

เอาล่ะ มารันเจ้านี่กันดีกว่าครับ (อ้างอิง)

mvn spring-boot:run

ผล

mvn spring-boot:run

ประเภทของ Barcoces

ตัว barcode เป็นสื่อที่ถูก encode (เข้ารหัส) โดยทั่วไปเกี่ยวข้องกับ 3 อย่างนี้

  1. product numbers
  2. serial numbers
  3. batch numbers

ใช้ในร้านค้าปลีก โรงงาน บริการขนส่งเพื่อติดตามสินค้า เป็นต้น

แบ่งตามสัญลักษณ์ได้ 2 กลุ่ม

  1. linear barcodes
  2. 2D barcodes

มีอะไรบ้าง มาดูกันครับ

Universal Product Code (UPC)

Universal Product Code

ลักษณ์เป็น 1D ใช้มากในสหรัฐอเมริกา ประกอบด้วย 12 ตัวเลข

  • ใช้ 6 ตัวเลขเป็น manufacturer identification number
  • ใช้ 5 ตัวเลขเป็น item number
  • ใช้ 1 ตัวเลขเป็น check digit

นอกจากนี้ยังมี UPC-E code ที่ใช้เพียง 8 ตัวเลข เหล่านี้ใช้ได้กับสินค้าที่มีจำนวนไม่มากนัก (อ่านเพิ่มเติม)

European Article Number (EAN Code)

European Article Number

ถูกสร้างมาเพื่อ Point-of-Sale scanning มีความแตกต่างกันที่จำนวนตัวเลข ได้แก่ EAN-13, EAN-8, JAN-13 และ ISBN (อ่านเพิ่มเติม)

Code 128

Code 128

ตามชื่อเลยครับ 128 characters ใช้ในเรื่องโลจิสติกและอุตสาหกรรมการขนส่งสำหรับการสั่งซื้อและกระจายสินค้า โดย 128 characters นี้เป็น ASCII (อ่านเพิ่มเติม)

PDF 417

PDF 417

ออกแบบให้เป็น stacked linear barcode ประกอบด้วย 1D barcodes นำมาซ้อนกัน สามารถสแกนด้วยเครื่องสแกนแบบเชิงเส้น ใช้กับ

  • บัตร travel boarding passes
  • identification cards
  • inventory management

(อ่านเพิ่มเติม)

QR Code

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 ชนิดต่างๆได้ดังนี้

BarcodeFactory of Barbecue library

หยิบมาสักอย่างครับ ลองสร้าง EAN-13 barcode แล้วกัน

สร้าง package ขึ้นมาชื่อ controller

สร้างไฟล์ BarbecueController.kt ไว้ภายใน controller package

โครงสร้างโปรเจกต์

เรียกใช้งานโดยส่งตัวเลขสมมติจำนวน 12 ตัวเลขเป็น input

http://localhost:8080/barbecue/ean13/012345678912

ผล

barbecue generate ean13 barcode format with bug!

ดึกแล้ว ไว้มาเขียนเพิ่มให้นะครับ

อ้างอิง

https://www.baeldung.com/java-generating-barcodes-qr-codes

--

--

No responses yet