Generowanie kodów QR w aplikacji Java

W ramach przygotowań do firmowego hackatonu sprawdziłem jak w programie Java wygenerować kod QR, czyli obrazek z zakodowaną informacją, np. adresem strony WWW.

Skanowanie kodu QR

Skanowanie kodu QR

Pierwszy strzał do Google okazał się chybiony, ponieważ w internecie jest bardzo dużo usług w postaci stron WWW, które generują takie kody na podstawie informacji z formularza. Mi natomiast zależało na samej bibliotece, np. po to żeby samemu taką usługę stworzyć… Pomocna okazała się wskazówka admina z firmy żeby użyć biblioteki zxing. Niestety na stronie github nie ma dokumentacji innej niż mało przyjazne javadoce ale szybko znalazłem w internecie proste tutoriale jak tego użyć. I okazało się banalne…

Użycie biblioteki we własnym projekcie wymaga dodania dwóch zależności:

<dependency>
	<groupId>com.google.zxing</groupId>
	<artifactId>core</artifactId>
	<version>3.1.0</version>
</dependency>
<dependency>
	<groupId>com.google.zxing</groupId>
	<artifactId>javase</artifactId>
	<version>3.1.0</version>
</dependency>

Generowanie kodu QR w postaci pliku PDF okazało się proste:

BitMatrix byteMatrix = new QRCodeWriter().encode(
    "http://mberkan.pl/", BarcodeFormat.QR_CODE, 300, 300);
MatrixToImageWriter.writeToStream(byteMatrix, "png", 
    new FileOutputStream("/tmp/qr_code.png"));

Jako argumenty podajemy:

  • „http://mberkan.pl/” – informacje do zakodowania, tutaj adres strony WWW,
  • QR_CODE – typ wygenerowanego kodu, tutaj kod QR, można także generować zwykłe kody paskowe,
  • 300, 300 – wymiary wygenerowanego obrazka,
  • „png” – format generowanego obrazka
  • „/tmp/qr_code.png” – plik do którego zostanie zapisany obrazek

W efekcie otrzymałem piękny plik z kodem QR:

Wygenerowany kod QR

Wygenerowany kod QR

Jego wskanowanie, np. programem QR Droid w telefonie z Androidem pięknie otwiera docelową stronę www.mberkan.pl:

Otworzona strona WWW

Otworzona strona WWW

Jako że moim zamiarem jest drukowanie tych kodów na papierze, zależało mi żeby wygenerowany obrazek zapisać w postaci wektorowej, tj. EPS albo SVG. I tutaj zaczęły się schody, ponieważ autorzy biblioteki takiej potrzeby najwyraźniej nie odczuwali… Jednak jak zwykle na StackOverFlow znalazł się ktoś z podobnym problemem. Niedługo później ktoś dostarczył gotową implementacje formatu EPS :-). Nie jest ona co prawda doskonała, bo np. program evince (do oglądania plików PDF) takiego obrazka nie wyświetla poprawnie, ale już np. gv czy import do GIMP radzi sobie dobrze…

Także hackaton można zaczynać 🙂

O autorze

Marek Berkan Marek Berkan: programista, entuzjasta tworzenia oprogramowania, zarządzania zespołami technicznymi. Prywatnie motocyklista, kolarz MTB, biegacz, żeglarz, rekreacyjny wspinacz, zamiłowany turysta. Witryny: , , .

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *