Отображение штрихкода
Отображение штрих-кода
Aspose.BarCode FOSS для Python разделяет кодирование и рендеринг. После того как штрих-код закодирован в EncodedSymbol, реализация Renderer преобразует матрицу модулей в визуальный вывод. Библиотека включает SvgRenderer и PngRenderer.
RenderOptions
RenderOptions управляет визуальным выводом всех рендереров. Передайте его в to_svg() или to_png() любого объекта 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,
))| Свойство | Тип: | Описание: |
|---|---|---|
scale | float | Универсальный множитель масштаба для всего штрихкода |
dpi | int | Разрешение для вывода PNG (не влияет на SVG) |
module_width | float | Ширина одного модуля штрихкода в пользовательских единицах |
module_height | float | Высота одного модуля штрихкода в пользовательских единицах |
quiet_zone | float | Отступ из пробельных символов вокруг штрихкода |
foreground_color | str | Hex-цвет для полос и модулей (например, "#000000") |
background_color | str | Hex-цвет для фона |
transparent_background | bool | Прозрачный фон для вывода PNG |
show_text | bool | Отображать человекочитаемый текст под штрих-кодом |
font_family | str | Шрифт для человекочитаемого текста |
font_size | float | Размер шрифта для человекочитаемого текста |
ResolvedRenderOptions
ResolvedRenderOptions — полностью объединённая конфигурация, созданная OptionsResolver.resolve(). Она сочетает пользовательские RenderOptions с настройками по умолчанию SymbologyProfile. Все свойства имеют конкретные значения (без None).
Свойство Barcode.default_render_options содержит RenderOptions, переданное во время генерации (или None, если не указано).
Вывод SVG
SvgRenderer генерирует SVG-вывод. Вызовите to_svg() у объекта 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() возвращает str, содержащий полный документ SVG.
Вывод PNG
PngRenderer генерирует PNG-вывод. Вызовите to_png() у объекта 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() возвращает bytes, содержащий данные PNG-изображения.
Абстракция рендерера
Абстрактный базовый класс Renderer определяет интерфейс для всех рендереров:
class Renderer(ABC):
def render(self, symbol, layout, options) -> RenderedArtifact: ...SvgRenderer и PngRenderer оба реализуют этот интерфейс. Вы можете вызвать Barcode.render(renderer, options), чтобы использовать конкретный рендерер напрямую:
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
Объект RenderedArtifact, возвращаемый Renderer.render(), содержит:
| Свойство | Тип: | Описание: |
|---|---|---|
data | `str | bytes` |
media_type | str | Тип MIME ("image/svg+xml" или "image/png") |
backend | str | Идентификатор рендерера |
Разметка текста
У каждой символьной системы есть TextLayoutPolicy, определяющий, как читаемый человеком текст размещается под штрих-кодом. Метод create_layout(symbol, options) возвращает TextLayout, содержащий объекты TextSegment с данными о позиции и тексте.
QR Code использует QrTextLayoutPolicy, который обеспечивает пустую разметку (коды QR не отображают читаемый человеком текст).
Советы и лучшие практики
- Используйте
scaleдля одинакового размера, аmodule_width/module_height— для точного контроля размеров — не комбинируйте оба варианта. - Установите
dpi=300для PNG-вывода печатного качества; по умолчанию — разрешение экрана. - Используйте
transparent_background=Trueдля PNG штрихкодов, которые будут наложены на цветные фоны. foreground_colorиbackground_colorпринимают стандартные шестнадцатеричные строки цвета ("#RRGGBB").- SVG-вывод не зависит от разрешения — предпочтительно использовать SVG для веба и вставки в PDF.
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
| PNG выглядит слишком маленьким | Масштаб по умолчанию — 1.0 | Увеличьте scale или задайте dpi |
| Текст не виден | show_text по умолчанию False | Установить show_text=True |
| QR code не содержит текста | Символика QR не поддерживает человекочитаемый текст | Ожидаемое поведение — QR использует no-op компоновку текста |
| Цвета не применены | Имя свойства написано с ошибкой | Используйте точные имена свойств: foreground_color, background_color |