العمل مع الفقرات
الفقرة عبارة عن مجموعة من الأحرف المدمجة في كتلة منطقية وتنتهي بحرف خاص - فاصل الفقرة. في Aspose.Words، يتم تمثيل الفقرة بواسطة فئة Paragraph.
إدراج فقرة
لإدراج فقرة جديدة في المستند، في الواقع، تحتاج إلى إدراج حرف فاصل فقرة فيه. لا يقوم DocumentBuilder.Writeln بإدراج سلسلة نصية في المستند فحسب، بل يضيف أيضًا فاصل فقرات.
يتم تحديد تنسيق الخط الحالي أيضًا بواسطة خاصية Font، ويتم تحديد تنسيق الفقرة الحالي بواسطة خاصية ParagraphFormat. في القسم التالي، سنتناول المزيد من التفاصيل حول تنسيق الفقرة.
يوضح مثال التعليمات البرمجية التالي كيفية إدراج فقرة في مستند:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithDocument(); | |
// Initialize document. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Specify font formatting | |
Font font = builder.Font; | |
font.Size = 16; | |
font.Bold = true; | |
font.Color = System.Drawing.Color.Blue; | |
font.Name = "Arial"; | |
font.Underline = Underline.Dash; | |
// Specify paragraph formatting | |
ParagraphFormat paragraphFormat = builder.ParagraphFormat; | |
paragraphFormat.FirstLineIndent = 8; | |
paragraphFormat.Alignment = ParagraphAlignment.Justify; | |
paragraphFormat.KeepTogether = true; | |
builder.Writeln("A whole paragraph."); | |
dataDir = dataDir + "DocumentBuilderInsertParagraph_out.doc"; | |
doc.Save(dataDir); |
تنسيق الفقرة
يتم تمثيل تنسيق الفقرة الحالي بواسطة كائن ParagraphFormat الذي يتم إرجاعه بواسطة خاصية ParagraphFormat. يقوم هذا الكائن بتغليف خصائص تنسيق الفقرة المتنوعة المتوفرة في Microsoft Word. يمكنك بسهولة إعادة تعيين تنسيق الفقرة إلى وضعها الافتراضي - نمط عادي، محاذاة إلى اليسار، بدون مسافة بادئة، بدون مسافات، بدون حدود، بدون تظليل - عن طريق استدعاء ClearFormatting.
يوضح مثال التعليمات البرمجية التالي كيفية تعيين تنسيق الفقرة:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Set paragraph formatting properties | |
ParagraphFormat paragraphFormat = builder.ParagraphFormat; | |
paragraphFormat.Alignment = ParagraphAlignment.Center; | |
paragraphFormat.LeftIndent = 50; | |
paragraphFormat.RightIndent = 50; | |
paragraphFormat.SpaceAfter = 25; | |
// Output text | |
builder.Writeln("I'm a very nice formatted paragraph. I'm intended to demonstrate how the left and right indents affect word wrapping."); | |
builder.Writeln("I'm another nice formatted paragraph. I'm intended to demonstrate how the space after paragraph looks like."); | |
dataDir = dataDir + "DocumentBuilderSetParagraphFormatting_out.doc"; | |
doc.Save(dataDir); |
تطبيق نمط الفقرة
تدعم بعض كائنات التنسيق، مثل Font أو ParagraphFormat، الأنماط. يتم تمثيل أحد الأنماط المضمنة أو المحددة من قبل المستخدم بواسطة كائن Style، والذي يحتوي على خصائص النمط المناسبة مثل الاسم والنمط الأساسي والخط وتنسيق فقرة النمط وما إلى ذلك.
بالإضافة إلى ذلك، يعرض كائن Style خاصية StyleIdentifier، التي تُرجع معرف النمط المستقل عن اللغة الذي تمثله قيمة تعداد StyleIdentifier. الحقيقة هي أن أسماء الأنماط المضمنة في Microsoft Word مترجمة للغات مختلفة. باستخدام معرف النمط، يمكنك العثور على النمط الصحيح بغض النظر عن لغة المستند. تتوافق قيم التعداد مع أنماط Microsoft Word المضمنة مثل Normal وHeading 1 وHeading 2 وما إلى ذلك. يتم تعيين كافة الأنماط المعرفة من قبل المستخدم على قيمة تعداد StyleIdentifier.User.
يوضح مثال التعليمات البرمجية التالي كيفية تطبيق نمط الفقرة:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Set paragraph style | |
builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; | |
builder.Write("Hello"); | |
dataDir = dataDir + "DocumentBuilderApplyParagraphStyle_out.doc"; | |
doc.Save(dataDir); |
قم بإدراج فاصل النمط لوضع أنماط فقرات مختلفة
يمكن إضافة فاصل النمط إلى نهاية الفقرة باستخدام اختصار لوحة المفاتيح Ctrl+Alt+Enter في Microsoft Word. تتيح لك هذه الميزة استخدام نمطين مختلفين للفقرة في نفس الفقرة المطبوعة المنطقية. إذا كنت تريد ظهور بعض النص من بداية عنوان معين في جدول المحتويات، ولكن لا تريد ظهور العنوان بالكامل في جدول المحتويات، فيمكنك استخدام هذه الوظيفة.
يوضح مثال التعليمات البرمجية التالي كيفية إدراج فاصل نمط لاستيعاب أنماط الفقرة المختلفة:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
Style paraStyle = builder.Document.Styles.Add(StyleType.Paragraph, "MyParaStyle"); | |
paraStyle.Font.Bold = false; | |
paraStyle.Font.Size = 8; | |
paraStyle.Font.Name = "Arial"; | |
// Append text with "Heading 1" style. | |
builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Heading1; | |
builder.Write("Heading 1"); | |
builder.InsertStyleSeparator(); | |
// Append text with another style. | |
builder.ParagraphFormat.StyleName = paraStyle.Name; | |
builder.Write("This is text with some other formatting "); | |
dataDir = dataDir + "InsertStyleSeparator_out.doc"; | |
// Save the document to disk. | |
doc.Save(dataDir); |
تحديد فاصل نمط الفقرة
يعرض Aspose.Words خاصية BreakIsStyleSeparator العامة في فئة Paragraph
لتعريف فقرة بفاصل نمط، كما هو موضح في المثال أدناه:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_RenderingAndPrinting(); | |
// Initialize document. | |
string fileName = "TestFile.doc"; | |
Document doc = new Document(dataDir + fileName); | |
foreach (Paragraph paragraph in doc.GetChildNodes(NodeType.Paragraph, true)) | |
{ | |
if (paragraph.BreakIsStyleSeparator) | |
{ | |
Console.WriteLine("Separator Found!"); | |
} | |
} |
تطبيق الحدود والتظليل على الفقرة
يتم تمثيل الحدود في Aspose.Words بواسطة فئة BorderCollection - وهي عبارة عن مجموعة من كائنات Border التي يتم الوصول إليها عن طريق الفهرس أو عن طريق نوع الحدود. يتم تمثيل نوع الحد بدوره بواسطة تعداد BorderType. تنطبق بعض قيم التعداد على عناصر وثيقة متعددة أو واحدة فقط. على سبيل المثال، ينطبق BorderType.Bottom على فقرة أو خلية جدول، بينما يحدد BorderType.DiagonalDown حدًا قطريًا في خلية جدول فقط.
تحتوي كل من مجموعة الحدود وكل حد منفصل على سمات متشابهة مثل اللون ونمط الخط وعرض الخط والمسافة من النص والظل الاختياري. يتم تمثيلهم بخصائص تحمل نفس الاسم. يمكنك الحصول على أنواع حدود مختلفة من خلال الجمع بين قيم الخصائص. بالإضافة إلى ذلك، تسمح لك كائنات BorderCollection وBorder بإعادة تعيين هذه القيم إلى قيمها الافتراضية عن طريق استدعاء أسلوب ClearFormatting.
يحتوي Aspose.Words أيضًا على فئة Shading التي تحتوي على سمات التظليل لعناصر المستند. يمكنك تعيين مادة التظليل والألوان المطلوبة التي يتم تطبيقها على الخلفية والمقدمة لعنصر ما باستخدام قيمة تعداد TextureIndex. يتيح لك TextureIndex أيضًا تطبيق أنماط مختلفة على كائن Shading. على سبيل المثال، لتعيين لون الخلفية لعنصر مستند، استخدم قيمة TextureIndex.TextureSolid وقم بتعيين لون تظليل المقدمة بالشكل المناسب.
يوضح مثال التعليمات البرمجية التالي كيفية تطبيق الحدود والتظليل على فقرة:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
// Set paragraph borders | |
BorderCollection borders = builder.ParagraphFormat.Borders; | |
borders.DistanceFromText = 20; | |
borders[BorderType.Left].LineStyle = LineStyle.Double; | |
borders[BorderType.Right].LineStyle = LineStyle.Double; | |
borders[BorderType.Top].LineStyle = LineStyle.Double; | |
borders[BorderType.Bottom].LineStyle = LineStyle.Double; | |
// Set paragraph shading | |
Shading shading = builder.ParagraphFormat.Shading; | |
shading.Texture = TextureIndex.TextureDiagonalCross; | |
shading.BackgroundPatternColor = System.Drawing.Color.LightCoral; | |
shading.ForegroundPatternColor = System.Drawing.Color.LightSalmon; | |
builder.Write("I'm a formatted paragraph with double border and nice shading."); | |
dataDir = dataDir + "DocumentBuilderApplyBordersAndShadingToParagraph_out.doc"; | |
doc.Save(dataDir); |
عد خطوط الفقرة
إذا كنت تريد حساب عدد الأسطر في فقرة لأي مستند Word، فيمكن استخدام نموذج التعليمات البرمجية التالي:
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithDocument(); | |
string fileName = "Properties.doc"; | |
Document document = new Document(dataDir + fileName); | |
var collector = new LayoutCollector(document); | |
var it = new LayoutEnumerator(document); | |
foreach (Paragraph paragraph in document.GetChildNodes(NodeType.Paragraph, true)) | |
{ | |
var paraBreak = collector.GetEntity(paragraph); | |
object stop = null; | |
var prevItem = paragraph.PreviousSibling; | |
if (prevItem != null) | |
{ | |
var prevBreak = collector.GetEntity(prevItem); | |
if (prevItem is Paragraph) | |
{ | |
it.Current = collector.GetEntity(prevItem); // para break | |
it.MoveParent(); // last line | |
stop = it.Current; | |
} | |
else if (prevItem is Table) | |
{ | |
var table = (Table)prevItem; | |
it.Current = collector.GetEntity(table.LastRow.LastCell.LastParagraph); // cell break | |
it.MoveParent(); // cell | |
it.MoveParent(); // row | |
stop = it.Current; | |
} | |
else | |
{ | |
throw new Exception(); | |
} | |
} | |
it.Current = paraBreak; | |
it.MoveParent(); | |
// We move from line to line in a paragraph. | |
// When paragraph spans multiple pages the we will follow across them. | |
var count = 1; | |
while (it.Current != stop) | |
{ | |
if (!it.MovePreviousLogical()) | |
break; | |
count++; | |
} | |
const int MAX_CHARS = 16; | |
var paraText = paragraph.GetText(); | |
if (paraText.Length > MAX_CHARS) | |
paraText = $"{paraText.Substring(0, MAX_CHARS)}..."; | |
Console.WriteLine($"Paragraph '{paraText}' has {count} line(-s)."); | |
} |