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ść | Typ | Opis |
|---|---|---|
scale | float | Jednolity mnożnik skali dla całego kodu kreskowego |
dpi | int | Rozdzielczość wyjścia PNG (nie ma wpływu na SVG) |
module_width | float | Szerokość jednego modułu kodu kreskowego w jednostkach użytkownika |
module_height | float | Wysokość jednego modułu kodu kreskowego w jednostkach użytkownika |
quiet_zone | float | Wypełnienie białymi znakami wokół kodu kreskowego |
foreground_color | str | Kolor szesnastkowy dla pasków i modułów (np. "#000000") |
background_color | str | Kolor szesnastkowy tła |
transparent_background | bool | Przezroczyste tło dla wyjścia PNG |
show_text | bool | Pokaż tekst czytelny dla człowieka pod kodem kreskowym |
font_family | str | Czcionka dla tekstu czytelnego dla człowieka |
font_size | float | Rozmiar 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ść | Typ | Opis |
|---|---|---|
data | `str | bytes` |
media_type | str | Typ MIME ("image/svg+xml" lub "image/png") |
backend | str | Identyfikator 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
scaledo jednolitego rozmiaru orazmodule_width/module_heightdo precyzyjnej kontroli wymiarów — nie łącz obu. - Ustaw
dpi=300dla wyjścia PNG w jakości druku; domyślnie jest to rozdzielczość ekranu. - Użyj
transparent_background=Truedla kodów kreskowych PNG, które będą nakładane na kolorowe tła. foreground_coloribackground_colorakceptują 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
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
| PNG wydaje się za mały | Domyślna skala to 1,0 | Zwiększ scale lub ustaw dpi |
| Tekst niewidoczny | show_text domyślnie ma wartość False | Ustaw show_text=True |
| QR code nie ma tekstu | QR symbologia nie obsługuje tekstu czytelnego dla człowieka | Oczekiwane zachowanie — QR używa układu tekstu no-op |
| Kolory nie zostały zastosowane | Nazwa właściwości napisana niepoprawnie | Użyj dokładnych nazw właściwości: foreground_color, background_color |