Správa tvarů prezentace na Androidu
Přehled
Tento článek vysvětluje, jak pracovat s tvary v prezentacích pomocí Aspose.Slides. Ukazuje, jak najít tvar na snímku, klonovat jej, odstranit jej, skrýt jej, změnit jeho pořadí, získat jeho Interop Shape ID a nastavit alternativní text pro identifikaci a další zpracování.
Popisuje také, jak získat přístup k formátům rozvržení pro tvary, renderovat tvar jako SVG, zarovnat tvary na snímku a použít vlastnosti překlápění pro horizontální a vertikální zrcadlení. Navíc článek obsahuje krátkou sekci FAQ o kombinování tvarů, pořadí vrstev a zamykání tvarů.
Najít tvar na snímku
Toto téma popisuje jednoduchou techniku, která vývojářům usnadní nalezení konkrétního tvaru na snímku bez použití jeho vnitřního Id. Je důležité vědět, že soubory PowerPoint prezentací nemají žádný způsob, jak identifikovat tvary na snímku kromě vnitřního unikátního Id. Pro vývojáře může být obtížné najít tvar pomocí tohoto interního unikátního Id. Všechny tvary přidané do snímků mají nějaký alternativní text. Doporučujeme vývojářům používat alternativní text pro vyhledávání konkrétního tvaru. Můžete v MS PowerPoint definovat alternativní text pro objekty, které plánujete v budoucnu měnit.
Po nastavení alternativního textu požadovaného tvaru můžete otevřít tuto prezentaci pomocí Aspose.Slides pro Android via Java a iterovat přes všechny tvary přidané na snímek. Během každé iterace můžete zkontrolovat alternativní text tvaru a tvar s odpovídajícím alternativním textem bude ten, který potřebujete. Pro lepší demonstraci této techniky jsme vytvořili metodu findShape , která provede vyhledání konkrétního tvaru na snímku a jednoduše vrátí tento tvar.
// Vytvořte instanci třídy Presentation, která představuje soubor prezentace
Presentation pres = new Presentation("FindingShapeInSlide.pptx");
try {
ISlide slide = pres.getSlides().get_Item(0);
// Alternativní text tvaru, který se má najít
IShape shape = findShape(slide, "Shape1");
if (shape != null)
{
System.out.println("Shape Name: " + shape.getName());
}
} finally {
if (pres != null) pres.dispose();
}
// Implementace metody pro nalezení tvaru ve snímku pomocí jeho alternativního textu
public static IShape findShape(ISlide slide, String alttext)
{
// Procházení všech tvarů uvnitř snímku
for (int i = 0; i < slide.getShapes().size(); i++)
{
// Pokud se alternativní text snímku shoduje s požadovaným, pak
// Vraťte tvar
if (slide.getShapes().get_Item(i).getAlternativeText().compareTo(alttext) == 0)
return slide.getShapes().get_Item(i);
}
return null;
}
Klonovat tvar
Jak klonovat tvar na snímek pomocí Aspose.Slides pro Android via Java:
- Vytvořte instanci třídy Presentation.
- Získejte referenci na snímek pomocí jeho indexu.
- Přistupte ke kolekci tvarů zdrojového snímku.
- Přidejte nový snímek do prezentace.
- Klonujte tvary z kolekce tvarů zdrojového snímku do nového snímku.
- Uložte upravenou prezentaci jako soubor PPTX.
Níže uvedený příklad přidává skupinový tvar na snímek.
// Vytvořte instanci třídy Presentation
Presentation pres = new Presentation("Source Frame.pptx");
try {
IShapeCollection sourceShapes = pres.getSlides().get_Item(0).getShapes();
ILayoutSlide blankLayout = pres.getMasters().get_Item(0).getLayoutSlides().getByType(SlideLayoutType.Blank);
ISlide destSlide = pres.getSlides().addEmptySlide(blankLayout);
IShapeCollection destShapes = destSlide.getShapes();
destShapes.addClone(sourceShapes.get_Item(1), 50, 150 + sourceShapes.get_Item(0).getHeight());
destShapes.addClone(sourceShapes.get_Item(2));
destShapes.insertClone(0, sourceShapes.get_Item(0), 50, 150);
// Uložte soubor PPTX na disk
pres.save("CloneShape_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Odstranit tvar
Aspose.Slides pro Android via Java umožňuje vývojářům odstranit libovolný tvar. Chcete-li odstranit tvar z libovolného snímku, postupujte podle následujících kroků:
- Vytvořte instanci třídy Presentation.
- Přistupte k prvnímu snímku.
- Najděte tvar s konkrétním AlternativeText.
- Odstraňte tvar.
- Uložte soubor na disk.
// Vytvořte objekt Presentation
Presentation pres = new Presentation();
try {
// Získejte první snímek
ISlide sld = pres.getSlides().get_Item(0);
// Přidejte autoshape typu obdélník
sld.getShapes().addAutoShape(ShapeType.Rectangle, 50, 40, 150, 50);
sld.getShapes().addAutoShape(ShapeType.Moon, 160, 40, 150, 50);
String altText = "User Defined";
int iCount = sld.getShapes().size();
for (int i = 0; i < iCount; i++)
{
AutoShape ashp = (AutoShape)sld.getShapes().get_Item(0);
if (alttext.equals(ashp.getAlternativeText()))
{
sld.getShapes().remove(ashp);
}
}
// Uložte prezentaci na disk
pres.save("RemoveShape_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Skrýt tvar
Aspose.Slides pro Android via Java umožňuje vývojářům skrýt libovolný tvar. Chcete-li skrýt tvar na libovolném snímku, postupujte podle následujících kroků:
- Vytvořte instanci třídy Presentation.
- Přistupte k prvnímu snímku.
- Najděte tvar s konkrétním AlternativeText.
- Skrývejte tvar.
- Uložte soubor na disk.
// Vytvořte instanci třídy Presentation, která představuje soubor PPTX
Presentation pres = new Presentation();
try {
// Získejte první snímek
ISlide sld = pres.getSlides().get_Item(0);
// Přidejte autoshape typu obdélník
sld.getShapes().addAutoShape(ShapeType.Rectangle, 50, 40, 150, 50);
sld.getShapes().addAutoShape(ShapeType.Moon, 160, 40, 150, 50);
String alttext = "User Defined";
int iCount = sld.getShapes().size();
for (int i = 0; i < iCount; i++)
{
AutoShape ashp = (AutoShape)sld.getShapes().get_Item(i);
if (alttext.equals(ashp.getAlternativeText()))
{
ashp.setHidden(true);
}
}
// Uložte prezentaci na disk
pres.save("Hiding_Shapes_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Změnit pořadí tvaru
Aspose.Slides pro Android via Java umožňuje vývojářům změnit pořadí tvarů. Změna pořadí určuje, který tvar je vpředu a který v pozadí. Pro změnu pořadí tvaru na libovolném snímku postupujte podle následujících kroků:
- Vytvořte instanci třídy Presentation.
- Přistupte k prvnímu snímku.
- Přidejte tvar.
- Přidejte text do textového rámce tvaru.
- Přidejte další tvar se stejnými souřadnicemi.
- Změňte pořadí tvarů.
- Uložte soubor na disk.
Presentation pres = new Presentation("ChangeShapeOrder.pptx");
try {
ISlide slide = pres.getSlides().get_Item(0);
IAutoShape shp3 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 365, 400, 150);
shp3.getFillFormat().setFillType(FillType.NoFill);
shp3.addTextFrame(" ");
IParagraph para = shp3.getTextFrame().getParagraphs().get_Item(0);
IPortion portion = para.getPortions().get_Item(0);
portion.setText("Watermark Text Watermark Text Watermark Text");
shp3 = slide.getShapes().addAutoShape(ShapeType.Triangle, 200, 365, 400, 150);
slide.getShapes().reorder(2, shp3);
pres.save("Reshape_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Získat Interop Shape ID
Aspose.Slides pro Android via Java umožňuje vývojářům získat unikátní identifikátor tvaru v rozsahu snímku na rozdíl od metody getUniqueId , která umožňuje získat unikátní identifikátor v rozsahu celé prezentace. Metoda getOfficeInteropShapeId byla přidána do rozhraní IShape a třídy Shape. Hodnota vrácená metodou getOfficeInteropShapeId odpovídá hodnotě Id objektu Microsoft.Office.Interop.PowerPoint.Shape. Níže je uveden ukázkový kód.
Presentation pres = new Presentation("Presentation.pptx");
try {
// Získání unikátního identifikátoru tvaru v rozsahu snímku
long officeInteropShapeId = pres.getSlides().get_Item(0).getShapes().get_Item(0).getOfficeInteropShapeId();
} finally {
if (pres != null) pres.dispose();
}
Nastavit alternativní text pro tvar
Aspose.Slides pro Android via Java umožňuje vývojářům nastavit AlternateText libovolného tvaru. Tvary v prezentaci lze rozlišovat pomocí metody AlternativeText nebo Shape Name. Metody setAlternativeText a getAlternativeText lze číst i nastavovat pomocí Aspose.Slides i Microsoft PowerPoint. Pomocí této metody můžete označit tvar a provádět různé operace, jako je odstranění tvaru, skrytí tvaru nebo změna pořadí tvarů na snímku. Pro nastavení AlternateText tvaru postupujte podle následujících kroků:
- Vytvořte instanci třídy Presentation.
- Přistupte k prvnímu snímku.
- Přidejte libovolný tvar na snímek.
- Proveďte požadované operace s nově přidaným tvarem.
- Procházejte tvary a najděte požadovaný tvar.
- Nastavte AlternativeText.
- Uložte soubor na disk.
// Vytvořte instanci třídy Presentation, která představuje soubor PPTX
Presentation pres = new Presentation();
try {
// Získejte první snímek
ISlide sld = pres.getSlides().get_Item(0);
// Přidejte autoshape typu obdélník
IShape shp1 = sld.getShapes().addAutoShape(ShapeType.Rectangle, 50, 40, 150, 50);
IShape shp2 = sld.getShapes().addAutoShape(ShapeType.Moon, 160, 40, 150, 50);
shp2.getFillFormat().setFillType(FillType.Solid);
shp2.getFillFormat().getSolidFillColor().setColor(Color.GRAY);
for (int i = 0; i < sld.getShapes().size(); i++)
{
AutoShape shape = (AutoShape) sld.getShapes().get_Item(i);
if (shape != null)
{
shape.setAlternativeText("User Defined");
}
}
// Uložte prezentaci na disk
pres.save("Set_AlternativeText_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Přístup k formátům rozvržení pro tvar
Aspose.Slides pro Android via Java poskytuje jednoduché API pro přístup k formátům rozvržení pro tvar. Tento článek ukazuje, jak můžete přistupovat k formátům rozvržení.
Níže je uveden ukázkový kód.
Presentation pres = new Presentation("pres.pptx");
try {
for (ILayoutSlide layoutSlide : pres.getLayoutSlides())
{
for (IShape shape : layoutSlide.getShapes())
{
IFillFormat fillFormats = shape.getFillFormat();
ILineFormat lineFormats = shape.getLineFormat();
}
}
} finally {
if (pres != null) pres.dispose();
}
Renderovat tvar jako SVG
Aspose.Slides pro Android via Java nyní podporuje renderování tvaru jako SVG. Metoda writeAsSvg (a její přetížení) byla přidána do třídy Shape a rozhraní IShape. Tato metoda umožňuje uložit obsah tvaru jako soubor SVG. Níže uvedený úryvek kódu ukazuje, jak exportovat tvar snímku do SVG souboru.
Presentation pres = new Presentation("TestExportShapeToSvg.pptx");
try {
FileOutputStream stream = new FileOutputStream("SingleShape.svg");
try {
pres.getSlides().get_Item(0).getShapes().get_Item(0).writeAsSvg(stream);
} finally {
if (stream != null) stream.close();
}
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Zarovnat tvar
Aspose.Slides umožňuje zarovnávat tvary buď vzhledem k okrajům snímku, nebo vzhledem k sobě navzájem. Pro tento účel byla přidána přetížená metoda SlidesUtil.alignShape(). Výčtový typ ShapesAlignmentType definuje možné možnosti zarovnání.
Příklad 1
Zdrojový kód níže zarovnává tvary s indexy 1, 2 a 4 podél horního okraje snímku.
Presentation pres = new Presentation("example.pptx");
try {
ISlide slide = pres.getSlides().get_Item(0);
IShape shape1 = slide.getShapes().get_Item(1);
IShape shape2 = slide.getShapes().get_Item(2);
IShape shape3 = slide.getShapes().get_Item(4);
SlideUtil.alignShapes(ShapesAlignmentType.AlignTop, true, pres.getSlides().get_Item(0), new int[]
{
slide.getShapes().indexOf(shape1),
slide.getShapes().indexOf(shape2),
slide.getShapes().indexOf(shape3)
});
} finally {
if (pres != null) pres.dispose();
}
}
Příklad 2
Následující příklad ukazuje, jak zarovnat celou kolekci tvarů vzhledem k nejspodnějšímu tvaru v kolekci.
Presentation pres = new Presentation("example.pptx");
try {
SlideUtil.alignShapes(ShapesAlignmentType.AlignBottom, false, pres.getSlides().get_Item(0));
} finally {
if (pres != null) pres.dispose();
}
Vlastnosti překlápění
V Aspose.Slides třída ShapeFrame poskytuje řízení horizontálního a vertikálního zrcadlení tvarů pomocí vlastností flipH a flipV. Obě vlastnosti jsou typu byte a mohou nabývat hodnot 1 (překlopit), 0 (nepřeklopit) nebo -1 (výchozí chování). Tyto hodnoty jsou přístupné z Frame tvaru.
Pro úpravu nastavení překlápění se vytvoří nová instance ShapeFrame s aktuální pozicí a velikostí tvaru, požadovanými hodnotami pro flipH a flipV a úhlem otáčení. Přidělením této instance k Frame tvaru a uložením prezentace se aplikují zrcadlové transformace a zapíšou do výstupního souboru.
Předpokládejme, že máme soubor sample.pptx, ve kterém první snímek obsahuje jediný tvar s výchozím nastavením překlápění, jak je znázorněno níže.

Následující ukázka kódu získá aktuální vlastnosti překlápění tvaru a přeloží jej jak horizontálně, tak vertikálně.
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
// Získat horizontální vlastnost překlápění tvaru.
byte horizontalFlip = shape.getFrame().getFlipH();
System.out.println("Horizontal flip: " + horizontalFlip);
// Získat vertikální vlastnost překlápění tvaru.
byte verticalFlip = shape.getFrame().getFlipV();
System.out.println("Vertical flip: " + verticalFlip);
float x = shape.getFrame().getX();
float y = shape.getFrame().getY();
float width = shape.getFrame().getWidth();
float height = shape.getFrame().getHeight();
byte flipH = NullableBool.True; // Překlopit horizontálně.
byte flipV = NullableBool.True; // Překlopit horizontálně.
float rotation = shape.getFrame().getRotation();
shape.setFrame(new ShapeFrame(x, y, width, height, flipH, flipV, rotation));
presentation.save("output.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Výsledek:

FAQ
Mohu kombinovat tvary (union/intersect/subtract) na snímku jako v desktopovém editoru?
Neexistuje vestavěné API pro Boolovské operace. Můžete si je napodobit vytvořením požadovaného obrysu sami – např. vypočítat výslednou geometrii (pomocí GeometryPath) a vytvořit nový tvar s tímto konturem, volitelně odstranit původní tvary.
Jak mohu řídit pořadí vrstev (z‑order), aby tvar vždy zůstával „navrchu“?
Změňte pořadí vložení/přesunu v kolekci shapes snímku. Pro předvídatelné výsledky dokončete z‑order po všech ostatních úpravách snímku.
Mohu „uzamknout“ tvar, aby uživatelé v PowerPointu nemohli upravovat?
Ano. Nastavte ochranné příznaky na úrovni tvaru (např. zamknout výběr, přesun, změnu velikosti, úpravy textu). V případě potřeby aplikujte omezení i na master nebo rozvržení. Upozorňujeme, že se jedná o ochranu na úrovni UI, nikoli o bezpečnostní funkci; pro silnější ochranu kombinujte s omezeními na úrovni souboru, jako jsou doporučení pro pouze čtení nebo hesla.