کار با سبک ها و تم ها

کلاس StyleCollection برای مدیریت تنظیمات داخلی و اعمال تنظیمات تعریف شده توسط کاربر به سبک ها استفاده می شود.

نحوه استخراج محتوا بر اساس سبک ها

در یک سطح ساده، بازیابی محتوا بر اساس سبک ها از یک سند ورد می تواند برای شناسایی، لیست و شمارش پاراگراف ها و اجراهای متن فرمت شده با یک سبک خاص مفید باشد. به عنوان مثال، ممکن است لازم باشد انواع خاصی از محتوا را در سند شناسایی کنید، مانند مثال ها، عناوین، مرجع ها، کلمات کلیدی، نام شکل ها و مطالعات موردی.

برای اینکه این کار را چند قدم جلوتر ببریم، می توان از این برای استفاده از ساختار سند، که توسط سبک هایی که استفاده می کند تعریف شده است، برای استفاده مجدد از سند برای خروجی دیگر، مانند HTML استفاده کرد. در واقع این است که چگونه مستندات Aspose ساخته شده است، قرار دادن Aspose.Words به آزمون. ابزاری که با استفاده از Aspose.Words ساخته شده است، اسناد کلمه منبع را می گیرد و آنها را به موضوعات در سطوح خاصی تقسیم می کند. یک فایل XML با استفاده از Aspose.Words تولید می شود که برای ساخت درخت ناوبری که می توانید در سمت چپ ببینید استفاده می شود. و سپس Aspose.Words هر موضوع را به HTML تبدیل می کند. راه حل برای بازیابی متن فرمت شده با سبک های خاص در یک سند ورد به طور معمول اقتصادی و ساده با استفاده از Aspose.Words است.

برای نشان دادن اینکه چگونه به راحتی Aspose.Words بازیابی محتوا را بر اساس سبک ها انجام می دهد، بیایید به یک مثال نگاه کنیم. در این مثال، ما می خواهیم متن فرمت شده با یک سبک پاراگراف خاص و یک سبک کاراکتر را از یک سند Word نمونه بازیابی کنیم.

در سطح بالا، این شامل:

  1. باز کردن یک سند ورد با استفاده از کلاس Document.
  2. گرفتن مجموعه ای از تمام پاراگراف ها و تمام اجرا می شود در سند.
  3. انتخاب تنها پاراگراف های مورد نیاز و اجرا می شود.

به طور خاص، ما متن فرمت شده با سبک پاراگراف “Heading 1 “و سبک کاراکتر” تأکید شدید " را از این نمونه سند Word بازیابی خواهیم کرد.

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

در این نمونه سند، متن با سبک پاراگراف “Heading 1 ““Insert Tab”، “Quick Styles” و “Theme” فرمت شده است و متن با سبک کاراکتر “تأکید شدید” چندین نمونه از متن آبی، کج و جسورانه مانند “گالری ها” و “نگاه کلی” است.

پیاده سازی یک پرس و جو مبتنی بر سبک در مدل Aspose.Words document object بسیار ساده است، زیرا به سادگی از ابزارهایی استفاده می کند که در حال حاضر در محل هستند. دو روش کلاس برای این راه حل اجرا می شود:

  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 استفاده می کند که مجموعه ای از تمام گره های کودک فوری را باز می گرداند.

همچنین لازم به ذکر است که مجموعه پاراگراف ها هزینه ای فوری ایجاد نمی کند زیرا پاراگراف ها فقط زمانی در این مجموعه بارگذاری می شوند که به موارد موجود در آنها دسترسی داشته باشید.سپس، تنها کاری که باید انجام دهید این است که از طریق مجموعه، با استفاده از عملگر foreach استاندارد و اضافه کردن پاراگراف هایی که سبک مشخص شده را به آرایه 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

همانطور که می بینید، این یک مثال بسیار ساده است، که تعداد و متن پاراگراف های جمع آوری شده را نشان می دهد و در نمونه سند Word اجرا می شود.

برای قرار دادن سبک های مختلف پاراگراف، جداکننده سبک را وارد کنید

جداکننده سبک را می توان با استفاده از میانبر صفحه کلید Ctrl + Alt + Enter به MS Word به پایان یک پاراگراف اضافه کرد. این ویژگی اجازه می دهد تا دو سبک پاراگراف مختلف در یک پاراگراف چاپی منطقی استفاده شود. اگر می خواهید متنی از ابتدای یک عنوان خاص در جدول محتویات ظاهر شود اما نمی خواهید کل عنوان در جدول محتویات باشد، می توانید از این ویژگی استفاده کنید.

مثال کد زیر نشان می دهد که چگونه یک جدا کننده سبک را برای قرار دادن سبک های پاراگراف مختلف وارد کنید.

// 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);

چگونه ویژگی های تم را دستکاری کنیم

ما basic 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");