Renderowanie kodu kreskowego

Renderowanie kodu kreskowego

Renderowanie kodów kreskowych

Aspose.BarCode FOSS dla Python oddziela kodowanie od renderowania. Po zakodowaniu kodu kreskowego do EncodedSymbol, implementacja Renderer konwertuje macierz modułów na wyjście wizualne. Biblioteka zawiera SvgRenderer i PngRenderer.


RenderOptions

RenderOptions kontroluje wyjście wizualne wszystkich renderów. Przekaż go do to_svg() lub to_png() na dowolnym obiekcie Barcode:

import aspose_barcode_foss as barcode
from aspose_barcode_foss import RenderOptions

bc = barcode.code128("Hello World")
svg = bc.to_svg(options=RenderOptions(
    scale=2.0,
    foreground_color="#003366",
    quiet_zone=10.0,
    show_text=True,
))
WłaściwośćTypOpis
scalefloatJednolity mnożnik skali dla całego kodu kreskowego
dpiintRozdzielczość wyjścia PNG (nie ma wpływu na SVG)
module_widthfloatSzerokość jednego modułu kodu kreskowego w jednostkach użytkownika
module_heightfloatWysokość jednego modułu kodu kreskowego w jednostkach użytkownika
quiet_zonefloatWypełnienie białymi znakami wokół kodu kreskowego
foreground_colorstrKolor szesnastkowy dla pasków i modułów (np. "#000000")
background_colorstrKolor szesnastkowy tła
transparent_backgroundboolPrzezroczyste tło dla wyjścia PNG
show_textboolPokaż tekst czytelny dla człowieka pod kodem kreskowym
font_familystrCzcionka dla tekstu czytelnego dla człowieka
font_sizefloatRozmiar czcionki dla tekstu czytelnego dla człowieka

ResolvedRenderOptions

ResolvedRenderOptions jest w pełni scaloną konfiguracją wygenerowaną przez OptionsResolver.resolve(). Łączy dostarczone przez użytkownika RenderOptions z domyślnymi SymbologyProfile. Wszystkie właściwości mają konkretne wartości (bez None).

Właściwość Barcode.default_render_options przechowuje RenderOptions przekazane w czasie generowania (lub None, jeśli nie zostało podane).


Wyjście SVG

SvgRenderer generuje wyjście SVG. Wywołaj to_svg() na obiekcie Barcode:

bc = barcode.ean13("590123412345")
svg_string = bc.to_svg()

# With custom options
svg_custom = bc.to_svg(options=RenderOptions(
    scale=3.0,
    foreground_color="#1a1a1a",
    show_text=True,
    font_family="Helvetica",
    font_size=12.0,
))

with open("ean13.svg", "w") as f:
    f.write(svg_custom)

to_svg() zwraca str zawierający pełny dokument SVG.


Wyjście PNG

PngRenderer generuje wyjście PNG. Wywołaj to_png() na obiekcie Barcode:

bc = barcode.qr("https://example.com")
png_bytes = bc.to_png()

# With custom options
png_custom = bc.to_png(options=RenderOptions(
    scale=4.0,
    dpi=300,
    transparent_background=True,
))

with open("qr.png", "wb") as f:
    f.write(png_custom)

to_png() zwraca bytes zawierający dane obrazu PNG.


Abstrakcja renderera

Klasa bazowa abstrakcyjna Renderer definiuje interfejs dla wszystkich rendererów:

class Renderer(ABC):
    def render(self, symbol, layout, options) -> RenderedArtifact: ...

SvgRenderer i PngRenderer oba implementują ten interfejs. Możesz wywołać Barcode.render(renderer, options), aby użyć konkretnego renderera bezpośrednio:

from aspose_barcode_foss import SvgRenderer, RenderOptions

bc = barcode.code128("DATA")
artifact = bc.render(SvgRenderer(), RenderOptions(scale=2.0))
print(artifact.media_type)  # "image/svg+xml"
print(type(artifact.data))  # <class 'str'>

RenderedArtifact

Obiekt RenderedArtifact zwrócony przez Renderer.render() zawiera:

WłaściwośćTypOpis
data`strbytes`
media_typestrTyp MIME ("image/svg+xml" lub "image/png")
backendstrIdentyfikator renderera

Układ tekstu

Każda symbologia ma TextLayoutPolicy, który określa, jak tekst czytelny dla człowieka jest rozmieszczony pod kodem kreskowym. Metoda create_layout(symbol, options) zwraca TextLayout zawierający obiekty TextSegment z danymi o pozycji i tekście.

QR Code używa QrTextLayoutPolicy, który zapewnia układ bez operacji (kody QR nie wyświetlają tekstu czytelnego dla człowieka).


Wskazówki i najlepsze praktyki

  • Użyj scale do jednolitego rozmiaru oraz module_width/module_height do precyzyjnej kontroli wymiarów — nie łącz obu.
  • Ustaw dpi=300 dla wyjścia PNG w jakości druku; domyślnie jest to rozdzielczość ekranu.
  • Użyj transparent_background=True dla kodów kreskowych PNG, które będą nakładane na kolorowe tła.
  • foreground_color i background_color akceptują standardowe łańcuchy kolorów szesnastkowych ("#RRGGBB").
  • Wyjście SVG jest niezależne od rozdzielczości — preferuj SVG do osadzania w sieci i PDF.

Typowe problemy

ProblemPrzyczynaRozwiązanie
PNG wydaje się za małyDomyślna skala to 1,0Zwiększ scale lub ustaw dpi
Tekst niewidocznyshow_text domyślnie ma wartość FalseUstaw show_text=True
QR code nie ma tekstuQR symbologia nie obsługuje tekstu czytelnego dla człowiekaOczekiwane zachowanie — QR używa układu tekstu no-op
Kolory nie zostały zastosowaneNazwa właściwości napisana niepoprawnieUżyj dokładnych nazw właściwości: foreground_color, background_color

Zobacz także

 Polski