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-only. كلا الأمرين مُتابَران في خريطة الطريق العليا على أنهما غير منفذين بعد.

لغة توصيف العلامات 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 للترميز من أجل التكرار السريع؛ انتقل إلى شجرة الكود أولاً للتوليد البرمجي.
  • CompositeGridConfig.ExtraRow يضيف صفًا أوليًا من الرموز المخصصة دون تغيير ColumnsCount.

المشكلات الشائعة

المشكلةالسببالإصلاح
المحتوى لا يتم تقصيره حتى مع ضبط Overflowمحرك العرض في هذا الإصدار لا يلتزم بعد بـ Overflow/LongWordHandlingغير متوفر بعد — يتم تتبعه في خارطة الطريق العليا
SaveAsPdf() يثير NotImplementedErrorتصدير PDF غير مُطبق في هذا الإصداراستخدم Save() لإخراج PNG

FAQ

هل يمكنني دمج DSL للترميز وإعدادات الكود أولاً في نفس القالب؟

الطريقتان هما بدائل لبناء نفس شجرة TemplateConfig؛ Generate() في هذا الإصدار يقبل إما مصدر ترميز أو مثال TemplateConfig، وليس مزيجًا في نداء واحد.

كيف تعمل القوالب متعددة الصفحات؟

يحتوي TemplateConfig.Children على عدة كائنات PageConfig؛ GenerationResult.MultipageTemplateImages تُرجع صورة واحدة لكل صفحة.


API Reference ملخص

فئة/طريقةوصف
TemplateConfigجذر المستند يحتوي على صفحات PageConfig
PageConfigصفحة فعلية واحدة
ChoiceBoxConfig / CheckBoxConfig / GridConfig / CompositeGridConfig / AnswerSheetConfigإعدادات عنصر السؤال
BlockConfig / ContainerConfig / PositionedBlockConfigحاويات التخطيط
GlobalPageSettingsالإعدادات الافتراضية على مستوى المستند

انظر أيضاً

 العربية