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/Western انجام میشود. هر دو مورد در نقشه راه بالادست بهعنوان پیادهسازینشده پیگیری میشوند.
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 را رعایت نمیکند | هنوز در دسترس نیست — در نقشه راه بالادستی پیگیری میشود |
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 | پیشفرضهای سراسری سند |