Programovací jazyk Python byl vydán v nové major verzi 3.15.0. Podrobný přehled novinek v aktualizované dokumentaci.
BIGWORDS.PAGE je open-source webová aplikace, která po otevření odkazu v prohlížeči vykreslí přes celou obrazovku jednoduché informační sdělení. Zpráva i její nastavení jsou uložené v části URL za znakem #, například odkaz https://bigwords.page/#abclinuxu zobrazí jako velký bílý nápis 'abclinuxu' na černém pozadí. Obsah odkazu lze upravovat i vestavěným editorem, ten umožňuje nastavovat formátování a vizuální efekty textu, časovače, QR kódy a obrázky. Zdrojový kód je dostupný pod licencí MIT na GitHubu.
V neděli 11. října proběhne rotace klíče kořenové zóny. Podruhé v historii. Ondřej Filip na blogu CZ.NIC: "Pokud je pro Vás DNS protokol spíše výzva, ale přesto spravujete nějakou síť či DNS resolver, zkuste si jednoduchý test, který připravila firma Cloudflare na této adrese. Obzvláště zbystřit byste měli, pokud uvidíte nějaká červená políčka."
Vláda Spojených států se rozhodla vyřadit americkou softwarovou společnost Microsoft a několik dalších velkých technologických podniků z programu, který umožňuje kvalifikovaným zahraničním pracovníkům získat povolení k trvalému pobytu. Oznámila to včera administrativa amerického prezidenta Donalda Trumpa. Opatření zdůvodnila rozsáhlým zneužíváním programu, který je dlouhodobě terčem kritiky ze strany Trumpových příznivců, neboť prý znevýhodňuje americké pracovníky.
Datové centrum největší ruské technologické společnosti Jandex v Rjazaňské oblasti se stalo cílem dronového útoku a zastavilo provoz. Jandexu se někdy přezdívá „ruský Google“. Provozuje nejoblíbenější internetový vyhledávač v Rusku nebo aplikace pro objednávky jídla a taxi. Využívají jej desítky milionů lidí v rusky mluvících zemích.
Francouzská společnost Mistral AI představila Mistral Large 4 (interně přezdívaný 'le Chonk', volně přeloženo 'pořádný macek'), 'open-weight multimodální hybridní instruct-and-reasoning model s architekturou granulárního MoE, nativně podporující více jak 160 jazyků'. Model má přes jeden bilión parametrů, z nichž při práci využívá 49 miliard, kontextové okno o délce milion tokenů a obrazový enkodér o 1,6 miliardách parametrů.
… více »Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.20. Díky 227 přispěvatelům.
Simon Long oznámil Raspberry Pi Desktop pro PC a Mac s Intelem postavený na aktualizovaném Debianu 13 Trixie. S klientem Raspberry Pi Connect pro vzdálenou správu. Ke stažení je vedle Raspberry Pi OS pro Raspberry Pi.
ESP32-C3 adblock přemění lacinou vývojovou desku ESP32‑C3 na samostatný DNS blokovač nejenom reklamních domén, minimalistickou alternativu k populárnímu Pi-hole. ESP32-C3 adblock místo objemných názvů domén ukládá jejich 40-bitové FNV-1a hashe do flash paměti, které pak binárně prohledává, kontrola jedné domény trvá přibližně 10 milisekund. Blocklist pojme až 537 tisíc domén a lze jej spravovat přes webové rozhraní. Projekt zatím
… více »ArtCraft je sada open source aplikací pro práci s obrázky a videi "inspirovaných" aplikacemi od Adobe. Napsaných v Rustu. Pro MacOS, Windows i Linux. Běží také ve webovém prohlížeči. Aktuálně se jedná o 7 aplikací: PhotoCraft (Photoshop), VectorCraft (Illustrator), FilmCraft (Premiere Pro), LightCraft (Lightroom), PdfCraft (Acrobat), EffectCraft (After Effects) a DesignCraft (InDesign). Zdrojové kódy jsou k dispozici na GitHubu.
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 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.
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)
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
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")
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:
x, y jsou souřadnice, kam kód vykreslit (počátek vlevo dole)width, height je šířka, resp. výška kóduw_type je třída, která je použita pro vykreslení kódu (viz níže)text je řetězec, který je předán konstruktoru čárového kódu
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)
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 Ean13BarcodeWidgetVykreslení 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')
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()
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')
Tiskni
Sdílej: