تنسيق نص العرض التقديمي في .NET
نظرة عامة
توضح هذه المقالة كيفية تنسيق النص في عروض PowerPoint وOpenDocument باستخدام Aspose.Slides for .NET. تغطي ألوان الخلفية، الشفافية، تباعد الأحرف، خصائص الخط، الدوران، تباعد الفقرات، سلوك الضبط التلقائي، تثبيت النص، مواضع الفواصل، وإعدادات اللغة.
ما لم يُذكر خلاف ذلك، تستخدم الأمثلة sample.pptx. الشكل الأول في الشريحة الأولى هو مربع نص، وتحتوي الفقرة الأولى على النص المعروض أدناه. كل من فهارس الشرائح والأشكال تبدأ من الصفر. الأمثلة التي تُحدِّد أجزاءً بالخط العريض تستخدم التنسيق الفعّال، بما في ذلك التنسيق العريض الموروث:

للعثور على نص حرفي أو تطابقات تعبير عادي وتظليلها، راجع بحث واستبدال النص.
ضبط لون خلفية النص
استخدم IParagraphFormat.DefaultPortionFormat لتعيين اللون المظلل الافتراضي لفقرة، أو استخدم IBasePortionFormat.HighlightColor لأجزاء نصية فردية.
المثال التالي يضبط تظليلًا رماديًا فاتحًا كافتراضية للفقرة الأولى. تُعطي ألوان التظليل الصريحة لأجزاء فردية الأولوية على هذا الإعداد الافتراضي:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
// تعيين لون التظليل للفقرة بأكملها.
presentation.Save("gray_paragraph.pptx", SaveFormat.Pptx);
النتيجة:

يوضح مثال الشيفرة أدناه كيفية ضبط لون الخلفية لأجزاء النص ذات الخط العريض:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
foreach (var portion in paragraph.Portions)
{
if (portion.PortionFormat.GetEffective().FontBold)
{
// تعيين لون التظليل لجزء النص.
portion.PortionFormat.HighlightColor.Color = Color.LightGray;
}
}
presentation.Save("gray_text_portions.pptx", SaveFormat.Pptx);
النتيجة:

محاذاة فقرات النص
استخدم IParagraphFormat.Alignment لتعيين محاذاة الفقرة داخل إطار النص. يمكن أن تكون القيمة مركزية، محاذاة إلى اليسار، محاذاة إلى اليمين، مبررة، إلخ.
المثال التالي يوضح كيفية محاذاة الفقرة إلى المركز:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
// تعيين محاذاة الفقرة إلى المركز.
paragraph.ParagraphFormat.Alignment = TextAlignment.Center;
presentation.Save("aligned_paragraph.pptx", SaveFormat.Pptx);
النتيجة:

محاذاة الخطوط داخل سطر
استخدم IParagraphFormat.FontAlignment لمحاذاة أجزاء النص ذات أحجام خطوط مختلفة عموديًا داخل سطر. ينطبق هذا الإعداد على الفقرة بأكملها ويتحكم في المحاذاة داخل كل سطر منها.
المثال التالي المستقل يُنشئ أربعة مربعات نصية معنونة على شريحة واحدة. تحتوي كل فقرة على نفس النص بحجم 18، 36، و54 نقطة، مع محاذاة خط مختلفة. يستخدم الخط Arial، ويعطل الضبط التلقائي واللف، ويحافظ على إطارات النص كبيرة بما يكفي لسطر واحد.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var alignments = new[] { FontAlignment.Baseline, FontAlignment.Top, FontAlignment.Center, FontAlignment.Bottom };
var fontSizes = new[] { 18f, 36f, 54f };
for (var i = 0; i < alignments.Length; i++)
{
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 30, 20 + i * 130, 660, 120);
shape.FillFormat.FillType = FillType.NoFill;
shape.LineFormat.FillFormat.FillType = FillType.NoFill;
var textFrame = shape.TextFrame;
textFrame.TextFrameFormat.AnchoringType = TextAnchorType.Top;
textFrame.TextFrameFormat.AutofitType = TextAutofitType.None;
textFrame.TextFrameFormat.WrapText = NullableBool.False;
var label = textFrame.Paragraphs[0];
label.Text = alignments[i].ToString();
label.ParagraphFormat.Alignment = TextAlignment.Left;
label.ParagraphFormat.DefaultPortionFormat.FontHeight = 14;
label.ParagraphFormat.DefaultPortionFormat.LatinFont = new FontData("Arial");
label.ParagraphFormat.DefaultPortionFormat.FillFormat.FillType = FillType.Solid;
label.ParagraphFormat.DefaultPortionFormat.FillFormat.SolidFillColor.Color = Color.Gray;
var paragraph = new Paragraph();
paragraph.ParagraphFormat.FontAlignment = alignments[i];
paragraph.ParagraphFormat.Alignment = TextAlignment.Left;
paragraph.ParagraphFormat.DefaultPortionFormat.LatinFont = new FontData("Arial");
paragraph.ParagraphFormat.DefaultPortionFormat.FillFormat.FillType = FillType.Solid;
paragraph.ParagraphFormat.DefaultPortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
foreach (var fontSize in fontSizes)
{
var portion = new Portion("Ag ");
portion.PortionFormat.FontHeight = fontSize;
paragraph.Portions.Add(portion);
}
textFrame.Paragraphs.Add(paragraph);
}
presentation.Save("font_alignment.pptx", SaveFormat.Pptx);
النتيجة:

تستخدم محاذاة الخط مقاييس الخط، لذا قد لا تتطابق حواف الحروف الفردية تمامًا. يتضمن المثال حرفًا كبيرًا وحرفًا هابطًا لتوضيح الفرق بين المحاذاة الأساسية والسفلية. تؤثر توفر الخطوط والاستبدال، والحروف المستخدمة، والفرق في أحجام الخطوط على النتيجة. كما تؤثر أبعاد الإطار، الهوامش، تباعد الأسطر، اللف، والضبط التلقائي على التخطيط؛ استخدم نفس الخطوط وإعدادات التخطيط عند مقارنة الأنماط.
يختلف هذا الإعداد عن IParagraphFormat.Alignment، الذي يتحكم في محاذاة الفقرة أفقياً، وعن ITextFrameFormat.AnchoringType، الذي يحدد موضع كتلة النص عموديًا داخل الشكل. يُؤدي تنسيق النص العلوي والسفلي عبر IBasePortionFormat.Escapement إلى إزاحة أجزاء فردية بالنسبة للخط الأساسي بدلاً من ضبط محاذاة الخط لأسطر الفقرة.
ضبط الشفافية للنص
تُتحكم شفافية النص عبر مكوّن ألفا للون المخصّص إلى IBasePortionFormat.FillFormat. في الأمثلة أدناه، alpha = 50 هو قيمة قناة ألفا بنظام ARGB على مقياس 0–255، وليس نسبة شفافية.
يوضح مثال الشيفرة أدناه كيفية تطبيق الشفافية على الفقرة بالكامل:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
var alpha = 50;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
// تعيين تعبئة سوداء شبه شفافة للنص.
paragraph.ParagraphFormat.DefaultPortionFormat.FillFormat.FillType = FillType.Solid;
paragraph.ParagraphFormat.DefaultPortionFormat.FillFormat.SolidFillColor.Color = Color.FromArgb(alpha, Color.Black);
presentation.Save("transparent_paragraph.pptx", SaveFormat.Pptx);
النتيجة:

المثال التالي يوضح كيفية تطبيق الشفافية على أجزاء النص ذات الخط العريض:
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
var alpha = 50;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
foreach (var portion in paragraph.Portions)
{
if (portion.PortionFormat.GetEffective().FontBold)
{
// تعيين شفافية جزء النص.
portion.PortionFormat.FillFormat.FillType = FillType.Solid;
portion.PortionFormat.FillFormat.SolidFillColor.Color = Color.FromArgb(alpha, Color.Black);
}
}
presentation.Save("transparent_text_portions.pptx", SaveFormat.Pptx);
النتيجة:

ضبط تباعد الأحرف للنص
استخدم IBasePortionFormat.Spacing لتوسيع أو تضييق التباعد بين الأحرف في مربع النص. تضيف الأمثلة 3 نقاط من التباعد؛ القيم السلبية تضيق النص.
الكود التالي بلغة C# يوضح كيفية توسيع تباعد الأحرف في الفقرة بالكامل:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
// ملاحظة: استخدم قيم سلبية لضغط تباعد الأحرف.
paragraph.ParagraphFormat.DefaultPortionFormat.Spacing = 3; // توسيع تباعد الأحرف.
presentation.Save("character_spacing_in_paragraph.pptx", SaveFormat.Pptx);
النتيجة:

المثال التالي يوضح كيفية توسيع تباعد الأحرف في أجزاء النص ذات الخط العريض:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
foreach (var portion in paragraph.Portions)
{
if (portion.PortionFormat.GetEffective().FontBold)
{
// ملاحظة: استخدم قيم سلبية لضغط تباعد الأحرف.
portion.PortionFormat.Spacing = 3; // توسيع تباعد الأحرف.
}
}
presentation.Save("character_spacing_in_text_portions.pptx", SaveFormat.Pptx);
النتيجة:

تعطيل الكيرنينغ للخطوط المحددة
في بعض الحالات قد يبدو النص المولَّد بواسطة Aspose.Slides أكثر ضيقًا قليلاً من النص المعروض في PowerPoint. قد يحدث هذا لأن PowerPoint يتجاهل بيانات الكيرنينغ لبعض الخطوط، حتى عندما يحتوي الخط على معلومات كيرنينغ صالحة ويكون الكيرنينغ مفعَّلًا في إعدادات PowerPoint.
لتقريب المخرجات المولَّدة من PowerPoint في هذه الحالات، يمكنك تعطيل الكيرنينغ لأجزاء النص التي تستخدم الخط المتأثر. اضبط IBasePortionFormat.KerningMinimalSize على قيمة أكبر من حجم الخط الفعلي. يتطلب هذا المثال ملف “presentation.pptx” يحتوي على مربع نص كأول شكل في الشريحة الأولى. يتحقق من أسماء الخطوط الفعّالة، بما فيها الخطوط الموروثة، ويضبط عتبة 100 نقطة للأجزاء التي تستخدم Roboto. هذا يعطل الكيرنينغ للأجزاء المطابقة التي يقل حجم الخط فيها عن 100 نقطة:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("presentation.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var targetFont = "Roboto";
foreach (var paragraph in autoShape.TextFrame.Paragraphs)
{
foreach (var portion in paragraph.Portions)
{
var textFormat = portion.PortionFormat.GetEffective();
var usesTargetFont = textFormat.LatinFont?.FontName == targetFont ||
textFormat.EastAsianFont?.FontName == targetFont ||
textFormat.ComplexScriptFont?.FontName == targetFont;
if (usesTargetFont)
{
portion.PortionFormat.KerningMinimalSize = 100;
}
}
}
presentation.Save("output.pptx", SaveFormat.Pptx);
للنص المتطابق الذي يقل عن العتبة، يمنع هذا الإعداد الكيرنينغ ويساعد في تقريب مخرجات Aspose.Slides إلى مخرجات PowerPoint البصرية للخطوط المتأثرة بهذا السلوك الخاص بـ PowerPoint.
إدارة خصائص خط النص
يمكن ضبط خصائص الخط على مستوى الفقرة عبر IParagraphFormat.DefaultPortionFormat أو على أجزاء فردية عبر IPortionFormat.
المثال التالي يضبط الخط الافتراضي للفقرة الأولى إلى Times New Roman بحجم 12 نقطة مع تنسيق عريض ومائل وتسطير نقطي. يتفوق التنسيق الصريح على الأجزاء الفردية على هذه القيم الافتراضية:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
// ضبط خصائص الخط للفقرة.
var portionFormat = paragraph.ParagraphFormat.DefaultPortionFormat;
portionFormat.FontHeight = 12;
portionFormat.FontBold = NullableBool.True;
portionFormat.FontItalic = NullableBool.True;
portionFormat.FontUnderline = TextUnderlineType.Dotted;
portionFormat.LatinFont = new FontData("Times New Roman");
presentation.Save("font_properties_for_paragraph.pptx", SaveFormat.Pptx);
النتيجة:

المثال التالي يطبق Times New Roman بحجم 13 نقطة، تنسيق مائل، وتسطير نقطي على الأجزاء التي يكون تنسيقها الفعّال عريضًا:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
foreach (var portion in paragraph.Portions)
{
if (portion.PortionFormat.GetEffective().FontBold)
{
// ضبط خصائص الخط لجزء النص.
portion.PortionFormat.FontHeight = 13;
portion.PortionFormat.FontItalic = NullableBool.True;
portion.PortionFormat.FontUnderline = TextUnderlineType.Dotted;
portion.PortionFormat.LatinFont = new FontData("Times New Roman");
}
}
presentation.Save("font_properties_for_text_portions.pptx", SaveFormat.Pptx);
النتيجة:

التحكم في تطبيع ارتفاع النص
استخدم IBasePortionFormat.NormaliseHeight عند إعادة إنتاج أنماط القوالب أو دراسة الفروق في ارتفاع الأحرف. في PowerPoint، تُفعّل عملية التطبيع تمزق أو ضغط الأحرف عموديًا لتمنحها ارتفاعًا مرئيًا موحدًا داخل جزء النص. لا يضمن ذلك تساوي ارتفاعات النص عبر خطوط مختلفة.
اضبط الخاصية إلى NullableBool.True أو False لتمكين أو تعطيل التطبيع صراحةً. NullableBool.NotDefined يترك الإعداد المحلي غير مُحدد بحيث يرث الجزء قيمته، على سبيل المثال من DefaultPortionFormat الخاص بالفقرة. هذا لا يعني False. استخدم IPortionFormat.GetEffective واقرأ IBasePortionFormatEffectiveData.NormaliseHeight للحصول على القيمة المنطقية المحلولة.
المثال المستقل التالي يتطلب تثبيت Arial. يُنشئ كتلتين نصيتين تحتويان على نفس الحروف الكبيرة، الحروف الصغيرة، الحروف النازلة، وحروف مُعَلمة بحجم 54 نقطة. تُفعَّل الفقرتان التطبيع افتراضيًا. الجزء العلوي يعطل التطبيع صراحةً؛ الجزء السفلي يرث الإعداد. أحجام الإطارات، الهوامش، وتباعد الفقرات متطابقة، مع تعطيل اللف والضبط التلقائي لضمان مقارنات ثابتة. يطبع المثال False: False وNotDefined: True، ثم يحفظ “text_height_normalization.pptx”.
using System;
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var settings = new[] { NullableBool.False, NullableBool.NotDefined };
for (var i = 0; i < settings.Length; i++)
{
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 30, 60 + i * 200, 660, 150);
shape.FillFormat.FillType = FillType.NoFill;
shape.LineFormat.FillFormat.FillType = FillType.NoFill;
var textFrame = shape.TextFrame;
textFrame.Text = "Hxgjpq ÅÉ 0123";
textFrame.TextFrameFormat.AutofitType = TextAutofitType.None;
textFrame.TextFrameFormat.WrapText = NullableBool.False;
textFrame.TextFrameFormat.AnchoringType = TextAnchorType.Top;
textFrame.TextFrameFormat.MarginTop = 0;
textFrame.TextFrameFormat.MarginLeft = 0;
var paragraph = textFrame.Paragraphs[0];
paragraph.ParagraphFormat.Alignment = TextAlignment.Left;
paragraph.ParagraphFormat.SpaceBefore = 0;
paragraph.ParagraphFormat.SpaceAfter = 0;
paragraph.ParagraphFormat.SpaceWithin = 100;
paragraph.ParagraphFormat.DefaultPortionFormat.NormaliseHeight = NullableBool.True;
var portion = paragraph.Portions[0];
portion.PortionFormat.LatinFont = new FontData("Arial");
portion.PortionFormat.FontHeight = 54;
portion.PortionFormat.FillFormat.FillType = FillType.Solid;
portion.PortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
portion.PortionFormat.NormaliseHeight = settings[i];
Console.WriteLine($"{settings[i]}: {portion.PortionFormat.GetEffective().NormaliseHeight}");
}
presentation.Save("text_height_normalization.pptx", SaveFormat.Pptx);
المقارنة أدناه تم تصديرها من العرض المحفوظ. الصف العلوي فيه التطبيع معطل (False); الصف السفلي يرث الإعداد المفعَّل (NotDefined → True). احرص على تثبيت Arial لإعادة إنتاج هذا المظهر.

يُغيّر التطبيع ارتفاع الأحرف دون تعديل قيمة FontHeight المعينة، والتي تحدد حجم الخط بالنقاط. يتحكم SpaceWithin في الفقرة بتباعد الأسطر، بينما يتحكم AutofitType لإطار النص في كيفية تعديل النص أو حاويته ليتناسب. تخدم هذه الإعدادات أغراضًا مختلفة ويمكن أن تؤثر على التخطيط العام بشكل مستقل. لمزيد من التفاصيل حول تنسيق الفقرة والوراثة، راجع إدارة الفقرة.
تطبيق وإزالة الخط عبر النص
استخدم IBasePortionFormat.StrikethroughType على جزء نص لتظهر تصحيحات، مصطلحات ملغاة، أو أسعار سابقة دون حذف النص الأصلي. اضبطه إلى TextStrikethroughType.Single أو Double لسطر واحد أو سطرين عبر النص.
لإزالة الخط عبر النص، عيّن TextStrikethroughType.None. هذا يُعطّل التأثير صراحةً، حتى وإن كان التنسيق المحيط يحدد وجود خط عبر النص. بالمقابل، TextStrikethroughType.NotDefined يترك الإعداد المحلي غير مُعرف، ما يسمح للجزء بوراثة التنسيق، على سبيل المثال من الفقرة. لا يضمن ذلك إزالة الخط عبر النص. استخدم IPortionFormat.GetEffective لقراءة التنسيق الناتج، بما في ذلك القيم الموروثة.
المثال المستقل التالي يُنشئ ثلاث مقارنات أسعار. لكل فقرة أجزاء منفصلة للعلامة، السعر السابق، والسعر الحالي، بحيث يتأثر السعر السابق فقط. الصف الأول يطبق ثم يزيل الخط عبر النص؛ الصفوف الأخرى تحتفظ بخط عبر نص واحد أو مزدوج. تغيير هذه الخاصية يحافظ على النص وتنسيقه الآخر، بما في ذلك السعر السابق العريض.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 50, 620, 220);
shape.FillFormat.FillType = FillType.NoFill;
shape.LineFormat.FillFormat.FillType = FillType.NoFill;
shape.TextFrame.Paragraphs.Clear();
var labels = new[] { "None: ", "Single: ", "Double: " };
foreach (var label in labels)
{
var paragraph = new Paragraph();
paragraph.ParagraphFormat.Alignment = TextAlignment.Left;
paragraph.ParagraphFormat.SpaceAfter = 20;
var format = paragraph.ParagraphFormat.DefaultPortionFormat;
format.FontHeight = 28;
format.LatinFont = new FontData("Arial");
format.FillFormat.FillType = FillType.Solid;
format.FillFormat.SolidFillColor.Color = Color.Black;
paragraph.Portions.Add(new Portion(label));
var previousPrice = new Portion("$100");
previousPrice.PortionFormat.FontBold = NullableBool.True;
paragraph.Portions.Add(previousPrice);
paragraph.Portions.Add(new Portion(" → $80"));
shape.TextFrame.Paragraphs.Add(paragraph);
}
var paragraphs = shape.TextFrame.Paragraphs;
// تطبيق الخط عبر النص، ثم إزالته صراحةً من السعر السابق الأول.
paragraphs[0].Portions[1].PortionFormat.StrikethroughType = TextStrikethroughType.Single;
paragraphs[0].Portions[1].PortionFormat.StrikethroughType = TextStrikethroughType.None;
paragraphs[1].Portions[1].PortionFormat.StrikethroughType = TextStrikethroughType.Single;
paragraphs[2].Portions[1].PortionFormat.StrikethroughType = TextStrikethroughType.Double;
presentation.Save("strikethrough.pptx", SaveFormat.Pptx);
النتيجة من الأعلى إلى الأسفل: لا خط عبر النص، خط عبر نص واحد، وخط عبر نص مزدوج.

ضبط دوران النص
استخدم ITextFrameFormat.TextVerticalType لتعيين اتجاه نص مسبق داخل الشكل.
المثال التالي يضبط اتجاه النص في الشكل إلى TextVerticalType.Vertical270، مما يدور النص 90 درجة عكس عقارب الساعة:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
autoShape.TextFrame.TextFrameFormat.TextVerticalType = TextVerticalType.Vertical270;
presentation.Save("text_rotation.pptx", SaveFormat.Pptx);
النتيجة:

ضبط دوران مخصص لإطارات النص
استخدم ITextFrameFormat.RotationAngle لتعيين زاوية دوران مخصصة لـ ITextFrame.
المثال التالي يدور إطار النص بزاوية 3 درجات مع اتجاه عقارب الساعة داخل الشكل:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
autoShape.TextFrame.TextFrameFormat.RotationAngle = 3;
presentation.Save("custom_text_rotation.pptx", SaveFormat.Pptx);
النتيجة:

ضبط تباعد الأسطر للفقرات
توفر Aspose.Slides الخصائص IParagraphFormat.SpaceAfter، IParagraphFormat.SpaceBefore، وIParagraphFormat.SpaceWithin للتحكم في تباعد الفقرات. تُستخدم هذه الخصائص كما يلي:
- استخدم قيمة موجبة لتحديد تباعد السطر كنسبة مئوية من ارتفاع السطر.
- استخدم قيمة سالبة لتحديد تباعد السطر بالنقاط.
المثال التالي يضبط التباعد داخل الفقرة الأولى إلى 200% من ارتفاع السطر (تباعد مزدوج):
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
paragraph.ParagraphFormat.SpaceWithin = 200;
presentation.Save("line_spacing.pptx", SaveFormat.Pptx);
النتيجة:

التحكم في تقسيم الأسطر
قواعد تقسيم أسطر الفقرة مفيدة في كتل النص الضيقة والعروض التي تمزج بين النص اللاتيني والآسيوي الشرقي. تنتمي الخصائص التالية إلى IParagraphFormat، لذا فهي تُطبق على الفقرة بأكملها:
- LatinLineBreak يتحكم في قواعد تقسيم السطر اللاتيني. في النص المختلط، قد يغير تغييرها موقع لف النص الآسيوي الشرقي وعلامات الترقيم المجاورة.
- EastAsianLineBreak يتحكم في قواعد تقسيم السطر الآسيوي الشرقي، بما في ذلك القيود على الأحرف في بداية ونهاية السطر.
هذه القواعد لا تحل محل ITextFrameFormat.WrapText، الذي يُمكّن اللف التلقائي داخل إطار النص. فهي تؤثر على التخطيط عندما يحدث اللف؛ لا تُدرج أحرف فاصل سطر. يُجبر فاصل السطر الصريح على سطر جديد داخل الفقرة بغض النظر عن العرض المتاح.
المثال المستقل التالي يُنشئ كتلة نصية ضيقة تحتوي على نص صيني ونص لاتيني. يحدد كلا خاصيتي تقسيم السطر صراحةً ويحفظ “line_breaking.pptx”. لتجربة أي قاعدة، غيّر قيمة الخاصية مع إبقاء الأخرى ثابتة. يستخدم المثال خط Arial بحجم 24 نقطة وخط SimSun بعرض إطار 160 نقطة وصفر هوامش أفقية لإطار النص. يُضبط ITextFrameFormat.AutofitType إلى TextAutofitType.None للحفاظ على حجم النص وإطار النص ثابتين.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 50, 160, 300);
shape.FillFormat.FillType = FillType.NoFill;
var textFrame = shape.TextFrame;
textFrame.TextFrameFormat.WrapText = NullableBool.True;
textFrame.TextFrameFormat.AutofitType = TextAutofitType.None;
textFrame.TextFrameFormat.MarginLeft = 0;
textFrame.TextFrameFormat.MarginRight = 0;
var paragraph = textFrame.Paragraphs[0];
paragraph.Text = "中文排版测试,PowerPoint 中文演示。";
var format = paragraph.ParagraphFormat;
format.Alignment = TextAlignment.Left;
format.DefaultPortionFormat.FontHeight = 24;
format.DefaultPortionFormat.LatinFont = new FontData("Arial");
format.DefaultPortionFormat.EastAsianFont = new FontData("SimSun");
format.DefaultPortionFormat.FillFormat.FillType = FillType.Solid;
format.DefaultPortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
format.LatinLineBreak = NullableBool.False;
format.EastAsianLineBreak = NullableBool.True;
presentation.Save("line_breaking.pptx", SaveFormat.Pptx);
التحكم في علامات الترقيم المعلقة
يتيح IParagraphFormat.HangingPunctuation للعلامات المسموح بها أن تمتد إلى ما وراء الحافة اليمنى لسطر النص بدلاً من الاحتلال في السطر التالي. ينطبق على الفقرة بأكملها وهو مختلف عن المسافة المعلقة.
المثال المستقل التالي يُفعّل علامات الترقيم المعلقة في إطار نص عرضه 100 نقطة ويحفظ “hanging_punctuation.pptx”. باستخدام خط Arial بحجم 24 نقطة وصفر هوامش أفقية لإطار النص، يبقى النقطة الأخيرة بعد كلمة “sentence” وتتمدد إلى ما وراء حافة النص اليمنى. اضبط الخاصية إلى NullableBool.False للمقارنة: مع هذه الإعدادات، تحتل النقطة سطرًا منفصلًا. يُفعَّل اللف ويُعطَّل الضبط التلقائي للحفاظ على عرض ثابت.
using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
var slide = presentation.Slides[0];
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 50, 100, 200);
shape.FillFormat.FillType = FillType.NoFill;
var textFrame = shape.TextFrame;
textFrame.TextFrameFormat.WrapText = NullableBool.True;
textFrame.TextFrameFormat.AutofitType = TextAutofitType.None;
textFrame.TextFrameFormat.MarginLeft = 0;
textFrame.TextFrameFormat.MarginRight = 0;
var paragraph = textFrame.Paragraphs[0];
paragraph.Text = "Simple text, next sentence.";
var format = paragraph.ParagraphFormat;
format.Alignment = TextAlignment.Left;
format.DefaultPortionFormat.FontHeight = 24;
format.DefaultPortionFormat.LatinFont = new FontData("Arial");
format.DefaultPortionFormat.FillFormat.FillType = FillType.Solid;
format.DefaultPortionFormat.FillFormat.SolidFillColor.Color = Color.Black;
format.HangingPunctuation = NullableBool.True;
presentation.Save("hanging_punctuation.pptx", SaveFormat.Pptx);
ليس كل علامة ترقيم يمكن أن تتدلق. تنطبق الشروط المتعلقة بالخط والتخطيط المذكورة أعلاه أيضًا على هذه المقارنة: تغيير الخط أو العرض المتاح أو الهوامش أو إعدادات الضبط التلقائي قد يزيل الفرق المرئي.
ضبط نوع الضبط التلقائي لإطارات النص
يحدّ ITextFrameFormat.AutofitType من طريقة تصرف النص عندما يتجاوز حدود حاويته. استخدمه للتحكم فيما إذا كان النص يُصغر، يفيض، أو يُعيد تحجيم الشكل تلقائيًا. المثال التالي يضبط الشكل لإعادة التحجيم ليتناسب مع النص ويحفظ النتيجة في “autofit_type.pptx”.
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
autoShape.TextFrame.TextFrameFormat.AutofitType = TextAutofitType.Shape;
presentation.Save("autofit_type.pptx", SaveFormat.Pptx);
لعد الأسطر بعد اللف التلقائي ورؤية كيفية تغير عرض النص أو الشكل، راجع عد الأسطر المرسومة. عدد الأسطر وحده لا يُظهر ما إذا كان النص يفيض عن حاويته.
ضبط مرساة إطارات النص
يحدد ITextFrameFormat.AnchoringType كيفية وضع النص عموديًا داخل الشكل، مثلًا في الأعلى، الوسط، أو الأسفل. المثال التالي يثبت النص في أسفل الشكل الأول ويحفظ النتيجة في “text_anchor.pptx”.
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
autoShape.TextFrame.TextFrameFormat.AnchoringType = TextAnchorType.Bottom;
presentation.Save("text_anchor.pptx", SaveFormat.Pptx);
ضبط الفواصل الجدولية للنص
استخدم IParagraphFormat.DefaultTabSize وIParagraphFormat.Tabs لتكوين مواضع الفواصل الجدولية في الفقرة. المثال التالي يضبط الفاصل الجدولي الافتراضي إلى 100 نقطة ويضيف فاصلًا جدوليًا محاذيًا إلى اليسار عند 30 نقطة. تؤثر هذه الإعدادات على النص الذي يحتوي على أحرف جدولة.
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("sample.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
paragraph.ParagraphFormat.DefaultTabSize = 100;
paragraph.ParagraphFormat.Tabs.Add(30, TabAlignment.Left);
presentation.Save("paragraph_tabs.pptx", SaveFormat.Pptx);
النتيجة:

ضبط لغة التدقيق
توفر Aspose.Slides الخاصية IBasePortionFormat.LanguageId، التي تسمح لك بتعيين لغة التدقيق لجزء النص. تحدد لغة التدقيق اللغة المستخدمة في فحص الإملاء والنحو في PowerPoint.
المثال التالي يتطلب ملف “presentation.pptx” يحتوي على مربع نص كأول شكل في الشريحة الأولى وعلى الأقل فقرة واحدة. يستبدل محتوى الفقرة الأولى بـ “1。"، يضبط الخط إلى SimSun، ويعيّن لغة التدقيق الصيني المبسطة (zh-CN). يحفظ النتيجة في “proofing_language.pptx”:
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation("presentation.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var paragraph = autoShape.TextFrame.Paragraphs[0];
paragraph.Portions.Clear();
var font = new FontData("SimSun");
var textPortion = new Portion();
textPortion.PortionFormat.ComplexScriptFont = font;
textPortion.PortionFormat.EastAsianFont = font;
textPortion.PortionFormat.LatinFont = font;
// تعيين لغة التدقيق إلى الصينية المبسطة.
textPortion.PortionFormat.LanguageId = "zh-CN";
textPortion.Text = "1。";
paragraph.Portions.Add(textPortion);
presentation.Save("proofing_language.pptx", SaveFormat.Pptx);
ضبط اللغة الافتراضية
استخدم LoadOptions.DefaultTextLanguage لتحديد اللغة الافتراضية للنص الذي يُنشأ أثناء تحميل أو إنشاء عرض تقديمي. المثال التالي يُنشئ عرضًا تقديميًا باللغة الإنجليزية الأمريكية كلغة نص افتراضية، يضيف مربع نص، ويطبع en-US للجزء النصي الأول.
using System;
using Aspose.Slides;
var loadOptions = new LoadOptions();
loadOptions.DefaultTextLanguage = "en-US";
using var presentation = new Presentation(loadOptions);
var slide = presentation.Slides[0];
// إضافة شكل مستطيل جديد مع نص.
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 20, 20, 150, 50);
shape.TextFrame.Text = "Sample text";
// تحقق من لغة الجزء الأول.
var portion = shape.TextFrame.Paragraphs[0].Portions[0];
Console.WriteLine(portion.PortionFormat.LanguageId);
ضبط نمط النص الافتراضي
لتطبيق تنسيق نص افتراضي على مستوى العرض التقديمي، استخدم IPresentation.DefaultTextStyle.
المثال التالي يضبط خطًا عريضًا بحجم 14 نقطة كافتراضي للفقرات العليا في عرض تقديمي جديد ويحفظه في “default_text_style.pptx”. يمكن للنص أن يُورِّث هذه القيم الافتراضية ما لم يتجاوزها تنسيق أكثر تحديدًا.
using Aspose.Slides;
using Aspose.Slides.Export;
using var presentation = new Presentation();
// الحصول على تنسيق الفقرة المستوى الأعلى.
var paragraphFormat = presentation.DefaultTextStyle.GetLevel(0);
if (paragraphFormat != null)
{
paragraphFormat.DefaultPortionFormat.FontHeight = 14;
paragraphFormat.DefaultPortionFormat.FontBold = NullableBool.True;
}
presentation.Save("default_text_style.pptx", SaveFormat.Pptx);
استخراج النص مع تأثير الأحرف الكبيرة كلها
في PowerPoint، يُظهر تأثير الخط All Caps النص كحروف كبيرة على الشريحة حتى وإن كُتِب أصلاً بأحرف صغيرة. عند استرجاع مثل هذا الجزء النصي عبر Aspose.Slides، تُعيد المكتبة النص كما تم إدخاله. لمطابقة النص المعروض، تحقق من TextCapType وحوّل السلسلة المسترجعة إلى أحرف كبيرة عندما تكون القيمة All.
يتطلب هذا المثال ملف “sample2.pptx” يحتوي على مربع نص كأول شكل في الشريحة الأولى. يحتوي الجزء الأول من الفقرة الأولى على “Hello, Aspose!” مع تطبيق تأثير All Caps، كما هو موضح أدناه.

المثال التالي يوضح كيفية استخراج النص مع تطبيق تأثير All Caps:
using System;
using Aspose.Slides;
using var presentation = new Presentation("sample2.pptx");
var slide = presentation.Slides[0];
var autoShape = (IAutoShape)slide.Shapes[0];
var textPortion = autoShape.TextFrame.Paragraphs[0].Portions[0];
Console.WriteLine($"Original text: {textPortion.Text}");
var textFormat = textPortion.PortionFormat.GetEffective();
if (textFormat.TextCapType == TextCapType.All)
{
var text = textPortion.Text.ToUpper();
Console.WriteLine($"All-Caps effect: {text}");
}
الإخراج:
Original text: Hello, Aspose!
All-Caps effect: HELLO, ASPOSE!
الأسئلة المتكررة
كيف يمكن تعديل النص في جدول على شريحة؟
لتعديل النص في جدول على شريحة، استخدم ITable. استعرض الخلايا وحدث كل خلية عبر ICell.TextFrame وتنسيق الفقرة عبر IParagraph.ParagraphFormat.
كيف يمكن تطبيق لون متدرج للنص على شريحة PowerPoint؟
لتطبيق لون متدرج للنص، استخدم IBasePortionFormat.FillFormat. اضبط IFillFormat.FillType إلى FillType.Gradient و configure إيقافات التدرج، الاتجاه، والشفافية.
الميزة ذات الصلة: تنسيق النص داخل الشرائح.