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, але жодна з них ще не підтримується рендер-двигуном цього випуску: поведінка переповнення ще не конфігурована, а рендеринг лише LTR/західний. Обидва відстежуються у 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 | Типові налаштування документа |