Introducere
Despre avantajele codurilor QR față de codurile cu bare nu cred că mai e nevoie să vorbim. Chiar răspândirea lor o spune de la sine. Marele avantaj este că putem codifica (aproape) orice.
În plus, cu cât avem mai multă informație de codificat, cu atât lățimea codului cu bare trebuie să crească, asta deoarece bara cea mai subțire și distanța cea mai mică dintre bare au limite inferioare, determinate de lizibilitatea pe care trebuie sa o ofere cititorului de bare, care este un sistem optic. Vedeți, de exemplu, codurile de pe o factură E.On. Aceeași cantitate de informație poate fi codificată QR pe o suprafață mult mai mică. Sigur, și în cazul codurilor QR avem problema cu lizibilitatea. Cu cât crește cantitatea de informație pe aceeași suprafață, crește și complexitatea codului QR.
Practic, la o aceeași suprafață, se micșorează pătrățelele negre și albe, iar dacă atingem limita de lizibilitate, va trebui să mărim dimensiunea codului QR. Dar necesarul de suprafață este mult mai mic decât în cazul codurilor cu bare.
Obținerea codului QR
Există nenumărate site-uri care oferă generări de coduri QR gratuit. Iar CorelDraw oferă direct în aplicație inserarea unui cod QR.
Dar pe noi ne interesează o automatizare, să inserăm simplu și rapid mai multe coduri QR. De exemplu, avem de făcut 100 de etichete pentru 100 de produse diferite. Vom crea un fișier cu informațiile necesare (în format tabelar) și cu acestea vom crea 100 de coduri QR, cu o simplă rulare a unei functii VBA sau Basic. De 100 de ori, da, dar nu facem noi rularea 😀.
Pentru aceasta ne vom folosi de un site, care ne oferă posibilitatea de a descărca un cod QR (un fișier care conține imaginea codului QR) în urma accesării unui link. Link-ul îl vom genera noi, pe baza informațiilor care dorim să apară în codul QR. În cod vom insera și alte informații legate de codul QR, de exemplu formatul fișierului grafic pe care îl dorim (SVG, PNG, JPG sau altele)
De exemplu, accesând link-ul https://api.qrserver.com/v1/create-qr-code/?data=https%3A%2F%2Fgadgetisimo.ro%2F, obținem acest cod QR, care ne duce la adresa site-ului nostru:
Site-ul mamă de care ne folosim este QR Code Generator. Pe prima pagină avem tot felul de generatoare specifice: URL (adresă web), text, e-mail etc. Dar noi ne vom folosi de API creat exact pentru ce avem noi nevoie, la adresa goqr.me/api. Acolo găsiți toate informațiile de care aveți nevoie. Noi vom crea coduri QR, deci ne folosim de documentația aflată la adresa goqr.me/api/doc/create-qr-code/. Citiți-o toată, cu atenție. Acolo aflăm un lucru foarte important: nu există o limită de cereri, dar ar fi bine să vă limitați la 10.000 de cereri pe zi. Nu este necesară crearea unui cont, iar serviciul este complet gratuit. Să sperăm că vor rezista cât mai mult timp pe piață.
Formatul link-ului pe care îl vom folosi este:
https://api.qrserver.com/v1/create-qr-code/?data=strTextQR&ecc=H&format=svg
unde strTextQR este textul pe care dorim să îl codificăm. Ceilalți doi parametrii (ecc și format) îi găsiți în documentația API.
Logica generală e codului este următoarea:
- Se obține textul de codificat strTextQR din fișierul despre care vorbeam la început. Cum obținem acest text nu face obiectul acestui articol
- Se construiește link-ul. Aici vom folosi strTextQR modificat apoi astfel încât să fie acceptat din punctul de vedere al unui link web. Nu orice caracter poate face parte dintr-un link web. De exemplu, caracterul două-puncte : apare imediat după https și doar acolo. Dacă apare pe undeva în strTextQR, link-ul nu este corect format și nu va fi accesibil. De aceea acesta trebuie înlocuit cu echivalentul Hexa al lui, care este 3A. Iar ca browserul să știe că urmează un cod Hexa, punem caracterul % în față: %3A. Funcția pentru această transformare este URLencode()
- Se descarcă fișierul pe care îl primim atunci când accesăm link-ul construit cu strTextQR. Aici folosim funcțiile DownloadFile() și URLDownloadToCacheFile()
- Se inserează fișierul descărcat în documentul dorit. Pentru asta folosim procedura QR_Insert().
- Se trece la următorul text din fișierul tabelar.
Inserare automată cod QR în Microsoft Office și VBA
Aproape întregul codul VBA este comun pentru orice aplicație Microsoft Office, diferența este la sfârșit, rândurile 28 – 54. Veți folosi linia / liniile de cod specifice fiecărei aplicații din suita Microsoft Office.
Exemple de utilizare:
Call QR_Insert(„https://gadgetisimo.ro/”)
Call QR_Insert(„Vasile Popescu”)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | Option Explicit Private Declare PtrSafe Function URLDownloadToCacheFile Lib "urlmon" Alias _ "URLDownloadToCacheFileA" (ByVal lpUnkcaller As Long, ByVal szURL As String, _ ByVal szFileName As String, ByVal dwBufLength As Long, ByVal dwReserved As Long, _ ByVal IBindStatusCallback As Long) As Long Function DownloadFile(URL As String) As String Dim szFileName As String szFileName = Space$(300) If URLDownloadToCacheFile(0, URL, szFileName, Len(szFileName), 0, 0) = 0 Then DownloadFile = Trim(szFileName) End If End Function Private Sub QR_Insert(strQRText As String) Dim strFile_Path As String strFile_Path = DownloadFile("http://api.qrserver.com/v1/create-qr-code/?data=" & URLencode(strQRText) & "&ecc=H&format=svg") 'Daca nu se obtine fisierul (link incorect, lipsa acces la Internet, site-ul are probleme) -> Exit If strFile_Path = "" Then MsgBox "Serverul http://api.qrserver.com nu poate fi accesat", vbOKOnly + vbCritical, "Eroare" Exit Sub End If 'Word 'ActiveDocument.Shapes.AddPicture strFile_Path 'Excel 'Cells(3, 4).Select 'ActiveWorkbook.ActiveSheet.Pictures.Insert strFile_Path 'PowerPoint 'ActiveWindow.Selection.SlideRange.Shapes.AddPicture strFile_Path, msoFalse, msoTrue, Left:=60, Top:=35 'Outlook inserare in corpul mesajului ' Dim Email As Outlook.MailItem ' Dim objAtasament As Attachment ' Set Email = CreateItem(olMailItem) ' Set objAtasament = Email.Attachments.Add(strFile_Path) ' With Email ' .HTMLBody = "<html><body><img src='cid:" & objAtasament.FileName & "'></body></html>" ' .Display ' End With 'Outlook ca atasament ' Dim Email As Outlook.MailItem ' Set Email = CreateItem(olMailItem) ' With Email ' .Attachments.Add strFile_Path ' .Display ' End With End Sub Function URLencode(textul As String) As String ' https://www.w3schools.com/tags/ref_urlencode.ASP ' pentru UTF-8 ' CR -> %0D Nu se foloseste ' LF -> %0A Nu se introduce in array, se cauta vbLf Dim i As Integer Dim arrInloc(32, 2) As String arrInloc(0, 0) = "%" arrInloc(0, 1) = "%25" arrInloc(1, 0) = "+" arrInloc(1, 1) = "%2B" arrInloc(2, 0) = " " arrInloc(2, 1) = "+" arrInloc(3, 0) = "!" arrInloc(3, 1) = "%21" arrInloc(4, 0) = """" arrInloc(4, 1) = "%22" arrInloc(5, 0) = "#" arrInloc(5, 1) = "%23" arrInloc(6, 0) = "$" arrInloc(6, 1) = "%24" arrInloc(7, 0) = "&" arrInloc(7, 1) = "%26" arrInloc(8, 0) = "'" arrInloc(8, 1) = "%27" arrInloc(9, 0) = "(" arrInloc(9, 1) = "%28" arrInloc(10, 0) = ")" arrInloc(10, 1) = "%29" arrInloc(11, 0) = "*" arrInloc(11, 1) = "%2A" arrInloc(12, 0) = "," arrInloc(12, 1) = "%2C" arrInloc(13, 0) = "-" arrInloc(13, 1) = "%2D" arrInloc(14, 0) = "." arrInloc(14, 1) = "%2E" arrInloc(15, 0) = "/" arrInloc(15, 1) = "%2F" arrInloc(16, 0) = ":" arrInloc(16, 1) = "%3A" arrInloc(17, 0) = ";" arrInloc(17, 1) = "%3B" arrInloc(18, 0) = "<" arrInloc(18, 1) = "%3C" arrInloc(19, 0) = "=" arrInloc(19, 1) = "%3D" arrInloc(20, 0) = ">" arrInloc(20, 1) = "%3E" arrInloc(21, 0) = "?" arrInloc(21, 1) = "%3F" arrInloc(22, 0) = "@" arrInloc(22, 1) = "%40" arrInloc(23, 0) = "[" arrInloc(23, 1) = "%5B" arrInloc(24, 0) = "\" arrInloc(24, 1) = "%5C" arrInloc(25, 0) = "^" arrInloc(25, 1) = "%5E" arrInloc(26, 0) = "_" arrInloc(26, 1) = "%5F" arrInloc(27, 0) = "`" arrInloc(27, 1) = "%60" arrInloc(28, 0) = "{" arrInloc(28, 1) = "%7B" arrInloc(29, 0) = "|" arrInloc(29, 1) = "%7C" arrInloc(30, 0) = "}" arrInloc(30, 1) = "%7D" arrInloc(31, 0) = "~" arrInloc(31, 1) = "%7E" For i = 0 To 31 textul = Replace(textul, arrInloc(i, 0), arrInloc(i, 1)) Next i URLencode = Replace(textul, vbLf, "%0A") End Function |
Inserare automată cod QR în CorelDraw și VBA
Exemple de utilizare:
Call QR_Insert(„https://gadgetisimo.ro/”)
Call QR_Insert(„Vasile Popescu”)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | Option Explicit Private Declare PtrSafe Function URLDownloadToCacheFile Lib "urlmon" Alias _ "URLDownloadToCacheFileA" (ByVal lpUnkcaller As Long, ByVal szURL As String, _ ByVal szFileName As String, ByVal dwBufLength As Long, ByVal dwReserved As Long, _ ByVal IBindStatusCallback As Long) As Long Function DownloadFile(URL As String) As String Dim szFileName As String szFileName = Space$(300) If URLDownloadToCacheFile(0, URL, szFileName, Len(szFileName), 0, 0) = 0 Then DownloadFile = Trim(szFileName) End If End Function Private Sub QR_Insert(strQRText As String) Dim strFile_Path As String strFile_Path = DownloadFile("http://api.qrserver.com/v1/create-qr-code/?data=" & URLencode(strQRText) & "&ecc=H&format=svg") 'Daca nu se obtine fisierul (link incorect, lipsa acces la Internet, site-ul are probleme) -> Exit If strFile_Path = "" Then MsgBox "Serverul http://api.qrserver.com nu poate fi accesat", vbOKOnly + vbCritical, "Eroare" Exit Sub End If ActiveDocument.ActiveLayer.Import (strFile_Path) End Sub Function URLencode(textul As String) As String ' https://www.w3schools.com/tags/ref_urlencode.ASP ' pentru UTF-8 ' CR -> %0D Nu se foloseste ' LF -> %0A Nu se introduce in array, se cauta vbLf Dim i As Integer Dim arrInloc(32, 2) As String arrInloc(0, 0) = "%" arrInloc(0, 1) = "%25" arrInloc(1, 0) = "+" arrInloc(1, 1) = "%2B" arrInloc(2, 0) = " " arrInloc(2, 1) = "+" arrInloc(3, 0) = "!" arrInloc(3, 1) = "%21" arrInloc(4, 0) = """" arrInloc(4, 1) = "%22" arrInloc(5, 0) = "#" arrInloc(5, 1) = "%23" arrInloc(6, 0) = "$" arrInloc(6, 1) = "%24" arrInloc(7, 0) = "&" arrInloc(7, 1) = "%26" arrInloc(8, 0) = "'" arrInloc(8, 1) = "%27" arrInloc(9, 0) = "(" arrInloc(9, 1) = "%28" arrInloc(10, 0) = ")" arrInloc(10, 1) = "%29" arrInloc(11, 0) = "*" arrInloc(11, 1) = "%2A" arrInloc(12, 0) = "," arrInloc(12, 1) = "%2C" arrInloc(13, 0) = "-" arrInloc(13, 1) = "%2D" arrInloc(14, 0) = "." arrInloc(14, 1) = "%2E" arrInloc(15, 0) = "/" arrInloc(15, 1) = "%2F" arrInloc(16, 0) = ":" arrInloc(16, 1) = "%3A" arrInloc(17, 0) = ";" arrInloc(17, 1) = "%3B" arrInloc(18, 0) = "<" arrInloc(18, 1) = "%3C" arrInloc(19, 0) = "=" arrInloc(19, 1) = "%3D" arrInloc(20, 0) = ">" arrInloc(20, 1) = "%3E" arrInloc(21, 0) = "?" arrInloc(21, 1) = "%3F" arrInloc(22, 0) = "@" arrInloc(22, 1) = "%40" arrInloc(23, 0) = "[" arrInloc(23, 1) = "%5B" arrInloc(24, 0) = "\" arrInloc(24, 1) = "%5C" arrInloc(25, 0) = "^" arrInloc(25, 1) = "%5E" arrInloc(26, 0) = "_" arrInloc(26, 1) = "%5F" arrInloc(27, 0) = "`" arrInloc(27, 1) = "%60" arrInloc(28, 0) = "{" arrInloc(28, 1) = "%7B" arrInloc(29, 0) = "|" arrInloc(29, 1) = "%7C" arrInloc(30, 0) = "}" arrInloc(30, 1) = "%7D" arrInloc(31, 0) = "~" arrInloc(31, 1) = "%7E" For i = 0 To 31 textul = Replace(textul, arrInloc(i, 0), arrInloc(i, 1)) Next i URLencode = Replace(textul, vbLf, "%0A") End Function |
Inserare automată cod QR în LibreOffice și Basic
Codul Basic este comun pentru orice aplicație LibreOffice.
Exemple de utilizare:
Call QR_Insert(„https://gadgetisimo.ro/”)
Call QR_Insert(„Vasile Popescu”)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | Option Explicit Private Declare PtrSafe Function URLDownloadToCacheFile Lib "urlmon" Alias _ "URLDownloadToCacheFileA" (ByVal lpUnkcaller As Long, ByVal szURL As String, _ ByVal szFileName As String, ByVal dwBufLength As Long, ByVal dwReserved As Long, _ ByVal IBindStatusCallback As Long) As Long Function DownloadFile(URL As String) As String Dim szFileName As String szFileName = Space$(300) If URLDownloadToCacheFile(0, URL, szFileName, Len(szFileName), 0, 0) = 0 Then DownloadFile = Trim(szFileName) End If End Function Private Sub QR_Insert(strQRText As String) Dim strFile_Path As String Dim document as Object Dim dispatcher as Object Dim args(2) as new com.sun.star.beans.PropertyValue strFile_Path = DownloadFile("https://api.qrserver.com/v1/create-qr-code/?data=" & URLencode(strQRText) & "&ecc=H&format=svg") 'Daca nu se obtine fisierul (link incorect, lipsa acces la Internet, site-ul are probleme) -> Exit If strFile_Path = "" Then MsgBox "Serverul http://api.qrserver.com nu poate fi accesat", vbOKOnly + vbCritical, "Eroare" Exit Sub End If document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") args(0).Name = "FileName" args(0).Value = ConvertToURL(strFile_Path) args(1).Name = "AsLink" args(1).Value = false dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args()) End Sub Function URLencode(textul As String) As String ' https://www.w3schools.com/tags/ref_urlencode.ASP ' pentru UTF-8 ' CR -> %0D Nu se foloseste ' LF -> %0A Nu se introduce in array, se cauta CHR(10) Dim i As Integer Dim arrInloc(32, 2) As String arrInloc(0, 0) = "%" arrInloc(0, 1) = "%25" arrInloc(1, 0) = "+" arrInloc(1, 1) = "%2B" arrInloc(2, 0) = " " arrInloc(2, 1) = "+" arrInloc(3, 0) = "!" arrInloc(3, 1) = "%21" arrInloc(4, 0) = """" arrInloc(4, 1) = "%22" arrInloc(5, 0) = "#" arrInloc(5, 1) = "%23" arrInloc(6, 0) = "$" arrInloc(6, 1) = "%24" arrInloc(7, 0) = "&" arrInloc(7, 1) = "%26" arrInloc(8, 0) = "'" arrInloc(8, 1) = "%27" arrInloc(9, 0) = "(" arrInloc(9, 1) = "%28" arrInloc(10, 0) = ")" arrInloc(10, 1) = "%29" arrInloc(11, 0) = "*" arrInloc(11, 1) = "%2A" arrInloc(12, 0) = "," arrInloc(12, 1) = "%2C" arrInloc(13, 0) = "-" arrInloc(13, 1) = "%2D" arrInloc(14, 0) = "." arrInloc(14, 1) = "%2E" arrInloc(15, 0) = "/" arrInloc(15, 1) = "%2F" arrInloc(16, 0) = ":" arrInloc(16, 1) = "%3A" arrInloc(17, 0) = ";" arrInloc(17, 1) = "%3B" arrInloc(18, 0) = "<" arrInloc(18, 1) = "%3C" arrInloc(19, 0) = "=" arrInloc(19, 1) = "%3D" arrInloc(20, 0) = ">" arrInloc(20, 1) = "%3E" arrInloc(21, 0) = "?" arrInloc(21, 1) = "%3F" arrInloc(22, 0) = "@" arrInloc(22, 1) = "%40" arrInloc(23, 0) = "[" arrInloc(23, 1) = "%5B" arrInloc(24, 0) = "\" arrInloc(24, 1) = "%5C" arrInloc(25, 0) = "^" arrInloc(25, 1) = "%5E" arrInloc(26, 0) = "_" arrInloc(26, 1) = "%5F" arrInloc(27, 0) = "`" arrInloc(27, 1) = "%60" arrInloc(28, 0) = "{" arrInloc(28, 1) = "%7B" arrInloc(29, 0) = "|" arrInloc(29, 1) = "%7C" arrInloc(30, 0) = "}" arrInloc(30, 1) = "%7D" arrInloc(31, 0) = "~" arrInloc(31, 1) = "%7E" For i = 0 To 31 textul = Replace(textul, arrInloc(i, 0), arrInloc(i, 1)) Next i URLencode = Replace(textul, CHR(10) , "%0A") End Function |
Happy Coding!
Surse: Pexels
Poate te interesează și: