{"id":19,"date":"2012-04-23T09:28:00","date_gmt":"2012-04-23T09:28:00","guid":{"rendered":"http:\/\/e-ware.org\/blog\/?p=19"},"modified":"2012-04-23T09:28:00","modified_gmt":"2012-04-23T09:28:00","slug":"reportlab-e-python-creare-codici-a-barre","status":"publish","type":"post","link":"http:\/\/e-ware.org\/blog\/reportlab-e-python-creare-codici-a-barre\/","title":{"rendered":"ReportLab e Python: Creare codici a barre"},"content":{"rendered":"<div><\/div>\n<div>Come abbiamo avuto modo di vedere, mediante l&#8217;uso della libreria offerta da ReportLab, \u00e8 possibile creare in maniera molto flessibile dei PDF che soddisfino tutti le nostre necessit\u00e0. Ora per\u00f2, una volta capito come creare un documento, abbiamo la necessit\u00e0 che esso venga riempito con qualcosa di utile.\u00a0<\/div>\n<div>In ogni contesto lavorativo, e quindi a maggior ragione in un contesto industriale come quello oggetto d&#8217;esame nello<a href=\"http:\/\/soluzionisoftware.blogspot.it\/2012\/04\/reportlab-creare-pdf-con-python.html\" target=\"_blank\"> scorso articolo<\/a>, la praticit\u00e0 che l&#8217;informatica pu\u00f2 offrire, \u00e8 lo strumento migliore che aiuta l&#8217;utente a disfarsi di un grosso carico di lavoro ritenuto inutile. Dotare il proprio documento di un codice a barre pu\u00f2 servire per effettuare numerose operazioni utili nel futuro come\u00a0 ricerche, organizzazione di documenti, generazione di riferimenti rapidi da riportare su eventuali documenti cartacei, etc&#8230;<\/div>\n<p>Ora vediamo come sfruttare ReportLab per creare un codice a barre da inserire nel nostro documento.<br \/>Il codice da esaminare \u00e8 il seguente:<\/p>\n<div> <i>&#8212;&#8211; Python &#8212;&#8211;<\/i><\/div>\n<div> <i>#!\/usr\/bin\/env python<\/p>\n<p>from reportlab.pdfgen import canvas <span>(1)\u00a0<\/span><\/i><\/div>\n<div><i><span><span>from reportlab.lib.units import mm<\/span> (2)<\/span><\/i><\/div>\n<div><i><span><span>from reportlab.graphics.barcode import code39<\/span><\/span><\/i><i> <span>(3) <\/span><\/i><i><span><span><\/span><\/span><\/p>\n<p>mio_pdf = canvas.Canvas(&#8216;mio.pdf&#8217;) <span>(1)<\/span><br \/># &#8212;&#8211; imposta le dimensioni<\/i><\/div>\n<div><i>mio_pdf.setPageSize((204, 65)) <span>(1)<\/span><\/i><\/div>\n<div> <i><span><br \/><\/span><\/i><\/div>\n<div> <i># &#8212;&#8211; genera ed imposta il barcode<\/i><\/div>\n<div> <span><i>barcode = code39.Extended39(&#8216;1234&#8217;, barWidth=0.5*mm,barHeight=8*mm<\/i><span>)<\/span><\/span><i><span> (4)<\/span><\/i><\/div>\n<div><i><span><span>barcode.drawOn(<\/span><\/span><\/i><i>mio_pdf<\/i><i><span><span>, 10*mm, 10*mm)<\/span> (5)<\/span><\/i><\/div>\n<div> <i><span><br \/><\/span><\/i><\/div>\n<div> <i># &#8212;&#8211; genera e salva il pdf<br \/>mio_pdf.showPage() <span>(1)<\/span><br \/>mio_pdf.save() <span>(1)<\/span><\/i><\/div>\n<div> <i>&#8212;&#8212;&#8212;-<\/i><\/div>\n<div><i>\u00a0<\/i><\/div>\n<div>Anche questa volta, il sorgente da analizzare \u00e8 molto semplice e racchiude solo lo stretto necessario affinch\u00e9 venga compreso l&#8217;uso dei codici a barre.\u00a0<\/div>\n<div>Il codice che \u00e8 gi\u00e0 stato esplicato nel precedente articolo (1) non verr\u00e0 ritrattato e pertanto vi invito ad una rilettura del <a href=\"http:\/\/soluzionisoftware.blogspot.it\/2012\/04\/reportlab-creare-pdf-con-python.html\" target=\"_blank\">precedente post<\/a> per comprenderne il significato ed il comportamento.<\/div>\n<div>Innanzitutto partiamo dall&#8217;inclusione di una nuova voce (2) che ci permette di convertire al volo tutte le unit\u00e0 di misura (che vengono richieste in pollici) in millimetri. In questo modo la generazione dei documenti ed il calcolo delle misure risulter\u00e0 molto pi\u00f9 semplice ed immediata. Successivamente (3) \u00e8 presente la vera e propria importazione del modulo che si occupa di generare il nostro codice a barre. La funzione da utilizzare \u00e8 <b>Extended39<\/b>. Essa riceve un parametro e restituisce il riferimento all&#8217;oggetto barcode. Il parametro da passare alla funzione \u00e8 la stringa da trasformare in codice a barre. Nel nostro esempio si \u00e8 scelto di convertire la stringa &#8216;1234&#8217;. Si tenga presente che la funzione accetta altri parametri opzionali e due di essi sono stati inseriti nell&#8217;esempio. <b>barWidth<\/b> e <b>barHeight<\/b> servono, infatti, ad impostare, rispettivamente, larghezza ed altezza dell&#8217;immagine che verr\u00e0 generata. Si noti come per tale situazione si sia usata la variabile <b>mm<\/b>, precedentemente (1) importata. Come gi\u00e0 detto, essa converte automaticamente i millimetri indicati in punti. Subito dopo aver generato il nostro oggetto barcode possiamo &#8220;disegnarlo&#8221; all&#8217;interno del pdf con il suo metodo <b>drawOn<\/b>. Esso accetta tre parametri: un oggetto di tipo canvas (quello che stiamo usando per generare il nostro pdf), nel quale inserire l&#8217;immagine, la posizione sull&#8217;asse orizzontale e quella sull&#8217;asse verticale nel nostro documento della stessa.<\/div>\n<div><\/div>\n<div>Come si pu\u00f2 notare anche la generazione dei codici a barre \u00e8 molto elastica e potente con questo strumento e nella documentazione ufficiale si possono trovare altri riferimenti ad altre funzioni certamente utili.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Come abbiamo avuto modo di vedere, mediante l&#8217;uso della libreria offerta da ReportLab, \u00e8 possibile creare in maniera molto flessibile dei PDF che soddisfino tutti le nostre necessit\u00e0. Ora per\u00f2, una volta capito come creare un documento, abbiamo la necessit\u00e0 che esso venga riempito con qualcosa di utile.\u00a0 In ogni contesto lavorativo, e quindi a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5],"tags":[],"class_list":["post-19","post","type-post","status-publish","format-standard","hentry","category-opencode","category-python"],"views":4655,"_links":{"self":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/19","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/comments?post=19"}],"version-history":[{"count":0,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/19\/revisions"}],"wp:attachment":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/media?parent=19"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/categories?post=19"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/tags?post=19"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}