کار با پاراگراف ها

یک پاراگراف مجموعه ای از کاراکترها است که در یک بلوک منطقی ترکیب شده و با یک کاراکتر خاص پایان می یابد - یک پاراگراف شکست. در 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).");
}