العمل مع الفقرات

الفقرة عبارة عن مجموعة من الأحرف مجتمعة في كتلة منطقية وتنتهي بحرف خاص – paragraph break. في Aspose.Words، يتم تمثيل الفقرة بفئة Paragraph.

تدرج فقرة

لإدراج فقرة جديدة في المستند، في الواقع، تحتاج إلى إدراج حرف فاصل فقرة فيه. DocumentBuilder.Writeln إدراج ليس فقط سلسلة من النص في المستند، ولكن أيضا يضيف فاصل فقرة.

يتم تحديد تنسيق الخط الحالي أيضا بواسطة خاصية Font، ويتم تحديد تنسيق الفقرة الحالي بواسطة خاصية ParagraphFormat. في القسم التالي، سنذهب إلى مزيد من التفاصيل حول تنسيق الفقرة.

يوضح مثال التعليمات البرمجية التالية كيفية إدراج فقرة في مستند:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// The path to the documents directory.
System::String outputDataDir = GetOutputDataDir_WorkingWithDocument();
// Initialize document.
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Specify font formatting
System::SharedPtr<Font> font = builder->get_Font();
font->set_Size(16);
font->set_Bold(true);
font->set_Color(System::Drawing::Color::get_Blue());
font->set_Name(u"Arial");
font->set_Underline(Underline::Dash);
// Specify paragraph formatting
System::SharedPtr<ParagraphFormat> paragraphFormat = builder->get_ParagraphFormat();
paragraphFormat->set_FirstLineIndent(8);
paragraphFormat->set_Alignment(ParagraphAlignment::Justify);
paragraphFormat->set_KeepTogether(true);
builder->Writeln(u"A whole paragraph.");
System::String outputPath = outputDataDir + u"DocumentBuilderInsertParagraph.doc";
doc->Save(outputPath);

شكل الفقرة

يتم تمثيل تنسيق الفقرة الحالي بواسطة كائن ParagraphFormat يتم إرجاعه بواسطة خاصية ParagraphFormat. هذا الكائن بتغليف مختلف خصائص تنسيق الفقرة المتاحة في Microsoft Word. يمكنك بسهولة إعادة تعيين تنسيق الفقرة إلى الافتراضي إلى النمط العادي، محاذاة اليسار لا المسافة البادئة، لا تباعد، لا حدود ولا التظليل عن طريق الاتصال ClearFormatting.

يوضح مثال التعليمات البرمجية التالية كيفية تعيين تنسيق الفقرة:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Set paragraph formatting properties
System::SharedPtr<ParagraphFormat> paragraphFormat = builder->get_ParagraphFormat();
paragraphFormat->set_Alignment(ParagraphAlignment::Center);
paragraphFormat->set_LeftIndent(50);
paragraphFormat->set_RightIndent(50);
paragraphFormat->set_SpaceAfter(25);
// Output text
builder->Writeln(u"I'm a very nice formatted paragraph. I'm intended to demonstrate how the left and right indents affect word wrapping.");
builder->Writeln(u"I'm another nice formatted paragraph. I'm intended to demonstrate how the space after paragraph looks like.");
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.SetParagraphFormatting.doc";
doc->Save(outputPath);

تطبيق نمط الفقرة

بعض كائنات التنسيق مثل الخط أو 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-C
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Set paragraph style
builder->get_ParagraphFormat()->set_StyleIdentifier(StyleIdentifier::Title);
builder->Write(u"Hello");
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.ApplyParagraphStyle.doc";
doc->Save(outputPath);

إدراج نمط فاصل لوضع أنماط الفقرة المختلفة

يمكن إضافة فاصل النمط إلى نهاية الفقرة باستخدام كترل + ألت + أدخل اختصار لوحة المفاتيح في MS كلمة. تسمح هذه الميزة لنمطين مختلفين للفقرة المستخدمة في فقرة مطبوعة منطقية واحدة. إذا كنت تريد ظهور بعض النصوص من بداية عنوان معين في جدول المحتويات ولكنك لا تريد العنوان بأكمله في جدول المحتويات، فيمكنك استخدام هذه الميزة.

يوضح مثال التعليمات البرمجية التالية كيفية إدراج فاصل نمط لاستيعاب أنماط فقرة مختلفة:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::SharedPtr<Style> paraStyle = builder->get_Document()->get_Styles()->Add(StyleType::Paragraph, u"MyParaStyle");
paraStyle->get_Font()->set_Bold(false);
paraStyle->get_Font()->set_Size(8);
paraStyle->get_Font()->set_Name(u"Arial");
// Append text with "Heading 1" style.
builder->get_ParagraphFormat()->set_StyleIdentifier(StyleIdentifier::Heading1);
builder->Write(u"Heading 1");
builder->InsertStyleSeparator();
// Append text with another style.
builder->get_ParagraphFormat()->set_StyleName(paraStyle->get_Name());
builder->Write(u"This is text with some other formatting ");
System::String outputPath = outputDataDir + u"InsertStyleSeparator.doc";
// Save the document to disk.
doc->Save(outputPath);

تحديد فاصل نمط الفقرة

Aspose.Words يوفر خاصية عامة BreakIsStyleSeparator في فئة Paragraph يسمح بتحديد فقرة فاصل النمط كما هو موضح في المثال الوارد أدناه:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// The path to the documents directory.
System::String inputDataDir = GetInputDataDir_RenderingAndPrinting();
// Initialize document.
System::String fileName = u"TestFile.doc";
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + fileName);
for (System::SharedPtr<Paragraph> paragraph : System::IterateOver<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)))
{
if (paragraph->get_BreakIsStyleSeparator())
{
std::cout << "Separator Found!" << std::endl;
}
}

تطبيق الحدود والتظليل على فقرة

يتم تمثيل الحدود في Aspose.Words بواسطة فئة BorderCollection - هذه مجموعة من Border الكائنات التي يتم الوصول إليها بواسطة الفهرس أو حسب نوع الحدود. يتم تمثيل نوع الحدود بواسطة BorderType تعداد. بعض قيم التعداد قابلة للتطبيق على عدة أو عنصر مستند واحد فقط. على سبيل المثال، BorderType.Bottom ينطبق على فقرة أو خلية جدول بينما BorderType.DiagonalDown يحدد الحد القطري في خلية جدول فقط.

تحتوي كل من مجموعة الحدود وكل حد منفصل على سمات متشابهة مثل اللون ونمط الخط وعرض الخط والمسافة من النص والظل الاختياري. يتم تمثيلهم بخصائص تحمل نفس الاسم. يمكنك تحقيق أنواع مختلفة من الحدود من خلال الجمع بين قيم الخصائص. بالإضافة إلى ذلك، يسمح لك كل من BorderCollection و Border بإعادة تعيين هذه القيم إلى الوضع الافتراضي عن طريق استدعاء طريقة ClearFormatting.

يحتوي Aspose.Words أيضا على فئة Shading التي تحتوي على سمات تظليل لعناصر المستند. يمكنك تعيين نسيج التظليل المطلوب والألوان التي يتم تطبيقها على الخلفية ومقدمة العنصر.

يتم تعيين نسيج التظليل بقيمة تعداد TextureIndex تسمح بتطبيق أنماط مختلفة على الكائن Shading. على سبيل المثال، لتعيين لون خلفية لعنصر مستند، استخدم القيمة TextureIndex.TextureSolid وقم بتعيين لون تظليل المقدمة حسب الاقتضاء.

يوضح مثال الكود التالي كيفية تطبيق الحدود والتظليل على فقرة:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Set paragraph borders
System::SharedPtr<BorderCollection> borders = builder->get_ParagraphFormat()->get_Borders();
borders->set_DistanceFromText(20);
borders->idx_get(BorderType::Left)->set_LineStyle(LineStyle::Double);
borders->idx_get(BorderType::Right)->set_LineStyle(LineStyle::Double);
borders->idx_get(BorderType::Top)->set_LineStyle(LineStyle::Double);
borders->idx_get(BorderType::Bottom)->set_LineStyle(LineStyle::Double);
// Set paragraph shading
System::SharedPtr<Shading> shading = builder->get_ParagraphFormat()->get_Shading();
shading->set_Texture(TextureIndex::TextureDiagonalCross);
shading->set_BackgroundPatternColor(System::Drawing::Color::get_LightCoral());
shading->set_ForegroundPatternColor(System::Drawing::Color::get_LightSalmon());
builder->Write(u"I'm a formatted paragraph with double border and nice shading.");
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.ApplyBordersAndShadingToParagraph.doc";
doc->Save(outputPath);