จัดการธีมการนำเสนอใน Java
บทนำ
ธีมการนำเสนอกำหนดคุณสมบัติขององค์ประกอบการออกแบบ เมื่อคุณเลือกธีมการนำเสนอ คุณกำลังเลือกชุดขององค์ประกอบภาพและคุณสมบัติเฉพาะของมัน
ใน PowerPoint ธีมประกอบด้วยสี, แบบอักษร, สไตล์พื้นหลัง, และเอฟเฟกต์

เปลี่ยนสีธีม
ธีม PowerPoint ใช้ชุดสีเฉพาะสำหรับองค์ประกอบต่าง ๆ บนสไลด์ หากคุณไม่ชอบสีเหล่านั้น คุณสามารถเปลี่ยนสีโดยการใช้สีใหม่สำหรับธีม Aspose.Slides มีค่าต่าง ๆ ภายใต้ enumeration SchemeColor
โค้ด Java นี้แสดงวิธีเปลี่ยนสีสำเนียงของธีม:
Presentation pres = new Presentation();
try {
IAutoShape shape = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 100, 100);
shape.getFillFormat().setFillType(FillType.Solid);
shape.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
} finally {
if (pres != null) pres.dispose();
}
คุณสามารถกำหนดค่าที่มีผลของสีที่ได้ตามนี้:
IFillFormatEffectiveData fillEffective = shape.getFillFormat().getEffective();
Color effectiveColor = fillEffective.getSolidFillColor();
System.out.println(String.format("Color [A=%d, R=%d, G=%d, B=%d]",
effectiveColor.getAlpha(), effectiveColor.getRed(), effectiveColor.getGreen(), effectiveColor.getBlue()));
เพื่อแสดงการเปลี่ยนสีเพิ่มเติม เราจะสร้างองค์ประกอบอีกอันหนึ่งและกำหนดสีสำเนียง (จากการทำงานแรก) ให้กับมัน แล้วจึงเปลี่ยนสีในธีม:
IAutoShape otherShape = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 10, 120, 100, 100);
otherShape.getFillFormat().setFillType(FillType.Solid);
otherShape.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
pres.getMasterTheme().getColorScheme().getAccent4().setColor(Color.RED);
สีใหม่จะถูกนำไปใช้โดยอัตโนมัติบนทั้งสององค์ประกอบ
ตั้งค่าสีธีมจากพาเล็ตเพิ่มเติม
เมื่อคุณทำการแปลงความสว่างให้กับสีธีมหลัก(1) จะได้สีจากพาเล็ตเพิ่มเติม(2) คุณจึงสามารถตั้งค่าและดึงค่าสีธีมเหล่านั้นได้

1 - สีธีมหลัก
2 - สีจากพาเล็ตเพิ่มเติม
โค้ด Java นี้แสดงการดึงสีพาเล็ตเพิ่มเติมจากสีธีมหลักและนำไปใช้กับรูปร่าง:
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
// สีเน้น 4
IShape shape1 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 50, 50);
shape1.getFillFormat().setFillType(FillType.Solid);
shape1.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
// สีเน้น 4, สว่างขึ้น 80%
IShape shape2 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 70, 50, 50);
shape2.getFillFormat().setFillType(FillType.Solid);
shape2.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
shape2.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.2f);
shape2.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.AddLuminance, 0.8f);
// สีเน้น 4, สว่างขึ้น 60%
IShape shape3 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 130, 50, 50);
shape3.getFillFormat().setFillType(FillType.Solid);
shape3.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
shape3.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.4f);
shape3.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.AddLuminance, 0.6f);
// สีเน้น 4, สว่างขึ้น 40%
IShape shape4 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 190, 50, 50);
shape4.getFillFormat().setFillType(FillType.Solid);
shape4.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
shape4.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.6f);
shape4.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.AddLuminance, 0.4f);
// สีเน้น 4, มืดลง 25%
IShape shape5 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 250, 50, 50);
shape5.getFillFormat().setFillType(FillType.Solid);
shape5.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
shape5.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.75f);
// สีเน้น 4, มืดลง 50%
IShape shape6 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 310, 50, 50);
shape6.getFillFormat().setFillType(FillType.Solid);
shape6.getFillFormat().getSolidFillColor().setSchemeColor(SchemeColor.Accent4);
shape6.getFillFormat().getSolidFillColor().getColorTransform().add(ColorTransformOperation.MultiplyLuminance, 0.5f);
presentation.save(path + "example_accent4.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
แมป SchemeColor ไปยังสี IColorScheme
เมื่อคุณทำงานกับ SchemeColor คุณอาจสังเกตว่ามีค่าธีมสีต่อไปนี้:
Background1, Background2, Text1, และ Text2.
แต่ Presentation.getMasterTheme().getColorScheme() จะคืนค่าเป็น IColorScheme ซึ่งเปิดเผยสีที่สอดคล้องกันเป็น:
Dark1, Dark2, Light1, และ Light2.
ความแตกต่างนี้เป็นเพียงชื่อเท่านั้น ค่าต่าง ๆ อ้างอิงถึงตำแหน่งสีธีมเดียวกันและการแมปคงที่ดังนี้:
Text1=Dark1Background1=Light1Text2=Dark2Background2=Light2
ไม่มีการแปลงแบบไดนามิกระหว่าง Text/Background กับ Dark/Light พวกเขาเป็นชื่อสลับกันของสีธีมเดียวกัน
ความแตกต่างของการตั้งชื่อนี้มาจากศัพท์ของ Microsoft Office รุ่นเก่าใช้ Dark 1, Light 1, Dark 2, Light 2 ส่วน UI รุ่นใหม่แสดงตำแหน่งเดียวกันเป็น Text 1, Background 1, Text 2, Background 2
เปลี่ยนแบบอักษรธีม
เพื่อให้คุณเลือกแบบอักษรสำหรับธีมและการใช้อื่น ๆ Aspose.Slides ใช้ตัวระบุพิเศษเหล่านี้ (คล้ายกับที่ใช้ใน PowerPoint):
- +mn-lt - แบบอักษรตัวอักษรละติน (Minor Latin Font)
- +mj-lt - แบบอักษรหัวเรื่องละติน (Major Latin Font)
- +mn-ea - แบบอักษรเอเชียตะวันออก (Minor East Asian Font)
- +mj-ea - แบบอักษรเอเชียตะวันออก (Major East Asian Font)
โค้ด Java นี้แสดงวิธีกำหนดแบบอักษรละตินให้กับองค์ประกอบธีม:
IAutoShape shape = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 100, 100);
Paragraph paragraph = new Paragraph();
Portion portion = new Portion("Theme text format");
paragraph.getPortions().add(portion);
shape.getTextFrame().getParagraphs().add(paragraph);
portion.getPortionFormat().setLatinFont(new FontData("+mn-lt"));
โค้ด Java นี้แสดงวิธีเปลี่ยนแบบอักษรธีมของการนำเสนอ:
pres.getMasterTheme().getFontScheme().getMinor().setLatinFont(new FontData("Arial"));
แบบอักษรในกล่องข้อความทั้งหมดจะได้รับการอัปเดต
TIP
คุณอาจต้องการดู แบบอักษร PowerPoint.เปลี่ยนสไตล์พื้นหลังธีม
โดยค่าเริ่มต้น PowerPoint มีพื้นหลังสำเร็จรูป 12 แบบ แต่เพียง 3 แบบจาก 12 แบบนั้นจะถูกบันทึกในงานนำเสนอทั่วไป

ตัวอย่างเช่น หลังจากบันทึกงานนำเสนอใน PowerPoint คุณสามารถรันโค้ด Java นี้เพื่อค้นหาจำนวนพื้นหลังสำเร็จรูปในงานนำเสนอ:
Presentation pres = new Presentation("pres.pptx");
try {
int numberOfBackgroundFills = pres.getMasterTheme().getFormatScheme().getBackgroundFillStyles().size();
System.out.println("Number of background fill styles for theme is " + numberOfBackgroundFills);
} finally {
if (pres != null) pres.dispose();
}
โค้ด Java นี้แสดงวิธีตั้งค่าพื้นหลังสำหรับงานนำเสนอ:
pres.getMasters().get_Item(0).getBackground().setStyleIndex(2);
คู่มือดัชนี: 0 ใช้สำหรับไม่มีการเติม สีเริ่มต้นที่ 1
TIP
คุณอาจต้องการดู พื้นหลัง PowerPoint.เปลี่ยนเอฟเฟกต์ธีม
ธีม PowerPoint ปกติมีค่า 3 ค่าในแต่ละอาร์เรย์สไตล์ อาร์เรย์เหล่านี้รวมกันเป็น 3 เอฟเฟกต์: Subtle, Moderate, และ Intense ตัวอย่างเช่น นี่คือผลลัพธ์เมื่อเอฟเฟกต์ถูกนำไปใช้กับรูปร่างเฉพาะ

โดยใช้คุณสมบัติ 3 อย่าง (FillStyles, LineStyles, EffectStyles) จากคลาส FormatScheme คุณสามารถเปลี่ยนองค์ประกอบในธีมได้อย่างยืดหยุ่นมากกว่าตัวเลือกใน PowerPoint
โค้ด Java นี้แสดงวิธีเปลี่ยนเอฟเฟกต์ธีมโดยการปรับส่วนต่าง ๆ ขององค์ประกอบ:
Presentation pres = new Presentation("Subtle_Moderate_Intense.pptx");
try {
pres.getMasterTheme().getFormatScheme().getLineStyles().get_Item(0).getFillFormat().getSolidFillColor().setColor(Color.RED);
pres.getMasterTheme().getFormatScheme().getFillStyles().get_Item(2).setFillType(FillType.Solid);
pres.getMasterTheme().getFormatScheme().getFillStyles().get_Item(2).getSolidFillColor().setColor(Color.GREEN);
pres.getMasterTheme().getFormatScheme().getEffectStyles().get_Item(2).getEffectFormat().getOuterShadowEffect().setDistance(10f);
pres.save("Design_04_Subtle_Moderate_Intense-out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
การเปลี่ยนแปลงที่เกิดขึ้นในสีเติม, ประเภทการเติม, เงา ฯลฯ:

FAQ
ฉันสามารถใช้ธีมกับสไลด์เดียวโดยไม่เปลี่ยนมาสเตอร์ได้หรือไม่?
ได้ Aspose.Slides รองรับการแทนที่ธีมในระดับสไลด์ ดังนั้นคุณสามารถใช้ธีมเฉพาะสำหรับสไลด์นั้นโดยคงธีมมาสเตอร์ไว้ (ผ่าน SlideThemeManager)
วิธีที่ปลอดภัยที่สุดในการย้ายธีมจากงานนำเสนอหนึ่งไปยังอีกงานหนึ่งคืออะไร?
Clone slides พร้อมกับมาสเตอร์ของมันไปยังงานนำเป้าหมาย วิธีนี้จะคงมาสเตอร์, เลย์เอาต์และธีมที่เชื่อมโยงไว้ทำให้ลักษณะการแสดงผลสอดคล้องกัน
ฉันจะดูค่า “effective” หลังจากการสืบทอดและการแทนที่ทั้งหมดได้อย่างไร?
ใช้ “effective” views ของ API สำหรับธีม/สี/แบบอักษร/เอฟเฟกต์ ค่าที่คืนมาจะเป็นคุณสมบัติที่สรุปและสุดท้ายหลังจากใช้มาสเตอร์รวมกับการแทนที่ระดับท้องถิ่น.