Správa textových polí v prezentacích na Androidu
Úvod
Texty na snímcích jsou obvykle umístěny v textových polích nebo tvarech. Proto pro přidání textu do snímku musíte přidat textové pole a poté do něj vložit text. Aspose.Slides pro Android přes Java poskytuje rozhraní IAutoShape, které umožňuje přidat tvar obsahující text.
Info
Aspose.Slides také poskytuje rozhraní IShape, které umožňuje přidávat tvary na snímky. Nicméně ne všechny tvary přidané přes rozhraníIShape mohou obsahovat text. Tvary přidané přes rozhraní IAutoShape však mohou text obsahovat.
Note
Proto při práci s tvarem, ke kterému chcete přidat text, můžete chtít zkontrolovat a potvrdit, že byl převeden přes rozhraníIAutoShape. Pouze pak budete moci pracovat s TextFrame, což je vlastnost pod IAutoShape. Viz sekce Update Text na této stránce.
Vytvoření textového pole na snímku
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na první snímek nově vytvořené prezentace.
- Přidejte objekt IAutoShape s ShapeType nastaveným na
Rectanglena určenou pozici na snímku a získejte odkaz na nově přidaný objektIAutoShape. - Přidejte vlastnost
TextFramek objektuIAutoShape, která bude obsahovat text. V níže uvedeném příkladu jsme přidali tento text: Aspose TextBox - Nakonec zapište soubor PPTX pomocí objektu
Presentation.
Tento kód v jazyce Java — implementace výše uvedených kroků — ukazuje, jak přidat text na snímek:
// Vytvoří instanci Presentation
Presentation pres = new Presentation();
try {
// Získá první snímek v prezentaci
ISlide sld = pres.getSlides().get_Item(0);
// Přidá AutoShape s typem nastaveným na Rectangle
IAutoShape ashp = sld.getShapes().addAutoShape(ShapeType.Rectangle, 150, 75, 150, 50);
// Přidá TextFrame do Rectangle
ashp.addTextFrame(" ");
// Přistupuje k textovému rámci
ITextFrame txtFrame = ashp.getTextFrame();
// Vytvoří objekt Paragraph pro textový rámec
IParagraph para = txtFrame.getParagraphs().get_Item(0);
// Vytvoří objekt Portion pro odstavec
IPortion portion = para.getPortions().get_Item(0);
// Nastaví text
portion.setText("Aspose TextBox");
// Uloží prezentaci na disk
pres.save("TextBox_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Kontrola, zda jde o tvar textového pole
Aspose.Slides poskytuje metodu isTextBox z rozhraní IAutoShape , která vám umožní prozkoumat tvary a identifikovat textová pole.

Tento kód v jazyce Java ukazuje, jak zkontrolovat, zda byl tvar vytvořen jako textové pole:
Presentation presentation = new Presentation("sample.pptx");
try {
ForEach.shape(presentation, (shape, slide, index) -> {
if (shape instanceof IAutoShape) {
IAutoShape autoShape = (IAutoShape) shape;
System.out.println(autoShape.isTextBox() ? "shape is a text box" : "shape is not a text box");
}
});
} finally {
presentation.dispose();
}
Všimněte si, že pokud jen přidáte automatický tvar pomocí metody addAutoShape z rozhraní IShapeCollection, metoda isTextBox tohoto tvaru vrátí false. Po přidání textu do automatického tvaru pomocí metody addTextFrame nebo setText však vlastnost isTextBox vrátí true.
Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape1 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 100, 40);
// shape1.isTextBox() vrací false
shape1.addTextFrame("shape 1");
// shape1.isTextBox() vrací true
IAutoShape shape2 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 110, 100, 40);
// shape2.isTextBox() vrací false
shape2.getTextFrame().setText("shape 2");
// shape2.isTextBox() vrací true
IAutoShape shape3 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 210, 100, 40);
// shape3.isTextBox() vrací false
shape3.addTextFrame("");
// shape3.isTextBox() vrací false
IAutoShape shape4 = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 310, 100, 40);
// shape4.isTextBox() vrací false
shape4.getTextFrame().setText("");
// shape4.isTextBox() vrací false
Přidání sloupců do textového pole
Aspose.Slides poskytuje vlastnosti ColumnCount a ColumnSpacing (z rozhraní ITextFrameFormat a třídy TextFrameFormat), které vám umožňují přidávat sloupce do textových polí. Můžete určit počet sloupců v textovém poli a nastavit mezery v bodech mezi sloupci.
Tento kód v jazyce Java demonstruje popsanou operaci:
Presentation pres = new Presentation();
try {
// Získá první snímek v prezentaci
ISlide slide = pres.getSlides().get_Item(0);
// Přidá AutoShape s typem nastaveným na Rectangle
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Přidá TextFrame do Rectangle
aShape.addTextFrame("All these columns are limited to be within a single text container -- " +
"you can add or delete text and the new or remaining text automatically adjusts " +
"itself to flow within the container. You cannot have text flow from one container " +
"to other though -- we told you PowerPoint's column options for text are limited!");
// Získá formát TextFrame
ITextFrameFormat format = aShape.getTextFrame().getTextFrameFormat();
// Určuje počet sloupců v TextFrame
format.setColumnCount(3);
// Určuje mezery mezi sloupci
format.setColumnSpacing(10);
// Uloží prezentaci
pres.save("ColumnCount.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Přidání sloupců do textového rámce
Aspose.Slides pro Android přes Java poskytuje vlastnost ColumnCount (z rozhraní ITextFrameFormat), která umožňuje přidávat sloupce v textových rámcích. Pomocí této vlastnosti můžete určit požadovaný počet sloupců v textovém rámci.
Tento kód v jazyce Java ukazuje, jak přidat sloupec do textového rámce:
String outPptxFileName = "ColumnsTest.pptx";
Presentation pres = new Presentation();
try {
IAutoShape shape1 = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
TextFrameFormat format = (TextFrameFormat)shape1.getTextFrame().getTextFrameFormat();
format.setColumnCount(2);
shape1.getTextFrame().setText("All these columns are forced to stay within a single text container -- " +
"you can add or delete text - and the new or remaining text automatically adjusts " +
"itself to stay within the container. You cannot have text spill over from one container " +
"to other, though -- because PowerPoint's column options for text are limited!");
pres.save(outPptxFileName, SaveFormat.Pptx);
Presentation test = new Presentation(outPptxFileName);
try {
IAutoShape autoShape = ((AutoShape)test.getSlides().get_Item(0).getShapes().get_Item(0));
Assert.assertTrue(2 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
Assert.assertTrue(Double.NaN == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test != null) test.dispose();
}
format.setColumnSpacing(20);
pres.save(outPptxFileName, SaveFormat.Pptx);
Presentation test1 = new Presentation(outPptxFileName);
try {
IAutoShape autoShape = ((AutoShape)test1.getSlides().get_Item(0).getShapes().get_Item(0));
Assert.assertTrue(2 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
Assert.assertTrue(20 == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test1 != null) test1.dispose();
}
format.setColumnCount(3);
format.setColumnSpacing(15);
pres.save(outPptxFileName, SaveFormat.Pptx);
Presentation test2 = new Presentation(outPptxFileName);
try {
IAutoShape autoShape = ((AutoShape)test2.getSlides().get_Item(0).getShapes().get_Item(0));
Assert.assertTrue(3 == autoShape.getTextFrame().getTextFrameFormat().getColumnCount());
Assert.assertTrue(15 == autoShape.getTextFrame().getTextFrameFormat().getColumnSpacing());
} finally {
if (test2 != null) test2.dispose();
}
} finally {
if (pres != null) pres.dispose();
}
Aktualizace textu
Aspose.Slides vám umožňuje měnit nebo aktualizovat text obsažený v textovém poli nebo veškerý text v prezentaci.
Tento kód v jazyce Java demonstruje operaci, při které je veškerý text v prezentaci aktualizován nebo změněn:
Presentation pres = new Presentation("text.pptx");
try {
for (ISlide slide : pres.getSlides())
{
for (IShape shape : slide.getShapes())
{
if (shape instanceof IAutoShape) //Kontroluje, jestli tvar podporuje textový rámec (IAutoShape).
{
IAutoShape autoShape = (IAutoShape)shape;
for (IParagraph paragraph : autoShape.getTextFrame().getParagraphs()) //Prochází odstavce v textovém rámci
{
for (IPortion portion : paragraph.getPortions()) //Prochází každou část v odstavci
{
portion.setText(portion.getText().replace("years", "months")); //Mění text
portion.getPortionFormat().setFontBold(NullableBool.True); //Mění formátování
}
}
}
}
}
//Uloží upravenou prezentaci
pres.save("text-changed.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Přidání textového pole s hyperodkazem
Můžete vložit odkaz do textového pole. Když je textové pole kliknuto, uživatelé jsou přesměrováni na otevření odkazu.
K přidání textového pole obsahujícího odkaz postupujte následovně:
- Vytvořte instanci třídy
Presentation. - Získejte odkaz na první snímek nově vytvořené prezentace.
- Přidejte objekt
AutoShapesShapeTypenastaveným naRectanglena určenou pozici na snímku a získejte odkaz na nově přidaný objekt AutoShape. - Přidejte
TextFramek objektuAutoShape, který obsahuje Aspose TextBox jako výchozí text. - Vytvořte instanci třídy
IHyperlinkManager. - Přiřaďte objekt
IHyperlinkManagerk vlastnosti HyperlinkClick spojené s požadovanou částíTextFrame. - Nakonec zapište soubor PPTX pomocí objektu
Presentation.
Tento kód v jazyce Java — implementace výše uvedených kroků — ukazuje, jak přidat textové pole s hyperodkazem na snímek:
// Vytvoří instanci třídy Presentation, která představuje soubor PPTX
Presentation pres = new Presentation();
try {
// Získá první snímek v prezentaci
ISlide slide = pres.getSlides().get_Item(0);
// Přidá objekt AutoShape s typem nastaveným na Rectangle
IShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 150, 150, 50);
// Převede tvar na AutoShape
IAutoShape pptxAutoShape = (IAutoShape)shape;
// Přistoupí k vlastnosti ITextFrame spojené s AutoShape
pptxAutoShape.addTextFrame("");
ITextFrame textFrame = pptxAutoShape.getTextFrame();
// Přidá nějaký text do rámce
textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).setText("Aspose.Slides");
// Nastaví hyperodkaz pro text části
IHyperlinkManager hyperlinkManager = textFrame.getParagraphs().get_Item(0).getPortions().get_Item(0).
getPortionFormat().getHyperlinkManager();
hyperlinkManager.setExternalHyperlinkClick("http://www.aspose.com");
// Uloží PPTX prezentaci
pres.save("hLink_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Často kladené otázky
Jaký je rozdíl mezi textovým polem a textovým zástupcem při práci s hlavními snímky?
Zástupce (placeholder) dědí styl/pozici z masteru a lze jej přepsat na rozvrženích, zatímco běžné textové pole je nezávislý objekt na konkrétním snímku a nemění se při změně rozvržení.
Jak mohu provést hromadnou náhradu textu v celé prezentaci, aniž bych zasáhl text uvnitř grafů, tabulek a SmartArt?
Omezte iteraci na automatické tvary, které mají textové rámy, a vylučte vložené objekty (grafy, tabulky, SmartArt) tak, že projdete jejich kolekce odděleně nebo přeskočíte tyto typy objektů.