Effectieve vormeigenschappen ophalen uit presentaties in Java
Overzicht
Dit onderwerp legt het verschil uit tussen lokale en effectieve eigenschappen. Lokale waarden zijn waarden die rechtstreeks op een specifiek opmaakniveau zijn ingesteld, bijvoorbeeld:
- Deel‑eigenschappen op een dia.
- Prototype‑vorm‑tekststijlen op een indeling of master‑dia, wanneer de tekstvak‑vorm van het deel er één heeft.
- Globale tekstinstellingen in een presentatie.
Lokale waarden kunnen op elk niveau worden gedefinieerd of weggelaten. Wanneer Aspose.Slides de uiteindelijke “zoals gerenderd” opmaak nodig heeft, lost het de overervingsketen op en retourneert effectieve waarden. Je kunt ze ophalen door de getEffective‑methode aan te roepen op het lokale opmaakobject.
Het volgende voorbeeld laat zien hoe je effectieve waarden kunt verkrijgen. Het gaat ervan uit dat de eerste vorm op de eerste dia een IAutoShape is met een tekstvak en minstens één deel.
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = (IAutoShape)slide.getShapes().get_Item(0);
ITextFrameFormat localTextFrameFormat = shape.getTextFrame().getTextFrameFormat();
ITextFrameFormatEffectiveData effectiveTextFrameFormat = localTextFrameFormat.getEffective();
IParagraph paragraph = shape.getTextFrame().getParagraphs().get_Item(0);
IPortion portion = paragraph.getPortions().get_Item(0);
IPortionFormat localPortionFormat = portion.getPortionFormat();
IPortionFormatEffectiveData effectivePortionFormat = localPortionFormat.getEffective();
} finally {
presentation.dispose();
}
getEffective na het wijzigen van de bovenliggende of geërfde opmaak kan de cache vernieuwen, en een eerder verkregen object vertegenwoordigt mogelijk niet meer de eerdere toestand. Als je effectieve waarden later opnieuw wilt gebruiken, kopieer dan de benodigde eigenschappen, zoals lettergrootte, vulkleur, lettertype‑stijl of uitlijning, naar je eigen data‑object.
Effectieve eigenschappen van een camera ophalen
Aspose.Slides stelt je in staat om de effectieve eigenschappen van een camera op te halen. De ICameraEffectiveData‑interface vertegenwoordigt een onmutable object dat effectieve cameragegevens bevat. Een ICameraEffectiveData‑instantie wordt blootgesteld via IThreeDFormatEffectiveData, die effectieve waarden voor IThreeDFormat levert.
De volgende code‑voorbeeld laat zien hoe je effectieve eigenschappen van de camera kunt ophalen. Het gaat ervan uit dat de eerste vorm op de eerste dia 3D‑opmaak heeft.
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
IThreeDFormatEffectiveData threeDEffectiveData = shape.getThreeDFormat().getEffective();
ICameraEffectiveData cameraEffectiveData = threeDEffectiveData.getCamera();
int cameraType = cameraEffectiveData.getCameraType();
double fieldOfViewAngle = cameraEffectiveData.getFieldOfViewAngle();
double zoom = cameraEffectiveData.getZoom();
System.out.println("= Effective camera properties =");
System.out.println("Type: " + cameraType);
System.out.println("Field of view: " + fieldOfViewAngle);
System.out.println("Zoom: " + zoom);
} finally {
presentation.dispose();
}
Effectieve eigenschappen van een lichtinrichting ophalen
Aspose.Slides stelt je in staat om de effectieve eigenschappen van een lichtinrichting op te halen. De ILightRigEffectiveData‑interface vertegenwoordigt een onmutable object dat effectieve lichtinrichtings‑eigenschappen bevat. Een ILightRigEffectiveData‑instantie wordt blootgesteld via IThreeDFormatEffectiveData, die effectieve waarden voor IThreeDFormat biedt.
De volgende code‑voorbeeld laat zien hoe je effectieve eigenschappen van de lichtinrichting kunt ophalen. Het gaat ervan uit dat de eerste vorm op de eerste dia 3D‑opmaak heeft.
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
IThreeDFormatEffectiveData threeDEffectiveData = shape.getThreeDFormat().getEffective();
ILightRigEffectiveData lightRigEffectiveData = threeDEffectiveData.getLightRig();
int lightType = lightRigEffectiveData.getLightType();
int direction = lightRigEffectiveData.getDirection();
System.out.println("= Effective light rig properties =");
System.out.println("Type: " + lightType);
System.out.println("Direction: " + direction);
} finally {
presentation.dispose();
}
Effectieve eigenschappen van een schuine vorm ophalen
Aspose.Slides stelt je in staat om de effectieve eigenschappen van een vormschuine (bevel) op te halen. De IShapeBevelEffectiveData‑interface vertegenwoordigt een onmutable object dat effectieve hoek‑relief‑eigenschappen voor een vorm bevat. Een IShapeBevelEffectiveData‑instantie wordt blootgesteld via IThreeDFormatEffectiveData, die effectieve waarden voor IThreeDFormat levert.
De volgende code‑voorbeeld toont hoe je effectieve eigenschappen van de bovenste bevel van een vorm kunt ophalen. Het gaat ervan uit dat de eerste vorm op de eerste dia 3D‑opmaak heeft.
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
IThreeDFormatEffectiveData threeDEffectiveData = shape.getThreeDFormat().getEffective();
IShapeBevelEffectiveData bevelTop = threeDEffectiveData.getBevelTop();
int bevelType = bevelTop.getBevelType();
double bevelWidth = bevelTop.getWidth();
double bevelHeight = bevelTop.getHeight();
System.out.println("= Effective shape's top face relief properties =");
System.out.println("Type: " + bevelType);
System.out.println("Width: " + bevelWidth);
System.out.println("Height: " + bevelHeight);
} finally {
presentation.dispose();
}
Effectieve eigenschappen van een tekstvak ophalen
Met Aspose.Slides kun je de effectieve eigenschappen van een tekstvak ophalen. De ITextFrameFormatEffectiveData‑interface bevat effectieve tekstvak‑opmaak‑eigenschappen.
De volgende code‑voorbeeld laat zien hoe je effectieve tekstvak‑opmaak‑eigenschappen kunt verkrijgen. Het gaat ervan uit dat de eerste vorm op de eerste dia een IAutoShape is met een tekstvak.
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = (IAutoShape)slide.getShapes().get_Item(0);
ITextFrameFormat textFrameFormat = shape.getTextFrame().getTextFrameFormat();
ITextFrameFormatEffectiveData effectiveTextFrameFormat = textFrameFormat.getEffective();
int anchoringType = effectiveTextFrameFormat.getAnchoringType();
int autofitType = effectiveTextFrameFormat.getAutofitType();
int textVerticalType = effectiveTextFrameFormat.getTextVerticalType();
double marginLeft = effectiveTextFrameFormat.getMarginLeft();
double marginTop = effectiveTextFrameFormat.getMarginTop();
double marginRight = effectiveTextFrameFormat.getMarginRight();
double marginBottom = effectiveTextFrameFormat.getMarginBottom();
System.out.println("Anchoring type: " + anchoringType);
System.out.println("Autofit type: " + autofitType);
System.out.println("Text vertical type: " + textVerticalType);
System.out.println("Margins");
System.out.println(" Left: " + marginLeft);
System.out.println(" Top: " + marginTop);
System.out.println(" Right: " + marginRight);
System.out.println(" Bottom: " + marginBottom);
} finally {
presentation.dispose();
}
Effectieve eigenschappen van een tekstopmaak ophalen
Met Aspose.Slides kun je de effectieve eigenschappen van een tekstopmaak ophalen. De ITextStyleEffectiveData‑interface bevat effectieve tekstopmaak‑eigenschappen.
De volgende code‑voorbeeld laat zien hoe je effectieve tekstopmaak‑eigenschappen kunt verkrijgen. Het gaat ervan uit dat de eerste vorm op de eerste dia een IAutoShape is met een tekstvak.
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = (IAutoShape)slide.getShapes().get_Item(0);
ITextStyleEffectiveData effectiveTextStyle = shape.getTextFrame().getTextFrameFormat().getTextStyle().getEffective();
int levelCount = 9;
for (int levelIndex = 0; levelIndex < levelCount; levelIndex++)
{
IParagraphFormatEffectiveData effectiveStyleLevel = effectiveTextStyle.getLevel(levelIndex);
int depth = effectiveStyleLevel.getDepth();
double indent = effectiveStyleLevel.getIndent();
int alignment = effectiveStyleLevel.getAlignment();
int fontAlignment = effectiveStyleLevel.getFontAlignment();
System.out.println("= Effective paragraph formatting for style level #" + levelIndex + " =");
System.out.println("Depth: " + depth);
System.out.println("Indent: " + indent);
System.out.println("Alignment: " + alignment);
System.out.println("Font alignment: " + fontAlignment);
}
} finally {
presentation.dispose();
}
De effectieve letterhoogte‑waarde ophalen
Met Aspose.Slides kun je de effectieve letterhoogte ophalen. De volgende code demonstreert hoe de effectieve letterhoogte van een deel verandert nadat lokale letterhoogte‑waarden op verschillende niveaus van de presentatiestructuur zijn ingesteld.
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape autoShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 400, 75, false);
autoShape.addTextFrame("");
IParagraph paragraph = autoShape.getTextFrame().getParagraphs().get_Item(0);
paragraph.getPortions().clear();
IPortion firstPortion = new Portion("Sample text with first portion");
IPortion secondPortion = new Portion(" and second portion.");
paragraph.getPortions().add(firstPortion);
paragraph.getPortions().add(secondPortion);
IPortionFormatEffectiveData firstPortionFormatEffectiveData = firstPortion.getPortionFormat().getEffective();
IPortionFormatEffectiveData secondPortionFormatEffectiveData = secondPortion.getPortionFormat().getEffective();
System.out.println("Effective font height just after creation:");
double firstPortionFontHeight = firstPortionFormatEffectiveData.getFontHeight();
double secondPortionFontHeight = secondPortionFormatEffectiveData.getFontHeight();
System.out.println("Portion #0: " + firstPortionFontHeight);
System.out.println("Portion #1: " + secondPortionFontHeight);
presentation.getDefaultTextStyle().getLevel(0).getDefaultPortionFormat().setFontHeight(24);
firstPortionFormatEffectiveData = firstPortion.getPortionFormat().getEffective();
secondPortionFormatEffectiveData = secondPortion.getPortionFormat().getEffective();
System.out.println("Effective font height after setting the presentation default font height:");
firstPortionFontHeight = firstPortionFormatEffectiveData.getFontHeight();
secondPortionFontHeight = secondPortionFormatEffectiveData.getFontHeight();
System.out.println("Portion #0: " + firstPortionFontHeight);
System.out.println("Portion #1: " + secondPortionFontHeight);
paragraph.getParagraphFormat().getDefaultPortionFormat().setFontHeight(40);
firstPortionFormatEffectiveData = firstPortion.getPortionFormat().getEffective();
secondPortionFormatEffectiveData = secondPortion.getPortionFormat().getEffective();
System.out.println("Effective font height after setting paragraph default font height:");
firstPortionFontHeight = firstPortionFormatEffectiveData.getFontHeight();
secondPortionFontHeight = secondPortionFormatEffectiveData.getFontHeight();
System.out.println("Portion #0: " + firstPortionFontHeight);
System.out.println("Portion #1: " + secondPortionFontHeight);
firstPortion.getPortionFormat().setFontHeight(55);
firstPortionFormatEffectiveData = firstPortion.getPortionFormat().getEffective();
secondPortionFormatEffectiveData = secondPortion.getPortionFormat().getEffective();
System.out.println("Effective font height after setting portion #0 font height:");
firstPortionFontHeight = firstPortionFormatEffectiveData.getFontHeight();
secondPortionFontHeight = secondPortionFormatEffectiveData.getFontHeight();
System.out.println("Portion #0: " + firstPortionFontHeight);
System.out.println("Portion #1: " + secondPortionFontHeight);
secondPortion.getPortionFormat().setFontHeight(18);
firstPortionFormatEffectiveData = firstPortion.getPortionFormat().getEffective();
secondPortionFormatEffectiveData = secondPortion.getPortionFormat().getEffective();
System.out.println("Effective font height after setting portion #1 font height:");
firstPortionFontHeight = firstPortionFormatEffectiveData.getFontHeight();
secondPortionFontHeight = secondPortionFormatEffectiveData.getFontHeight();
System.out.println("Portion #0: " + firstPortionFontHeight);
System.out.println("Portion #1: " + secondPortionFontHeight);
presentation.save("SetLocalFontHeightValues.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Effectieve vulopmaak voor een tabel ophalen
Met Aspose.Slides kun je effectieve vulopmaak ophalen voor verschillende tabelonderdelen. De IFillFormatEffectiveData‑interface bevat effectieve vulopmaak‑eigenschappen. Cel‑opmaak heeft een hogere prioriteit dan rij‑opmaak, rij‑opmaak heeft een hogere prioriteit dan kolom‑opmaak, en kolom‑opmaak heeft een hogere prioriteit dan opmaak voor de gehele tabel.
Als gevolg hiervan worden de eigenschappen van ICellFormatEffectiveData gebruikt om de tabelcel te tekenen. De volgende code‑voorbeeld laat zien hoe je effectieve vulopmaak voor verschillende tabelonderdelen kunt ophalen. Het gaat ervan uit dat de eerste vorm op de eerste dia een ITable is.
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
ITable table = (ITable)slide.getShapes().get_Item(0);
ITableFormatEffectiveData tableFormatEffective = table.getTableFormat().getEffective();
IRowFormatEffectiveData rowFormatEffective = table.getRows().get_Item(0).getRowFormat().getEffective();
IColumnFormatEffectiveData columnFormatEffective = table.getColumns().get_Item(0).getColumnFormat().getEffective();
ICellFormatEffectiveData cellFormatEffective = table.get_Item(0, 0).getCellFormat().getEffective();
IFillFormatEffectiveData tableFillFormatEffective = tableFormatEffective.getFillFormat();
IFillFormatEffectiveData rowFillFormatEffective = rowFormatEffective.getFillFormat();
IFillFormatEffectiveData columnFillFormatEffective = columnFormatEffective.getFillFormat();
IFillFormatEffectiveData cellFillFormatEffective = cellFormatEffective.getFillFormat();
} finally {
presentation.dispose();
}
Veelgestelde vragen
Retourneert getEffective een momentopname?
Niet altijd. Effectieve data vertegenwoordigt de berekende opmaak nadat erfelijkheid is toegepast, maar sommige effectieve data‑objecten kunnen intern worden gecached. Een volgende aanroep van getEffective kan de opmaak opnieuw berekenen en de cache vernieuwen, waardoor een eerder verkregen object niet als een duurzame momentopname mag worden beschouwd.
Wanneer moet ik effectieve eigenschappen opnieuw lezen?
Roep getEffective opnieuw aan nadat je lokale opmaak, bovenliggende stijlen, indelings‑opmaak, master‑opmaak of presentatie‑standaardinstellingen hebt gewijzigd. De volgende aanroep herziet de opmaakhiërarchie en retourneert het actuele effectieve resultaat.
Heeft het wijzigen of verwijderen van een indeling/master‑dia invloed op reeds opgehaalde effectieve eigenschappen?
Ja, maar de wijziging wordt zichtbaar bij de volgende getEffective‑aanroep. Als een bron van bovenliggende opmaak wordt gewijzigd of verwijderd, kunnen eerder verkregen effectieve data verouderd zijn. Zodra getEffective opnieuw wordt aangeroepen, evalueert Aspose.Slides de opmaakboom opnieuw en kunnen lettertypes, kleuren, afmetingen of andere waarden veranderen.
Kan ik waarden wijzigen via effectieve data‑objecten?
Nee. Effectieve data‑objecten exposeren berekende waarden. Breng wijzigingen aan in de lokale opmaakobjecten en haal daarna de effectieve waarden opnieuw op.
Wat gebeurt er als een eigenschap niet is ingesteld op vormniveau, noch in de indeling/master, noch in globale instellingen?
De effectieve waarde wordt bepaald door het standaardmechanisme, dat de standaardinstellingen van PowerPoint en Aspose.Slides omvat. Die berekende waarde maakt deel uit van de huidige effectieve data.
Kan ik aan de hand van een effectieve letterwaarde afleiden op welk niveau de grootte of het lettertype is gedefinieerd?
Niet rechtstreeks. Effectieve data geeft de uiteindelijke waarde terug. Om de bron te vinden, controleer je de lokale waarden op het deel, de alinea, het tekstvak en de tekststijlen op indelings‑, master‑ en presentatieniveau om te zien waar de eerste expliciete definitie voorkomt.
Waarom lijken effectieve waarden soms identiek aan de lokale waarden?
Omdat de lokale waarde uiteindelijk de definitieve waarde bleek te zijn (er was geen hogere‑niveau‑erfenis nodig). In dat geval komt de effectieve waarde overeen met de lokale.
Wanneer moet ik effectieve eigenschappen gebruiken en wanneer alleen lokale?
Gebruik effectieve data wanneer je het “zoals gerenderd” resultaat nodig hebt na toepassing van alle erfelijkheid, bijvoorbeeld om kleuren, inspringingen of afmetingen uit te lijnen. Als je die waarden wilt behouden, ongeacht latere opmaakwijzigingen, kopieer je de benodigde eigenschappen naar je eigen object. Als je op een specifiek niveau de opmaak wilt wijzigen, pas dan de lokale eigenschappen aan en lees desgewenst de effectieve data opnieuw om het resultaat te verifiëren.