Generation

Generation

Слой генерации (omr.generation) создает шаблон — дерево конфигураций элементов — и рендерит его в изображение страницы плюс дескриптор .omr через OmrEngine.Generate().


Дерево шаблона

TemplateConfig является корнем документа, содержащим один или более объектов PageConfig. Каждый элемент ниже страницы является подклассом BaseConfig, содержащим Name и дискриминатор 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]

Элементы вопросов

  • ChoiceBoxConfig — вопрос с фиксированным набором вариантных пузырьков (ChoiceBoxAnswerConfig), поддерживающий множественный выбор и проверку на уровне вопроса.
  • AnswerSheetConfig — нумерованная матрица ответных пузырьков для экзаменационных листов.
  • CheckBoxConfig — помеченная группа пустых ячеек, принимающая любой знак, с настраиваемым порогом заполнения.
  • GridConfig / CompositeGridConfig — матрицы цифр или пользовательских символов, объединённые в одно значение.
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

Настройки на уровне всей страницы

GlobalPageSettings задаёт глобальные значения по умолчанию для документа (размер бумаги, ориентация, шрифт, размер пузырька), которые отдельные элементы могут переопределять. PaperSize и Orientation можно импортировать напрямую из omr.generation.

from omr.generation import GlobalPageSettings, Orientation, PaperSize

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

Разметка, переполнение и системы письма

BlockConfig представляет собой рамочный, с отступами ящик; ContainerConfig располагает дочерние блоки в колоннах или внизу страницы; PositionedBlockConfig размещает дочерние элементы по абсолютным координатам. LongWordHandling, подклассы OverflowAction (Clip, NoClip, Wrap) и системы письма Arabic/Hebrew/Persian/Urdu/Bengali все корректно разбирают и валидируют API точность с поверхностью Aspose.OMR, но ни одна из них пока не поддерживается движком рендеринга этой версии: поведение переполнения ещё не настраиваемо, а рендеринг работает только слева-направо/западный стиль. Оба пункта находятся в upstream roadmap как ещё не реализованные.

DSL разметки

То же дерево элементов можно записать в виде простого текста и передать напрямую в Generate().

from omr.api import OmrEngine

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

Советы и лучшие практики

  • Установите общие значения по умолчанию один раз на GlobalPageSettings, а не повторяйте их для каждого элемента.
  • Используйте DSL разметки для быстрой итерации; переключитесь на дерево code-first для программной генерации.
  • CompositeGridConfig.ExtraRow добавляет ведущую строку пользовательских символов без изменения ColumnsCount.

Распространённые проблемы

ПроблемаПричинаИсправление
Содержимое не обрезается даже при установленном OverflowВ этом выпуске движок рендеринга ещё не учитывает Overflow/LongWordHandlingЕще недоступно — отслеживается в дорожной карте upstream
SaveAsPdf() вызывает NotImplementedErrorЭкспорт в PDF не реализован в этом выпускеИспользуйте Save() для вывода PNG

FAQ

Могу ли я смешивать DSL разметки и конфигурации code-first в одном шаблоне?

Это два альтернативных способа построить одно и то же дерево TemplateConfig; Generate() этого выпуска принимает либо источник разметки, либо экземпляр TemplateConfig, но не их сочетание в одном вызове.

Как работают шаблоны с несколькими страницами?

TemplateConfig.Children хранит несколько объектов PageConfig; GenerationResult.MultipageTemplateImages возвращает одно изображение на страницу.


API Reference Сводка

Класс/МетодОписание:
TemplateConfigКорневой каталог документа, содержащий PageConfig страниц
PageConfigОдна физическая страница
ChoiceBoxConfig / CheckBoxConfig / GridConfig / CompositeGridConfig / AnswerSheetConfigКонфигурации элемента вопроса
BlockConfig / ContainerConfig / PositionedBlockConfigКонтейнеры макета
GlobalPageSettingsНастройки по умолчанию документа

См. также:

 Русский