Generation

Generation

A camada de geração (omr.generation) constrói um modelo — uma árvore de configurações de elementos — e o renderiza em uma imagem de página mais um descritor .omr via OmrEngine.Generate().


A Árvore de Modelo

TemplateConfig é a raiz do documento, contendo um ou mais objetos PageConfig. Cada elemento abaixo de uma página é uma subclasse de BaseConfig, que possui um Name e um discriminador Type (ConfigType).

from omr.generation.config import TemplateConfig
from omr.generation.config.elements.parents import PageConfig

tpl = TemplateConfig()
tpl.Name = "quiz"
page = PageConfig()
page.Children = []
tpl.Children = [page]

Elementos de Pergunta

  • ChoiceBoxConfig — uma pergunta com um conjunto fixo de bolhas de opções (ChoiceBoxAnswerConfig), suportando seleção múltipla e validação por pergunta.
  • AnswerSheetConfig — uma matriz numerada de bolhas de resposta para folhas no estilo de exame.
  • CheckBoxConfig — um grupo rotulado de caixas vazias que aceita qualquer marca, com um limiar de preenchimento ajustável.
  • GridConfig / CompositeGridConfig — matrizes de dígitos ou símbolos personalizados mescladas em um único valor.
from omr.generation.config.elements import AnswerSheetConfig

sheet = AnswerSheetConfig()
sheet.Name = "answers"
sheet.AnswersCount = 4    # bubbles per question (e.g. A-D)
sheet.ElementsCount = 20  # number of questions

Configurações de Página Inteira

GlobalPageSettings define padrões para todo o documento (tamanho do papel, orientação, fonte, tamanho da bolha) que elementos individuais podem sobrescrever. PaperSize e Orientation podem ser importados diretamente de omr.generation.

from omr.generation import GlobalPageSettings, Orientation, PaperSize

settings = GlobalPageSettings()
settings.PaperSize = PaperSize.A4
settings.Orientation = Orientation.Vertical

Layout, Overflow e Sistemas de Escrita

BlockConfig é uma caixa com borda e preenchimento; ContainerConfig organiza blocos filhos em colunas ou um rodapé; PositionedBlockConfig posiciona os filhos em coordenadas absolutas. LongWordHandling, as subclasses OverflowAction (Clip, NoClip, Wrap), e os sistemas de escrita Arabic/Hebrew/Persian/Urdu/Bengali analisam e validam corretamente para fidelidade API com a superfície Aspose.OMR, mas nenhum deles ainda é respeitado pelo mecanismo de renderização desta versão: o comportamento de overflow ainda não é configurável, e a renderização é apenas LTR/ocidental. Ambos estão rastreados no roadmap upstream como ainda não implementados.

A DSL de Marcação

A mesma árvore de elementos pode ser escrita como texto simples e passada diretamente para Generate().

from omr.api import OmrEngine

markup = ["?choicebox=Rate it", "(1) Poor (2) Fair (3) Good", "&choicebox"]
engine = OmrEngine()
result = engine.Generate(markup)

Dicas e Melhores Práticas

  • Defina valores padrão compartilhados uma vez em GlobalPageSettings em vez de repeti-los em cada elemento.
  • Use a DSL de marcação para iteração rápida; troque para a árvore code-first para geração programática.
  • CompositeGridConfig.ExtraRow adiciona uma linha inicial de símbolos personalizados sem alterar ColumnsCount.

Problemas Comuns

ProblemaCausaCorreção
O conteúdo não é recortado mesmo com Overflow definidoO motor de renderização desta versão ainda não respeita Overflow/LongWordHandlingAinda não disponível — rastreado no roadmap upstream
SaveAsPdf() gera NotImplementedErrorA exportação de PDF não está implementada nesta versãoUse Save() para saída PNG

FAQ

Posso misturar a DSL de marcação e as configurações code-first no mesmo modelo?

As duas são formas alternativas de construir a mesma árvore TemplateConfig; o Generate() desta versão aceita tanto uma fonte de marcação quanto uma instância TemplateConfig, mas não uma mistura em uma única chamada.

Como funcionam os templates de várias páginas?

TemplateConfig.Children contém múltiplos objetos PageConfig; GenerationResult.MultipageTemplateImages retorna uma imagem por página.


API Reference Resumo

Classe/MétodoDescrição
TemplateConfigRaiz do documento contendo PageConfig páginas
PageConfigUma página física
ChoiceBoxConfig / CheckBoxConfig / GridConfig / CompositeGridConfig / AnswerSheetConfigConfigurações do elemento de pergunta
BlockConfig / ContainerConfig / PositionedBlockConfigContêineres de layout
GlobalPageSettingsPadrões de todo o documento

Ver também

 Português