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

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

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

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

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

لتوضيح مدى سهولة معالجة Aspose.Words لاسترجاع المحتوى بناء على الأنماط، دعنا نلقي نظرة على مثال. في هذا المثال، سنقوم باسترداد نص منسق بنمط فقرة معين ونمط حرف من نموذج مستند ورد.

على مستوى عال، سيشمل هذا:

  1. فتح مستند ورد باستخدام فئة Document.
  2. الحصول على مجموعات من جميع الفقرات وجميع يعمل في الوثيقة.
  3. تحديد الفقرات والأشواط المطلوبة فقط.

على وجه التحديد، سنقوم استرداد النص المنسق مع' Heading 1 ‘نمط الفقرة و’ التركيز الشديد ' نمط الحرف من هذا المستند كلمة عينة.

working-with-styles-aspose-words-java-1

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

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

  1. ParagraphsByStyleName - تسترد هذه الطريقة مصفوفة من تلك الفقرات في المستند لها اسم نمط معين.
  2. RunsByStyleName - تقوم هذه الطريقة باسترداد مصفوفة من عمليات التشغيل هذه في المستند التي لها اسم نمط معين.

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
public static ArrayList<Paragraph> paragraphsByStyleName(Document doc, String styleName) throws Exception {
// Create an array to collect paragraphs of the specified style.
ArrayList<Paragraph> 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.
for (Paragraph paragraph : (Iterable<Paragraph>) paragraphs) {
if (paragraph.getParagraphFormat().getStyle().getName().equals(styleName))
paragraphsWithStyle.add(paragraph);
}
return paragraphsWithStyle;
}

يستخدم هذا التنفيذ أيضا طريقة Document.getChildNodes() من فئة Document، والتي ترجع مجموعة من جميع العقد الفرعية الفورية.

تجدر الإشارة أيضا إلى أن مجموعة الفقرات لا تنشئ عبئا فوريا لأن الفقرات يتم تحميلها في هذه المجموعة فقط عند الوصول إلى العناصر الموجودة فيها.ثم، كل ما عليك القيام به هو الذهاب من خلال جمع، وذلك باستخدام معيار لكل عامل وإضافة الفقرات التي لها النمط المحدد إلى paragraphsWithStyle مجموعة. يمكن العثور على اسم النمط Paragraph في خاصية Style.getName() للكائن Paragraph.getParagraphFormat().

تنفيذ RunsByStyleName هو نفسه تقريبا، على الرغم من أننا من الواضح أننا نستخدم NodeType.Run لاسترداد عقد التشغيل. يتم استخدام خاصية Font.getStyle() لكائن Run للوصول إلى معلومات النمط في العقد Run.

يجد مثال التعليمات البرمجية التالي جميع عمليات التشغيل المنسقة بالنمط المحدد.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
public static ArrayList<Run> runsByStyleName(Document doc, String styleName) throws Exception {
// Create an array to collect runs of the specified style.
ArrayList<Run> 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.
for (Run run : (Iterable<Run>) runs) {
if (run.getFont().getStyle().getName().equals(styleName))
runsWithStyle.add(run);
}
return runsWithStyle;
}

المثال التعليمات البرمجية التالية تشغيل الاستعلامات وعرض النتائج.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Open the document.
Document doc = new Document(dataDir + "TestFile.doc");
// Define style names as they are specified in the Word document.
final String PARA_STYLE = "Heading 1";
final String RUN_STYLE = "Intense Emphasis";
// Collect paragraphs with defined styles.
// Show the number of collected paragraphs and display the text of this paragraphs.
ArrayList<Paragraph> paragraphs = paragraphsByStyleName(doc, PARA_STYLE);
System.out.println(java.text.MessageFormat.format("Paragraphs with \"{0}\" styles ({1}):", PARA_STYLE, paragraphs.size()));
for (Paragraph paragraph : paragraphs)
System.out.print(paragraph.toString(SaveFormat.TEXT));
// Collect runs with defined styles.
// Show the number of collected runs and display the text of this runs.
ArrayList<Run> runs = runsByStyleName(doc, RUN_STYLE);
System.out.println(java.text.MessageFormat.format("\nRuns with \"{0}\" styles ({1}):", RUN_STYLE, runs.size()));
for (Run run : runs)
System.out.println(run.getRange().getText());

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

working-with-styles-aspose-words-java-2

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

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

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

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Style paraStyle = builder.getDocument().getStyles().add(StyleType.PARAGRAPH, "MyParaStyle");
paraStyle.getFont().setBold(false);
paraStyle.getFont().setSize(8);
paraStyle.getFont().setName("Arial");
// Append text with "Heading 1" style.
builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1);
builder.write("Heading 1");
builder.insertStyleSeparator();
// Append text with another style.
builder.getParagraphFormat().setStyleName(paraStyle.getName());
builder.write("This is text with some other formatting ");
dataDir = dataDir + "InsertStyleSeparator_out.doc";
doc.save(dataDir);

انسخ جميع الأنماط من القالب

هناك حالات تريد فيها نسخ جميع الأنماط من مستند إلى آخر. يمكنك استخدام طريقة Document.CopyStylesFromTemplate لنسخ الأنماط من القالب المحدد إلى مستند. عندما يتم نسخ الأنماط من قالب إلى مستند، يتم إعادة تعريف الأنماط المسماة في المستند لتتناسب مع أوصاف الأنماط في القالب. يتم نسخ الأنماط الفريدة من القالب إلى المستند. تظل الأنماط الفريدة في المستند سليمة.

يوضح مثال التعليمات البرمجية التالية كيفية نسخ الأنماط من مستند إلى آخر.

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(dataDir + "template.docx");
Document target = new Document(dataDir + "TestFile.doc");
target.copyStylesFromTemplate(doc);
dataDir = dataDir + "CopyStyles_out.docx";
doc.save(dataDir);

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

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

  • الموضوع
  • ThemeFonts
  • ThemeColors

هنا هو كيف يمكنك الحصول على خصائص الموضوع:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(GetThemeProperties.class);
Document doc = new Document(dataDir + "Document.doc");
Theme theme = doc.getTheme();
// Major (Headings) font for Latin characters.
System.out.println(theme.getMajorFonts().getLatin());
// Minor (Body) font for EastAsian characters.
System.out.println(theme.getMinorFonts().getEastAsian());
// Color for theme color Accent 1.
System.out.println(theme.getColors().getAccent1());

وهنا هو كيف يمكنك تعيين خصائص الموضوع:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(SetThemeProperties.class);
Document doc = new Document(dataDir + "Document.doc");
Theme theme = doc.getTheme();
// Set Times New Roman font as Body theme font for Latin Character.
theme.getMinorFonts().setLatin("Algerian");
// Set Color.Gold for theme color Hyperlink.
theme.getColors().setHyperlink(java.awt.Color.DARK_GRAY);
doc.save(dataDir + "output.doc");