Správa textových polí v prezentacích pomocí Javy
Úvod
Texty na snímcích jsou běžně umístěny v textových polích nebo tvarech. Proto, abyste přidali text na snímek, musíte nejprve přidat textové pole a poté do něj vložit text. Aspose.Slides pro 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. 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.
Poznámka
Proto, když pracujete s tvarem, ke kterému chcete přidat text, měli byste ověřit a potvrdit, že byl převeden pomocí rozhraníIAutoShape. Teprve potom 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
Pro vytvoření textového pole na snímku postupujte následovně:
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na první snímek nově vytvořené prezentace.
- Přidejte objekt IAutoShape s typem ShapeType nastaveným na
Rectanglena požadovanou 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 Java kód—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 Obdélník
IAutoShape ashp = sld.getShapes().addAutoShape(ShapeType.Rectangle, 150, 75, 150, 50);
// Přidá TextFrame do Obdélníku
ashp.addTextFrame(" ");
// Přistoupí 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 se jedná o tvar textového pole
Aspose.Slides poskytuje metodu isTextBox z rozhraní IAutoShape, která umožňuje prozkoumat tvary a identifikovat textová pole.

Tento Java kód 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 automatického tvaru vrátí false. Po přidání textu do automatického tvaru pomocí metody addTextFrame nebo setText se pak vlastnost isTextBox nastaví na 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é umožňují přidávat sloupce do textových polí. Můžete určit počet sloupců v textovém poli a nastavit mezery mezi sloupci v bodech.
Tento Java kód 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 Obdélník
IAutoShape aShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 300);
// Přidá TextFrame do Obdélníku
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 textu 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 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 Java kód 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 umožňuje měnit nebo aktualizovat text obsažený v textovém poli nebo veškerý text v celé prezentaci.
Tento Java kód demonstruje operaci, při níž jsou aktualizovány nebo změněny všechny texty v prezentaci:
Presentation pres = new Presentation("text.pptx");
try {
for (ISlide slide : pres.getSlides())
{
for (IShape shape : slide.getShapes())
{
if (shape instanceof IAutoShape) // Kontroluje, zda 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
Do textového pole můžete vložit odkaz. Po kliknutí na textové pole se uživatelé dostanou na tento odkaz.
Pro 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
AutoShapes nastavenýmShapeTypenaRectanglena požadovanou pozici na snímku a získejte odkaz na nově přidaný objekt AutoShape. - Přidejte
TextFramek objektuAutoShape, který bude obsahovat Aspose TextBox jako výchozí text. - Vytvořte instanci třídy
IHyperlinkManager. - Přiřaďte objekt
IHyperlinkManagerk vlastnosti HyperlinkClick u požadované částiTextFrame. - Nakonec zapište soubor PPTX pomocí objektu
Presentation.
Tento Java kód—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 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 Obdélník
IShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 150, 150, 150, 50);
// Přetypuje tvar na AutoShape
IAutoShape pptxAutoShape = (IAutoShape)shape;
// Přistoupí k vlastnosti ITextFrame spojené s AutoShape
pptxAutoShape.addTextFrame("");
ITextFrame textFrame = pptxAutoShape.getTextFrame();
// Přidá 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 zástupným textovým polem při práci s hlavními snímky?
Placeholder dědí styl/pozici z masteru a lze jej přepsat na layoutu, zatímco běžné textové pole je samostatný objekt na konkrétním snímku a při změně layoutu se nemění.
Jak mohu provést hromadnou náhradu textu v celé prezentaci, aniž bych zasáhl do textu uvnitř grafů, tabulek a SmartArt?
Omezte iteraci na automatické tvary, které mají textové rámce, a vyloučte vložené objekty (grafy, tabulky, SmartArt) tím, že budete jejich kolekce procházet odděleně nebo přeskočíte tyto typy objektů.