abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 18:33 | Komunita

    Libre Graphics Meeting 2026, tj. čtyřdenní konference a setkání vývojářů a uživatelů svobodných a otevřených grafických softwarů, proběhne od 22. do 25. dubna v Norimberku. Dění lze sledovat na Mastodonu.

    Ladislav Hagara | Komentářů: 0
    dnes 03:11 | Zajímavý software

    Vývojář Alexandre Gomes Gaigalas na GitHubu zveřejnil c89cc.sh, parser a kompilátor jazyka C89 napsaný v pouhém jediném skriptu o přibližně 8000 řádcích čistého bashe (bez dalších externích závislostí), který generuje ELF64 binárky pro x86-64. Jedná se o velmi jednoduchý kompilátor, který nepodporuje direktivy #include a dokonce ani funkci printf (lze použít puts), všechny dostupné deklarace lze nalézt v proměnné _BUILTIN_LIBC na konci skriptu. Skript je volně dostupný pod ISC licencí.

    » FIDESZ🧡! « | Komentářů: 5
    včera 23:33 | Nasazení Linuxu

    Francouzská vláda oznámila, že v rámci strategie 'digitální suverenity' zahájí 'přechod od systému Windows k počítačům s operačním systémem Linux' (sa sortie de Windows au profit de postes sous système d'exploitation Linux). DINUM (meziresortní ředitelství pro digitální technologie) požádalo ministerstva, aby do podzimu 2026 vypracovaly konkrétní plány nasazení Linuxu. Francie již dříve migrovala části státní správy na otevřená řešení.

    » FIDESZ🧡! « | Komentářů: 8
    včera 05:22 | IT novinky

    Nezisková organizace Electronic Frontier Foundation (EFF) hájící občanské svobody v digitálním světě po téměř 20 letech opouští platformu X (dříve Twitter). Na platformách Bluesky, Mastodon, LinkedIn, Instagram, TikTok, Facebook, Threads a YouTube zůstává.

    Ladislav Hagara | Komentářů: 5
    včera 03:33 | Nová verze

    Terminálový textový editor GNU nano byl vydán ve verzi 9.0. Vylepšuje chování horizontálního posouvání pohledu na dlouhé řádky a chování některých klávesových zkratek. Více v seznamu změn.

    |🇵🇸 | Komentářů: 0
    9.4. 19:22 | IT novinky

    Ministerstvo financí ve spolupráci s finanční správou dnes představilo beta verzi aplikace využívající umělou inteligenci pro předvyplnění daňového přiznání. Není třeba přepisovat údaje z různých potvrzení, ani hledat správné řádky, kam údaje napsat. Stačí nahrát dokumenty a využít AI.

    Ladislav Hagara | Komentářů: 8
    9.4. 18:33 | Zajímavý projekt

    Výrobce počítačových periferií Keychron zveřejnil repozitář se schématy šasi klávesnic a myší. Licence je restriktivní, zakazuje většinu komerčních užití a v podstatě jsou tak data vhodná pouze pro výukové účely, hlášení a opravy chyb, případně výrobu vlastního příslušenství.

    |🇵🇸 | Komentářů: 5
    9.4. 18:22 | Nová verze

    Správce balíčků APT, používaný v Debianu a odvozených distribucích, byl vydán ve verzi 3.2 (seznam změn). Mezi novinkami figurují nové příkazy pro práci s historií, včetně vracení transakcí.

    |🇵🇸 | Komentářů: 0
    9.4. 14:33 | IT novinky

    Společnost Anthropic oznámila Projekt Glasswing a s ní související AI model Claude Mythos Preview. Jedná se o iniciativu zaměřenou na kybernetickou bezpečnost, do které se zapojily velké technologické společnosti Amazon Web Services, Anthropic, Apple, Broadcom, Cisco, CrowdStrike, Google, JPMorganChase, Linux Foundation, Microsoft, NVIDIA a Palo Alto Networks. Anthropic věří, že nový AI model Claude Mythos Preview dokáže

    … více »
    Ladislav Hagara | Komentářů: 2
    9.4. 13:55 | Zajímavý software

    Firma Ojective Development vydala svůj nástroj pro monitorování a řízení odchozích síťových připojení Little Snitch i pro operační systém Linux. Linuxová verze se skládá ze tří komponent: eBPF program pro zachytávání provozu a webové rozhraní jsou uvolněny pod GNU GPLv2 a dostupné na GitHubu (převážně Rust a JavaScript), jádro backendu je proprietární pod vlastní licencí, nicméně zdarma k použití a redistribuci (cena přitom normálně … více »

    » FIDESZ🧡! « | Komentářů: 1
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (8%)
     (1%)
     (12%)
     (30%)
     (3%)
     (6%)
     (2%)
     (14%)
     (24%)
    Celkem 1270 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Příprava štítků s čárovými kódy (python-reportlab)

    19.5.2014 22:27 | Přečteno: 1605× | poslední úprava: 19.5.2014 22:35

    Po mém předchozím zápisku o webové aplikaci www.123stitky.cz pro tvorbu adresních štítků dnes rozeberu, jak jsou tyto štítky generovány v Pythonu s použitím knihovny Reportlab. Dostane se nejen na textové štítky, ale i na to, jak do nich vložit QR kód a EAN čárový kód.

    Možností, jak programově generovat PDF je celá řada. Ale protože pro mě je Python jazyk, ve kterém píši již 13 let a o kterém jsem před těmi 13 roky psal, je volba jasná.

    Reportlab

    Reportlab je pythonovský balíček modulů pro programové generování PDF. Kromě odkazované open-source verze (dokumentace, jak jinak, než v PDF) je k dispozici i placená verze, kde se připlácí především za šablonovací systém a podporu. V dnešní ukázce žádné pokročilé vlastnosti nevyužijeme, proto na Debianu nainstalujeme balíček python-reportlab a kód můžeme rovnou otestovat.

    V této jednoduché ukázce si řekneme, jak za použití vlastního TTF fontu vykreslit text odpovídající jednotlivým řádkům štítku, štítku nastavit vlastní velikost a pak do definovaných míst vykreslíme QR kód a EAN čárový kód. Protože vykreslení čárových kódů o přesně daném rozměru není z mého pohledu tak průhledné, jak by mohlo být, ukáži jednoduchou funkci, jak čárový kód ztransformovat tak, aby se vykreslil přesně tam, kam potřebujeme. V následující ukázce následují jednotlivé fragmenty kódu, přičemž odpovídající importy (z) modulů jsou vždy na začátku fragmentu. Při psaní produkčního kódu by bylo dobré dát je na začátek zdrojového souboru.

    Začínáme

    Nejprve si vytvoříme objekt out, instanci třídy Canvas, do kterého budeme kreslit obsah štítku. První parametr je jméno souboru, do kterého bude výstup uložen:
    from reportlab.pdfgen import canvas
    from reportlab.lib.units import mm, inch
    
    PAGE_WIDTH = 100*mm
    PAGE_HEIGHT = 50*mm
    
    out = canvas.Canvas('out.pdf', pagesize=(PAGE_WIDTH, PAGE_HEIGHT))
    
    Reportlab používá vtipný způsob pro práci s rozměry, z modulu units si můžete naimportovat milimetry (mm) nebo palce (inch) a rozměry zadávat jako jejich násobky (viz PAGE_WIDTH, PAGE_HEIGHT). Rozměry Canvasu jsou předány jako tuple o dvou hodnotách, pokud chcete použít standardní rozměr stránky, použijte:
    from reportlab.lib.pagesizes import A4
    out = canvas.Canvas('out.pdf', pagesize=A4)
    

    Vlastní font

    Chceme kreslit vlastním TTF fontem. Pro ukázku použijeme DejaVu font z Debianího balíku ttf-dejavu-core. Font vytvoříme a zaregistrujeme pod vlastním názvem pomocí kódu:

    from reportlab.pdfbase import pdfmetrics 
    from reportlab.pdfbase.ttfonts import TTFont 
    
    FONT_NAME = 'DejaVuSans'
    font = TTFont(FONT_NAME, '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf')
    pdfmetrics.registerFont(font)
    FONT_SIZE = 10
    

    Jdeme kreslit

    Před kreslením nejprve nastavím náš načtený font a pak vykreslíme čtyři řádky. Reportlab měří vzdálenosti od levého dolního rohu, stejně tak text renderovaný pomocí drawString() má svůj levý dolní roh na pozici předané jako parametr:

    out.setFont(FONT_NAME, FONT_SIZE)
    
    out.drawString(10*mm, 10*mm, u"Řádek 4")
    out.drawString(10*mm, 20*mm, u"Řádek 3")
    out.drawString(10*mm, 30*mm, u"Řádek 2")
    out.drawString(10*mm, 40*mm, u"Řádek 1")
    

    Příprava na čárové kódy

    Základní kostru kódu, jak v Reportlabu tisknout QR kódy a EAN čárové kódy jsem vzdal ze stackoverflow, kde ale parametr transform je určen jasně nejasně a spíše tak, aby to fungovalo. Tento parametr určuje transformační matici a nechá se získat pomocí funkcí translate a scale z modulu reportlab.graphics.shapes. Já jsem se však inspiroval pohledem na tento zdrojový kód, kde je vše nutné. Definujme tedy funkci, která dokáže vykreslit kód do Canvasu. Její parametry: Po vytvoření instance třídy Drawing do ní přidáme čárový kód a vykreslíme do PDF canvasu. Nakonec, spíše pro ilustraci nakreslíme rámeček okolo čárového kódu, abychom věděli odkud kam sahá.
    from reportlab.graphics.shapes import Drawing
    from reportlab.graphics import renderPDF
    
    
    def draw_barcode(canvas, x, y, width, height, w_type, text):
        code = w_type(value=text)
        x1, y1, x2, y2 = code.getBounds()
        w = float(x2 - x1)
        h = float(y2 - y1)
    
        sx = width/w
        sy = height/h
    
        w *= sx
        h *= sy
    
        drawing = Drawing(width=w,height=h,transform=[sx,0,0,sy,-sx*x1,-sy*y1])
        drawing.add(code)
        renderPDF.draw(drawing, canvas, x, y)
    
        canvas.rect(x, y, width, height)
    

    Čárové kódy

    Nyní tuto funkci použijeme pro vykreslení QR kódu a EAN čárového kódu. Při tom použijeme třídy QrCodeWidget a Ean13BarcodeWidget, ale můžeme generovat celou řadu jiných kódů (viz dokumentace reportlab.graphics).

    Nejprve tedy importy:

    from reportlab.graphics.barcode.qr import QrCodeWidget 
    from reportlab.graphics.barcode.eanbc import Ean13BarcodeWidget
    
    Vykreslení QR kódu do pravého horního rohu štítku:
    W = 24*mm
    H = 24*mm
    draw_barcode(out, PAGE_WIDTH-W, PAGE_HEIGHT-H, W, H,
        QrCodeWidget, 'https://www.123stitky.cz')
    
    A čárového EAN13 kódu do pravého dolního rohu štítku. Pro informace o rozměrech EAN kódu jsem použil tuto stránku:
    W = 37.29*mm
    H = 25.93*mm
    draw_barcode(out, PAGE_WIDTH-W, 0, W, H,
        Ean13BarcodeWidget, '79357367900')
    

    Ukládáme

    Nyní již štítek můžeme uložit do PDF jednoduchým voláním metody save(). Po tomto volání již Canvas nemůžeme používat, zato se může podívat do souboru out.pdf (viz volání konstruktoru Canvas):
    out.save()
    

    Poznámky

    Pokud budete chtít v PDF více stránek, pak zavolejte out.showPage() pro založení nové stránky.

    Prostřednictvím modulu reportlab.graphics lze renderovat nejen PDF (renderPDF), ale i bitmapové formáty (renderPM) nebo SVG (renderSVG).

    Pro generování náhledu štítků na první stránce www.123stitky.cz používám PNG, které konvertuji z PDF pomocí balíčku wand což je ctypes binding nad ImageMagickem a jeho použití vypadá následovně (v preview je string obsahující BLOB s PNG):

    from wand.image import Image
    
    with Image(filename="out.pdf[0]", resolution=150) as img:
        preview = img.make_blob(format='png')
    

    Závěr

    Reportlab je velice silný nástroj a v tomto zápisku je popsána jen velice omezená podmnožina funkcí, kterou používám pro on-line generování dopisních a jiných štítků ve webové aplikaci www.123stitky.cz. Reportlab navíc umí sázet text do odstavců, měnit styl písma, zarovnávat text, kreslit tvary různými barvami, vytvářet tabulky a spoustu dalšího, přesto věřím, že některým z vás tento kód může pomoci a usnadnit tvorbu PDF dokumentů s QR, EAN nebo jinými čárovými či 2D kódy.        

    Hodnocení: 88 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    19.5.2014 22:29 Jan Švec | skóre: 2 | blog: honzas | Plzeň
    Rozbalit Rozbalit vše Re: Příprava štítků (python-reportlab)
    Příloha:
    Přikládám IPython notebook (zdrojový kód) pro experimentování.
    19.5.2014 22:59 Stevko | skóre: 3 | Praha
    Rozbalit Rozbalit vše Re: Příprava štítků s čárovými kódy (python-reportlab)
    V Brmlabe na čiarové kódy používame pythoní skript z https://github.com/brmlab/misc (barcodes.py), ktorý vyrobí pomocou zintu svg s kódmi a naskladá ich na vhodné miesta do väčšieho svg (tak, aby to sedelo na samolepky). Ale samozrejme, dá sa využiť gnu barcode (sh skriptík tiež tam).
    Príspevok nemá byť ukončený spojením „môj názor“.
    20.5.2014 14:49 Marv-CZ | skóre: 21
    Rozbalit Rozbalit vše Re: Příprava štítků s čárovými kódy (python-reportlab)
    Ony na to existují i aplikace, např. gLabels. Ale chápu, že používat GUI je trapné. :-)
    20.5.2014 09:18 Zbyšek
    Rozbalit Rozbalit vše Re: Příprava štítků s čárovými kódy (python-reportlab)
    Trapná reklama.
    20.5.2014 13:03 smazáno | skóre: 18 | blog: smazáno
    Rozbalit Rozbalit vše Re: Příprava štítků s čárovými kódy (python-reportlab)
    Na open-source reportlab.
    Salamek avatar 21.5.2014 10:27 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: Příprava štítků s čárovými kódy (python-reportlab)
    https://www.123stitky.cz/jaknato Uplne dole se nenahravaji dva obrazky...
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.