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 | الإعدادات الافتراضية على مستوى المستند |