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 | Настройки по умолчанию документа |