การทำงานกับสไตล์และธีม
คลาส 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# การรับคอลเลกชันของ ทุกย่อหน้าและการรันทั้งหมดในเอกสาร # การเลือกเฉพาะย่อหน้าที่ต้องการและรัน โดยเฉพาะอย่างยิ่ง เราจะดึงข้อความที่จัดรูปแบบด้วยลักษณะย่อหน้า ‘Heading 1’ และลักษณะอักขระ ‘Intense Emphasis’ จากเอกสาร Word ตัวอย่างนี้
ในเอกสารตัวอย่างนี้ ข้อความที่จัดรูปแบบด้วยลักษณะย่อหน้า ‘หัวเรื่อง 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; | |
} |
การใช้งานนี้ยังใช้วิธี Document.GetChildNodes
ของคลาส Document
ซึ่งส่งคืนคอลเลกชันของโหนดทั้งหมดตามประเภทที่ระบุ ซึ่งในกรณีนี้ในทุกย่อหน้า
โปรดทราบว่าพารามิเตอร์ที่สองของวิธี Document.GetChildNodes ถูกตั้งค่าเป็น true วิธีนี้จะบังคับให้วิธี Document.GetChildNodes เลือกจากโหนดย่อยทั้งหมดแบบวนซ้ำ แทนที่จะเลือกเฉพาะโหนดย่อยที่อยู่ติดกัน
นอกจากนี้ ยังควรชี้ให้เห็นว่าคอลเลกชันย่อหน้าไม่ได้สร้างค่าใช้จ่ายทันที เนื่องจากย่อหน้าจะถูกโหลดลงในคอลเลกชันนี้เฉพาะเมื่อคุณเข้าถึงรายการในย่อหน้าเท่านั้น จากนั้น สิ่งที่คุณต้องทำคือไปที่คอลเลกชัน โดยใช้ตัวดำเนินการ foreach มาตรฐาน และเพิ่มย่อหน้าที่มีสไตล์ที่ระบุลงในอาร์เรย์ย่อหน้า WithStyle ชื่อรูปแบบ 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); |
ผลลัพธ์สุดท้าย
เมื่อทุกอย่างเสร็จสิ้น การรันตัวอย่างจะแสดงเอาต์พุตต่อไปนี้:
อย่างที่คุณเห็น นี่เป็นตัวอย่างง่ายๆ ที่แสดงหมายเลขและข้อความของย่อหน้าที่รวบรวมและเรียกใช้ในเอกสาร 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; |