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 questionsConfiguraçõ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.VerticalLayout, 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
GlobalPageSettingsem 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.ExtraRowadiciona uma linha inicial de símbolos personalizados sem alterarColumnsCount.
Problemas Comuns
| Problema | Causa | Correção |
|---|---|---|
O conteúdo não é recortado mesmo com Overflow definido | O motor de renderização desta versão ainda não respeita Overflow/LongWordHandling | Ainda não disponível — rastreado no roadmap upstream |
SaveAsPdf() gera NotImplementedError | A exportação de PDF não está implementada nesta versão | Use 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étodo | Descrição |
|---|---|
TemplateConfig | Raiz do documento contendo PageConfig páginas |
PageConfig | Uma página física |
ChoiceBoxConfig / CheckBoxConfig / GridConfig / CompositeGridConfig / AnswerSheetConfig | Configurações do elemento de pergunta |
BlockConfig / ContainerConfig / PositionedBlockConfig | Contêineres de layout |
GlobalPageSettings | Padrões de todo o documento |