العمل مع الأنماط والموضوعات

يتم استخدام فئة StyleCollection لإدارة الإعدادات المضمنة وتطبيقها على الأنماط.

الوصول إلى الأنماط

يمكنك الحصول على مجموعة من الأنماط المحددة في المستند باستخدام خاصية Document.Styles. تحتوي هذه المجموعة على الأنماط المضمنة والمحددة من قبل المستخدم في المستند. يمكن الحصول على نمط معين من خلال اسمه/اسمه المستعار أو معرف النمط أو الفهرس. يوضح مثال التعليمات البرمجية التالي كيفية الوصول إلى مجموعة الأنماط المحددة في المستند.

// 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();
// Load the template document.
Document doc = new Document(dataDir + "TestFile.doc");
// Get styles collection from document.
StyleCollection styles = doc.Styles;
string styleName = "";
// Iterate through all the styles.
foreach (Style style in styles)
{
if (styleName == "")
{
styleName = style.Name;
}
else
{
styleName = styleName + ", " + style.Name;
}
}

كيفية استخراج المحتوى بناءً على الأنماط

على مستوى بسيط، يمكن أن يكون استرجاع المحتوى استنادًا إلى الأنماط من مستند Word مفيدًا في تحديد وسرد وإحصاء الفقرات ومجموعات النص المنسقة بنمط معين. على سبيل المثال، قد تحتاج إلى تحديد أنواع معينة من المحتوى في المستند، مثل الأمثلة والعناوين والمراجع والكلمات الأساسية وأسماء الأشكال ودراسات الحالة.

ولأخذ بضع خطوات أخرى إلى الأمام، يمكن استخدام هذا أيضًا للاستفادة من بنية المستند، التي تحددها الأنماط التي يستخدمها، لإعادة استخدام المستند لمخرجات أخرى، مثل HTML. هذه في الواقع هي الطريقة التي يتم بها إنشاء وثائق Aspose، مما يضع Aspose.Words قيد الاختبار. تأخذ الأداة التي تم إنشاؤها باستخدام Aspose.Words مستندات Word المصدر وتقسمها إلى موضوعات عند مستويات عناوين معينة. يتم إنتاج ملف XML باستخدام Aspose.Words والذي يُستخدم لإنشاء شجرة التنقل التي يمكنك رؤيتها على اليسار. ثم يقوم Aspose.Words بتحويل كل موضوع إلى HTML.

عادةً ما يكون حل استرداد النص المنسق بأنماط محددة في مستند Word اقتصاديًا ومباشرًا باستخدام Aspose.Words.

الحل

لتوضيح مدى سهولة تعامل Aspose.Words مع استرداد المحتوى بناءً على الأنماط، فلنلقِ نظرة على مثال. في هذا المثال، سنقوم باسترداد النص المنسق بنمط فقرة محدد ونمط أحرف من نموذج مستند Word. على مستوى عالٍ، سيتضمن ذلك:# فتح مستند Word باستخدام فئة Document.# الحصول على مجموعات من جميع الفقرات وجميع عمليات التشغيل في المستند. # تحديد الفقرات وعمليات التشغيل المطلوبة فقط. على وجه التحديد، سنقوم باسترداد النص المنسق بنمط الفقرة “العنوان 1” ونمط الأحرف “التأكيد المكثف” من نموذج مستند Word هذا.

working-with-styles-and-themes-aspose-words-net

في نموذج المستند هذا، النص المنسق بنمط الفقرة “العنوان 1” هو “إدراج علامة تبويب” و"أنماط سريعة" و"السمة"، والنص المنسق بنمط الأحرف “التركيز المكثف” هو مثيلات اللون الأزرق المتعددة، نص مائل وغامق مثل “المعارض” و"المظهر العام".

الرمز

يعد تنفيذ الاستعلام المستند إلى النمط أمرًا بسيطًا للغاية في نموذج كائن مستند Aspose.Words، لأنه يستخدم ببساطة الأدوات الموجودة بالفعل. يتم تنفيذ طريقتين للفصل لهذا الحل: ParagraphsByStyleName - تسترد هذه الطريقة مصفوفة من تلك الفقرات في المستند الذي له اسم نمط محدد. RunsByStyleName – تسترد هذه الطريقة مصفوفة من تلك التي يتم تشغيلها في المستند التي لها اسم نمط محدد. كلتا الطريقتين متشابهتان جدًا، والاختلاف الوحيد هو أنواع العقد وتمثيل النمط المعلومات الموجودة داخل الفقرة وتشغيل العقد. إليك تطبيق ParagraphsByStyleName: أدناه المثال، ابحث عن جميع الفقرات المنسقة بالنمط المحدد.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public static ArrayList ParagraphsByStyleName(Document doc, string styleName)
{
// Create an array to collect paragraphs of the specified style.
ArrayList paragraphsWithStyle = new ArrayList();
// Get all paragraphs from the document.
NodeCollection paragraphs = doc.GetChildNodes(NodeType.Paragraph, true);
// Look through all paragraphs to find those with the specified style.
foreach (Paragraph paragraph in paragraphs)
{
if (paragraph.ParagraphFormat.Style.Name == styleName)
paragraphsWithStyle.Add(paragraph);
}
return paragraphsWithStyle;
}

تجدر الإشارة أيضًا إلى أن مجموعة الفقرات لا تنشئ حملاً مباشرًا لأنه يتم تحميل الفقرات في هذه المجموعة فقط عند الوصول إلى العناصر الموجودة فيها. بعد ذلك، كل ما عليك فعله هو تصفح المجموعة، باستخدام عامل التشغيل القياسي foreach وإضافة فقرات لها النمط المحدد إلى مصفوفة ParasWithStyle. يمكن العثور على اسم نمط Paragraph في خاصية Style.Name لكائن Paragraph.ParagraphFormat. إن تنفيذ RunsByStyleName هو نفسه تقريبًا، على الرغم من أننا نستخدم NodeType.Run بوضوح لاسترداد عقد التشغيل. يتم استخدام خاصية Font.Style لكائن Run للوصول إلى معلومات النمط في عقد Run. ستجد أدناه المثال كافة عمليات التشغيل المنسقة بالنمط المحدد.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public static ArrayList RunsByStyleName(Document doc, string styleName)
{
// Create an array to collect runs of the specified style.
ArrayList runsWithStyle = new ArrayList();
// Get all runs from the document.
NodeCollection runs = doc.GetChildNodes(NodeType.Run, true);
// Look through all runs to find those with the specified style.
foreach (Run run in runs)
{
if (run.Font.Style.Name == styleName)
runsWithStyle.Add(run);
}
return runsWithStyle;
}

عند تنفيذ كلا الاستعلامين، كل ما عليك فعله هو تمرير كائن مستند وتحديد أسماء أنماط المحتوى الذي تريد استرداده: المثال أدناه، تشغيل الاستعلامات وعرض النتائج. يمكنك تنزيل ملف القالب الخاص بهذا المثال من هنا.

// 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_WorkingWithStyles();
string fileName = "TestFile.doc";
// Open the document.
Document doc = new Document(dataDir + fileName);
// Define style names as they are specified in the Word document.
const string paraStyle = "Heading 1";
const string runStyle = "Intense Emphasis";
// Collect paragraphs with defined styles.
// Show the number of collected paragraphs and display the text of this paragraphs.
ArrayList paragraphs = ParagraphsByStyleName(doc, paraStyle);
Console.WriteLine(string.Format("Paragraphs with \"{0}\" styles ({1}):", paraStyle, paragraphs.Count));
foreach (Paragraph paragraph in paragraphs)
Console.Write(paragraph.ToString(SaveFormat.Text));
// Collect runs with defined styles.
// Show the number of collected runs and display the text of this runs.
ArrayList runs = RunsByStyleName(doc, runStyle);
Console.WriteLine(string.Format("\nRuns with \"{0}\" styles ({1}):", runStyle, runs.Count));
foreach (Run run in runs)
Console.WriteLine(run.Range.Text);

النتيجة النهائية

عند الانتهاء من كل شيء، سيؤدي تشغيل العينة إلى عرض الإخراج التالي:

styles-and-themes-aspose-words-net

كما ترون، هذا مثال بسيط للغاية، يوضح عدد ونص الفقرات المجمعة ويتم تشغيلها في نموذج مستند Word.

انسخ كافة الأنماط من القالب

هناك حالات تريد فيها نسخ كافة الأنماط من مستند إلى آخر. يمكنك استخدام طريقة Document.CopyStylesFromTemplate لنسخ الأنماط من القالب المحدد إلى مستند. عندما يتم نسخ الأنماط من قالب إلى مستند، تتم إعادة تعريف الأنماط ذات الأسماء المتشابهة في المستند لتتوافق مع أوصاف الأنماط في القالب. يتم نسخ الأنماط الفريدة من القالب إلى المستند. تظل الأنماط الفريدة في المستند سليمة. يوضح مثال Below code كيفية نسخ الأنماط من مستند إلى آخر.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
string fileName = dataDir + "template.docx";
Document doc = new Document(fileName);
// Open the document.
Document target = new Document(dataDir + "TestFile.doc");
target.CopyStylesFromTemplate(doc);
dataDir = dataDir + RunExamples.GetOutputFilePath(fileName);
doc.Save(dataDir);

كيفية التعامل مع خصائص الموضوع

لقد أضفنا API الأساسي في Aspose.Words للوصول إلى خصائص سمة المستند. في الوقت الحالي، يتضمن API هذا الكائنات العامة التالية:

  • سمة
  • الخطوط الموضوعية
  • ألوان الموضوع

إليك كيفية الحصول على خصائص السمة:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document(dataDir);
Theme theme = doc.Theme;
// Major (Headings) font for Latin characters.
Console.WriteLine(theme.MajorFonts.Latin);
// Minor (Body) font for EastAsian characters.
Console.WriteLine(theme.MinorFonts.EastAsian);
// Color for theme color Accent 1.
Console.WriteLine(theme.Colors.Accent1);

وإليك كيفية تعيين خصائص السمة:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document(dataDir);
Theme theme = doc.Theme;
// Set Times New Roman font as Body theme font for Latin Character.
theme.MinorFonts.Latin = "Times New Roman";
// Set Color.Gold for theme color Hyperlink.
theme.Colors.Hyperlink = Color.Gold;