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پیش‌فرض‌های سراسری سند

همچنین ببینید:

 فارسی