الحصول على الخصائص الفعّالة للشكل من العروض التقديمية في JavaScript
نظرة عامة
تشرح هذه المقالة الفرق بين الخصائص المحلية و الفعّالة. القيم المحلية هي القيم التي يتم تعيينها مباشرةً على مستوى تنسيق معين، مثل:
- خصائص الجزء على الشريحة.
- أنماط نص الشكل النموذجي على تخطيط أو شريحة رئيسية، عندما يحتوي شكل إطار النص للجزء على ذلك.
- إعدادات النص العامة في العرض التقديمي.
يمكن تعريف القيم المحلية أو إغفالها في أي مستوى. عندما يحتاج Aspose.Slides إلى التنسيق النهائي “كما يظهر”، يقوم بحل سلسلة الوراثة ويُعيد القيم الفعّالة. يمكنك الحصول عليها عن طريق استدعاء الطريقة getEffective على كائن التنسيق المحلي.
يوضح المثال التالي كيفية الحصول على القيم الفعّالة. يفترض أن الشكل الأول في الشريحة الأولى هو AutoShape يحتوي على إطار نص وعلى الأقل جزء واحد.
let presentation = new aspose.slides.Presentation("sample.pptx");
try {
let slide = presentation.getSlides().get_Item(0);
let shape = slide.getShapes().get_Item(0);
let localTextFrameFormat = shape.getTextFrame().getTextFrameFormat();
let effectiveTextFrameFormat = localTextFrameFormat.getEffective();
let paragraph = shape.getTextFrame().getParagraphs().get_Item(0);
let localPortionFormat = paragraph.getPortions().get_Item(0).getPortionFormat();
let effectivePortionFormat = localPortionFormat.getEffective();
} finally {
presentation.dispose();
}
getEffective مرة أخرى بعد تغيير التنسيق الوالدي أو المُورّث يمكن أن يجدد البيانات المخزنة، وقد لا يظل الكائن الذي تم الحصول عليه مسبقًا يمثل الحالة السابقة. إذا كنت بحاجة إلى حفظ القيم الفعّالة لإعادة استخدامها لاحقًا، انسخ الخصائص المطلوبة، مثل ارتفاع الخط، لون التعبئة، نمط الخط، أو المحاذاة، إلى كائن البيانات الخاص بك.
الحصول على الخصائص الفعّالة للكاميرا
Aspose.Slides يتيح لك الحصول على الخصائص الفعّالة للكاميرا. كائن بيانات الكاميرا الفعّالة يحتوي على خصائص كاميرا غير قابلة للتغيير ويتم إتاحة ذلك من خلال القيم الفعّالة التي تُرجع لـ ThreeDFormat.
يعرض عينة الكود التالية كيفية الحصول على الخصائص الفعّالة للكاميرا. يفترض أن الشكل الأول في الشريحة الأولى يحتوي على تنسيق ثلاثي الأبعاد.
let presentation = new aspose.slides.Presentation("sample.pptx");
try {
let slide = presentation.getSlides().get_Item(0);
let shape = slide.getShapes().get_Item(0);
let threeDEffectiveData = shape.getThreeDFormat().getEffective();
let camera = threeDEffectiveData.getCamera();
let cameraType = camera.getCameraType();
let fieldOfViewAngle = camera.getFieldOfViewAngle();
let zoom = camera.getZoom();
console.log("= Effective camera properties =");
console.log("Type: " + cameraType);
console.log("Field of view: " + fieldOfViewAngle);
console.log("Zoom: " + zoom);
} finally {
presentation.dispose();
}
الحصول على الخصائص الفعّالة لجهاز الإضاءة
Aspose.Slides يتيح لك الحصول على الخصائص الفعّالة لجهاز الإضاءة. كائن بيانات جهاز الإضاءة الفعّال يحتوي على خصائص جهاز إضاءة غير قابلة للتغيير ويتم إتاحة ذلك من خلال القيم الفعّالة التي تُرجع لـ ThreeDFormat.
يعرض عينة الكود التالية كيفية الحصول على الخصائص الفعّالة لجهاز الإضاءة. يفترض أن الشكل الأول في الشريحة الأولى يحتوي على تنسيق ثلاثي الأبعاد.
let presentation = new aspose.slides.Presentation("sample.pptx");
try {
let slide = presentation.getSlides().get_Item(0);
let shape = slide.getShapes().get_Item(0);
let threeDEffectiveData = shape.getThreeDFormat().getEffective();
let lightRig = threeDEffectiveData.getLightRig();
let lightType = lightRig.getLightType();
let direction = lightRig.getDirection();
console.log("= Effective light rig properties =");
console.log("Type: " + lightType);
console.log("Direction: " + direction);
} finally {
presentation.dispose();
}
الحصول على الخصائص الفعّالة للحدب (Bevel) في الشكل
Aspose.Slides يتيح لك الحصول على الخصائص الفعّالة لحدب الشكل. كائن بيانات حدب الشكل الفعّال يحتوي على خصائص نقش السطح غير القابلة للتغيير ويتم إتاحة ذلك من خلال القيم الفعّالة التي تُرجع لـ ThreeDFormat.
يعرض عينة الكود التالية كيفية الحصول على الخصائص الفعّالة للحدب العلوي لشكل. يفترض أن الشكل الأول في الشريحة الأولى يحتوي على تنسيق ثلاثي الأبعاد.
let presentation = new aspose.slides.Presentation("sample.pptx");
try {
let slide = presentation.getSlides().get_Item(0);
let shape = slide.getShapes().get_Item(0);
let threeDEffectiveData = shape.getThreeDFormat().getEffective();
let bevelTop = threeDEffectiveData.getBevelTop();
let bevelType = bevelTop.getBevelType();
let bevelWidth = bevelTop.getWidth();
let bevelHeight = bevelTop.getHeight();
console.log("= Effective shape's top face relief properties =");
console.log("Type: " + bevelType);
console.log("Width: " + bevelWidth);
console.log("Height: " + bevelHeight);
} finally {
presentation.dispose();
}
الحصول على الخصائص الفعّالة لإطار النص
باستخدام Aspose.Slides، يمكنك الحصول على الخصائص الفعّالة لإطار النص. كائن البيانات الفعّالية المرجع يحتوي على خصائص تنسيق إطار النص.
يعرض عينة الكود التالية كيفية الحصول على خصائص تنسيق إطار النص الفعّالة. يفترض أن الشكل الأول في الشريحة الأولى هو AutoShape يحتوي على إطار نص.
let presentation = new aspose.slides.Presentation("sample.pptx");
try {
let slide = presentation.getSlides().get_Item(0);
let shape = slide.getShapes().get_Item(0);
let textFrameFormat = shape.getTextFrame().getTextFrameFormat();
let effectiveTextFrameFormat = textFrameFormat.getEffective();
let anchoringType = effectiveTextFrameFormat.getAnchoringType();
let autofitType = effectiveTextFrameFormat.getAutofitType();
let textVerticalType = effectiveTextFrameFormat.getTextVerticalType();
let marginLeft = effectiveTextFrameFormat.getMarginLeft();
let marginTop = effectiveTextFrameFormat.getMarginTop();
let marginRight = effectiveTextFrameFormat.getMarginRight();
let marginBottom = effectiveTextFrameFormat.getMarginBottom();
console.log("Anchoring type: " + anchoringType);
console.log("Autofit type: " + autofitType);
console.log("Text vertical type: " + textVerticalType);
console.log("Margins");
console.log(" Left: " + marginLeft);
console.log(" Top: " + marginTop);
console.log(" Right: " + marginRight);
console.log(" Bottom: " + marginBottom);
} finally {
presentation.dispose();
}
الحصول على الخصائص الفعّالة لنمط النص
باستخدام Aspose.Slides، يمكنك الحصول على الخصائص الفعّالة لنمط النص. كائن البيانات الفعّالية المرجع يحتوي على خصائص نمط النص.
يعرض عينة الكود التالية كيفية الحصول على خصائص نمط النص الفعّالة. يفترض أن الشكل الأول في الشريحة الأولى هو AutoShape يحتوي على إطار نص.
let presentation = new aspose.slides.Presentation("sample.pptx");
try {
let slide = presentation.getSlides().get_Item(0);
let shape = slide.getShapes().get_Item(0);
let effectiveTextStyle = shape.getTextFrame().getTextFrameFormat().getTextStyle().getEffective();
let levelCount = 9;
for (let levelIndex = 0; levelIndex < levelCount; levelIndex++) {
let effectiveStyleLevel = effectiveTextStyle.getLevel(levelIndex);
let depth = effectiveStyleLevel.getDepth();
let indent = effectiveStyleLevel.getIndent();
let alignment = effectiveStyleLevel.getAlignment();
let fontAlignment = effectiveStyleLevel.getFontAlignment();
console.log("= Effective paragraph formatting for style level #" + levelIndex + " =");
console.log("Depth: " + depth);
console.log("Indent: " + indent);
console.log("Alignment: " + alignment);
console.log("Font alignment: " + fontAlignment);
}
} finally {
presentation.dispose();
}
الحصول على قيمة ارتفاع الخط الفعّال
باستخدام Aspose.Slides، يمكنك الحصول على ارتفاع الخط الفعّال. يوضح الكود التالي كيف يتغير ارتفاع الخط الفعّال لجزء بعد تعيين قيم ارتفاع الخط المحلية على مستويات مختلفة من بنية العرض التقديمي.
let presentation = new aspose.slides.Presentation();
try {
let slide = presentation.getSlides().get_Item(0);
let shapeType = aspose.slides.ShapeType.Rectangle;
let autoShape = slide.getShapes().addAutoShape(shapeType, 100, 100, 400, 75, false);
autoShape.addTextFrame("");
let paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
paragraph.getPortions().clear();
let firstPortion = new aspose.slides.Portion("Sample text with first portion");
let secondPortion = new aspose.slides.Portion(" and second portion.");
paragraph.getPortions().add(firstPortion);
paragraph.getPortions().add(secondPortion);
let firstPortionFormatEffectiveData = firstPortion.getPortionFormat().getEffective();
let secondPortionFormatEffectiveData = secondPortion.getPortionFormat().getEffective();
let firstPortionFontHeight = firstPortionFormatEffectiveData.getFontHeight();
let secondPortionFontHeight = secondPortionFormatEffectiveData.getFontHeight();
console.log("Effective font height just after creation:");
console.log("Portion #0: " + firstPortionFontHeight);
console.log("Portion #1: " + secondPortionFontHeight);
presentation.getDefaultTextStyle().getLevel(0).getDefaultPortionFormat().setFontHeight(24);
firstPortionFormatEffectiveData = firstPortion.getPortionFormat().getEffective();
secondPortionFormatEffectiveData = secondPortion.getPortionFormat().getEffective();
firstPortionFontHeight = firstPortionFormatEffectiveData.getFontHeight();
secondPortionFontHeight = secondPortionFormatEffectiveData.getFontHeight();
console.log("Effective font height after setting the presentation default font height:");
console.log("Portion #0: " + firstPortionFontHeight);
console.log("Portion #1: " + secondPortionFontHeight);
paragraph.getParagraphFormat().getDefaultPortionFormat().setFontHeight(40);
firstPortionFormatEffectiveData = firstPortion.getPortionFormat().getEffective();
secondPortionFormatEffectiveData = secondPortion.getPortionFormat().getEffective();
firstPortionFontHeight = firstPortionFormatEffectiveData.getFontHeight();
secondPortionFontHeight = secondPortionFormatEffectiveData.getFontHeight();
console.log("Effective font height after setting paragraph default font height:");
console.log("Portion #0: " + firstPortionFontHeight);
console.log("Portion #1: " + secondPortionFontHeight);
firstPortion.getPortionFormat().setFontHeight(55);
firstPortionFormatEffectiveData = firstPortion.getPortionFormat().getEffective();
secondPortionFormatEffectiveData = secondPortion.getPortionFormat().getEffective();
firstPortionFontHeight = firstPortionFormatEffectiveData.getFontHeight();
secondPortionFontHeight = secondPortionFormatEffectiveData.getFontHeight();
console.log("Effective font height after setting portion #0 font height:");
console.log("Portion #0: " + firstPortionFontHeight);
console.log("Portion #1: " + secondPortionFontHeight);
secondPortion.getPortionFormat().setFontHeight(18);
firstPortionFormatEffectiveData = firstPortion.getPortionFormat().getEffective();
secondPortionFormatEffectiveData = secondPortion.getPortionFormat().getEffective();
firstPortionFontHeight = firstPortionFormatEffectiveData.getFontHeight();
secondPortionFontHeight = secondPortionFormatEffectiveData.getFontHeight();
console.log("Effective font height after setting portion #1 font height:");
console.log("Portion #0: " + firstPortionFontHeight);
console.log("Portion #1: " + secondPortionFontHeight);
let saveFormat = aspose.slides.SaveFormat.Pptx;
presentation.save("SetLocalFontHeightValues.pptx", saveFormat);
} finally {
presentation.dispose();
}
الحصول على تنسيق التعبئة الفعّال لجدول
باستخدام Aspose.Slides، يمكنك الحصول على تنسيق التعبئة الفعّال لأجزاء مختلفة من الجدول. كائن البيانات الفعّالية المرجع يحتوي على خصائص تنسيق التعبئة. تنسيق الخلية له أولوية أعلى من تنسيق الصف، وتنسيق الصف له أولوية أعلى من تنسيق العمود، وتنسيق العمود له أولوية أعلى من تنسيق الجدول بالكامل.
وبالتالي تُستخدم خصائص تنسيق الخلية الفعّالة لرسم خلية الجدول. يعرض عينة الكود التالية كيفية الحصول على تنسيق التعبئة الفعّال لأجزاء مختلفة من الجدول. يفترض أن الشكل الأول في الشريحة الأولى هو Table.
let presentation = new aspose.slides.Presentation("sample.pptx");
try {
let slide = presentation.getSlides().get_Item(0);
let table = slide.getShapes().get_Item(0);
let tableFormatEffective = table.getTableFormat().getEffective();
let rowFormatEffective = table.getRows().get_Item(0).getRowFormat().getEffective();
let columnFormatEffective = table.getColumns().get_Item(0).getColumnFormat().getEffective();
let cellFormatEffective = table.get_Item(0, 0).getCellFormat().getEffective();
let tableFillFormatEffective = tableFormatEffective.getFillFormat();
let rowFillFormatEffective = rowFormatEffective.getFillFormat();
let columnFillFormatEffective = columnFormatEffective.getFillFormat();
let cellFillFormatEffective = cellFormatEffective.getFillFormat();
} finally {
presentation.dispose();
}
الأسئلة الشائعة
هل تُعيد getEffective لقطة ثابتة؟
ليس دائماً. تمثل البيانات الفعّالة التنسيق المحسوب بعد تطبيق الوراثة، ولكن قد يتم تخزين بعض كائنات البيانات الفعّالة مؤقتًا داخليًا. قد يؤدي استدعاء getEffective لاحقًا إلى إعادة حساب التنسيق وتحديث البيانات المخزنة، لذا لا ينبغي اعتبار الكائن الذي تم الحصول عليه مسبقًا كلقطة دائمة.
متى ينبغي قراءة الخصائص الفعّالة مرة أخرى؟
استدعِ getEffective مرة أخرى بعد تغيير التنسيق المحلي أو الأنماط الوالدية أو تنسيق التخطيط أو تنسيق الشريحة الرئيسة أو الإعدادات الافتراضية على مستوى العرض التقديمي. سيعيد الاستدعاء التالي تقييم شجرة التنسيق ويُعيد النتيجة الفعّالة الحالية.
هل يؤثر تعديل أو إزالة شريحة تخطيط/رئيسية على الخصائص الفعّالة التي تم استرجاعها بالفعل؟
نعم، لكن التغيير ينعكس في الاستدعاء التالي لـ getEffective. إذا تم تعديل أو إزالة مصدر تنسيق الوالد، قد تصبح البيانات الفعّالية المسترجعة سابقًا قديمة. بمجرد استدعاء getEffective مرة أخرى، يعيد Aspose.Slides تقييم شجرة التنسيق وقد تتغير الخطوط أو الألوان أو الأحجام أو القيم الأخرى.
هل يمكن تعديل القيم عبر كائنات البيانات الفعّالة؟
لا. كائنات البيانات الفعّالة تعرض القيم المحسوبة فقط. يجب إجراء التغييرات في كائنات التنسيق المحلية، ثم الحصول على القيم الفعّالة مرة أخرى.
ماذا يحدث إذا لم يتم تعيين خاصية على مستوى الشكل ولا في التخطيط/الرئيسية ولا في الإعدادات العامة؟
يتم تحديد القيمة الفعّالة عبر آلية القيم الافتراضية، التي تشمل القيم الافتراضية في PowerPoint و Aspose.Slides. تصبح القيمة المحلولة جزءًا من البيانات الفعّالة الحالية.
من قيمة الخط الفعّال، هل يمكنني معرفة أي مستوى قدم الحجم أو الخط؟
ليس مباشرة. تُعيد البيانات الفعّالة القيمة النهائية. لتحديد المصدر، تحقق من القيم المحلية على مستوى الجزء، الفقرة، إطار النص، وأنماط النص في التخطيط، الرئيسة، والعرض التقديمي لترى أين تظهر التعريف الأول الصريح.
لماذا تبدو القيم الفعّالية أحيانًا مطابقة للقيم المحلية؟
لأن القيمة المحلية أصبحت نهائية (لم يتطلب أي وراثة من مستوى أعلى). في مثل هذه الحالات، تتطابق القيمة الفعّالية مع القيمة المحلية.
متى يجب استخدام الخصائص الفعّالة، ومتى أكتفي بالخصائص المحلية؟
استخدم البيانات الفعّالة عندما تحتاج إلى النتيجة “كما تُعرض” بعد تطبيق جميع مستويات الوراثة، مثل مطابقة الألوان أو الهوامش أو الأحجام. إذا كنت بحاجة إلى الحفاظ على تلك القيم بغض النظر عن تغييرات التنسيق المستقبلية، انسخ الخصائص المطلوبة إلى كائنك الخاص. إذا كنت بحاجة إلى تعديل التنسيق على مستوى معين، عدل الخصائص المحلية ثم، إذا لزم الأمر، اقرأ البيانات الفعّالة مرة أخرى للتحقق من النتيجة.