Gestire i paragrafi di testo PowerPoint in Java
Panoramica
Aspose.Slides per Java rappresenta il testo come una gerarchia di fotogrammi di testo, paragrafi e porzioni:
- ITextFrame rappresenta il contenitore di testo in una forma e fornisce l’accesso alla sua raccolta di paragrafi.
- IParagraph rappresenta un singolo paragrafo in un fotogramma di testo e fornisce l’accesso alle sue porzioni e alla formattazione a livello di paragrafo.
- IPortion rappresenta un run di testo all’interno di un paragrafo. Ogni porzione può avere la propria formattazione di testo e di carattere.
Un paragrafo può quindi contenere testo con diversi font, colori, dimensioni e altre formattazioni utilizzando più porzioni.
Creare e Formattare i Paragrafi
Creare Paragrafi con più Porzioni
I seguenti passaggi creano un fotogramma di testo con tre paragrafi, ognuno contenente tre porzioni:
- Creare un’istanza della classe Presentation.
- Accedere alla diapositiva desiderata tramite il suo indice.
- Aggiungere una IAutoShape rettangolare alla diapositiva.
- Accedere al ITextFrame della forma.
- Utilizzare il paragrafo predefinito e aggiungere altri due oggetti IParagraph al fotogramma di testo.
- Aggiungere un numero sufficiente di oggetti IPortion affinché ogni paragrafo contenga tre porzioni. Il paragrafo predefinito contiene già una porzione vuota.
- Impostare il testo di ciascuna porzione.
- Applicare la formattazione a livello di carattere tramite IPortion.getPortionFormat.
- Salvare la presentazione modificata.
Questo esempio Java implementa i passaggi:
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 150, 300, 150);
ITextFrame textFrame = shape.getTextFrame();
IParagraph firstParagraph = textFrame.getParagraphs().get_Item(0);
firstParagraph.getPortions().add(new Portion());
firstParagraph.getPortions().add(new Portion());
IParagraph secondParagraph = new Paragraph();
secondParagraph.getPortions().add(new Portion());
secondParagraph.getPortions().add(new Portion());
secondParagraph.getPortions().add(new Portion());
textFrame.getParagraphs().add(secondParagraph);
IParagraph thirdParagraph = new Paragraph();
thirdParagraph.getPortions().add(new Portion());
thirdParagraph.getPortions().add(new Portion());
thirdParagraph.getPortions().add(new Portion());
textFrame.getParagraphs().add(thirdParagraph);
int paragraphCount = textFrame.getParagraphs().getCount();
for (int paragraphIndex = 0; paragraphIndex < paragraphCount; paragraphIndex++) {
IParagraph paragraph = textFrame.getParagraphs().get_Item(paragraphIndex);
int portionCount = paragraph.getPortions().getCount();
for (int portionIndex = 0; portionIndex < portionCount; portionIndex++) {
IPortion portion = paragraph.getPortions().get_Item(portionIndex);
portion.setText("Portion " + (paragraphIndex + 1) + "." + (portionIndex + 1));
if (portionIndex == 0) {
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.RED);
portion.getPortionFormat().setFontBold(NullableBool.True);
portion.getPortionFormat().setFontHeight(15);
} else if (portionIndex == 1) {
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);
portion.getPortionFormat().setFontItalic(NullableBool.True);
portion.getPortionFormat().setFontHeight(18);
}
}
}
presentation.save("paragraphs_with_portions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Creare Elenchi Puntati e Numerati
Creare un Elenco Puntato o Numerato
I punti elenco e la numerazione rendono gli elementi correlati più facili da scansionare. In Aspose.Slides, le impostazioni dell’elenco sono definite tramite IBulletFormat.
- Creare un’istanza della classe Presentation.
- Accedere alla diapositiva desiderata tramite il suo indice.
- Aggiungere una IAutoShape alla diapositiva selezionata.
- Accedere al ITextFrame della forma.
- Rimuovere il paragrafo predefinito dal fotogramma di testo.
- Creare un Paragraph per un punto simbolico.
- Impostare IBulletFormat.setType su BulletType.Symbol e specificare il carattere del punto.
- Impostare il testo del paragrafo, l’indentazione, il colore del punto e l’altezza del punto.
- Aggiungere il paragrafo al fotogramma di testo.
- Creare un secondo paragrafo e impostare IBulletFormat.setType su BulletType.Numbered.
- Configurare lo stile del punto numerato e aggiungere il paragrafo al fotogramma di testo.
- Salvare la presentazione.
Questo esempio Java crea un punto simbolico e un punto numerato:
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
ITextFrame textFrame = shape.getTextFrame();
textFrame.getParagraphs().clear();
Paragraph symbolParagraph = new Paragraph();
symbolParagraph.setText("Welcome to Aspose.Slides");
symbolParagraph.getParagraphFormat().getBullet().setType(BulletType.Symbol);
symbolParagraph.getParagraphFormat().getBullet().setChar((char) 0x2022);
symbolParagraph.getParagraphFormat().setIndent(25);
symbolParagraph.getParagraphFormat().getBullet().getColor().setColorType(ColorType.RGB);
symbolParagraph.getParagraphFormat().getBullet().getColor().setColor(Color.BLACK);
symbolParagraph.getParagraphFormat().getBullet().setBulletHardColor(NullableBool.True);
symbolParagraph.getParagraphFormat().getBullet().setHeight(100);
textFrame.getParagraphs().add(symbolParagraph);
Paragraph numberedParagraph = new Paragraph();
numberedParagraph.setText("This is a numbered item");
numberedParagraph.getParagraphFormat().getBullet().setType(BulletType.Numbered);
numberedParagraph.getParagraphFormat().getBullet().setNumberedBulletStyle(NumberedBulletStyle.BulletCircleNumWDBlackPlain);
numberedParagraph.getParagraphFormat().setIndent(25);
numberedParagraph.getParagraphFormat().getBullet().getColor().setColorType(ColorType.RGB);
numberedParagraph.getParagraphFormat().getBullet().getColor().setColor(Color.BLACK);
numberedParagraph.getParagraphFormat().getBullet().setBulletHardColor(NullableBool.True);
numberedParagraph.getParagraphFormat().getBullet().setHeight(100);
textFrame.getParagraphs().add(numberedParagraph);
presentation.save("bulleted_and_numbered_list.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Utilizzare Punti Immagine
I punti immagine consentono di usare un’immagine personalizzata al posto di un simbolo o di un numero.
- Creare un’istanza della classe Presentation.
- Accedere alla diapositiva desiderata tramite il suo indice.
- Aggiungere una IAutoShape e accedere al suo ITextFrame.
- Rimuovere il paragrafo predefinito dal fotogramma di testo.
- Caricare l’immagine del punto e aggiungerla alla collezione di immagini della presentazione come IPPImage.
- Creare un Paragraph e impostarne il testo.
- Impostare IBulletFormat.setType su BulletType.Picture.
- Assegnare l’immagine tramite IBulletFormat.getPicture e impostare l’altezza del punto.
- Aggiungere il paragrafo al fotogramma di testo.
- Salvare la presentazione modificata.
Questo esempio Java crea un punto immagine:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IImage bulletImage = Images.fromFile("bullets.png");
IPPImage presentationImage;
try {
presentationImage = presentation.getImages().addImage(bulletImage);
} finally {
bulletImage.dispose();
}
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
ITextFrame textFrame = shape.getTextFrame();
textFrame.getParagraphs().clear();
Paragraph paragraph = new Paragraph();
paragraph.setText("Welcome to Aspose.Slides");
paragraph.getParagraphFormat().getBullet().setType(BulletType.Picture);
paragraph.getParagraphFormat().getBullet().getPicture().setImage(presentationImage);
paragraph.getParagraphFormat().getBullet().setHeight(100);
textFrame.getParagraphs().add(paragraph);
presentation.save("picture_bullet.pptx", SaveFormat.Pptx);
presentation.save("picture_bullet.ppt", SaveFormat.Ppt);
} finally {
presentation.dispose();
}
Creare un Elenco Multilivello
Impostare IParagraphFormat.setDepth per posizionare i paragrafi a livelli diversi di un elenco. Il livello superiore ha una profondità di 0.
- Creare una Presentation e accedere a una diapositiva.
- Aggiungere una IAutoShape e cancellare il paragrafo predefinito dal suo fotogramma di testo.
- Creare quattro paragrafi e configurare i loro simboli di punto.
- Impostare i valori di IParagraphFormat.setDepth su
0,1,2e3. - Aggiungere i paragrafi al fotogramma di testo e salvare la presentazione.
Questo esempio Java crea un elenco puntato a quattro livelli:
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
ITextFrame textFrame = shape.getTextFrame();
textFrame.getParagraphs().clear();
IParagraph firstParagraph = new Paragraph();
firstParagraph.setText("Content");
firstParagraph.getParagraphFormat().getBullet().setType(BulletType.Symbol);
firstParagraph.getParagraphFormat().getBullet().setChar((char) 0x2022);
firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
firstParagraph.getParagraphFormat().setDepth((short) 0);
IParagraph secondParagraph = new Paragraph();
secondParagraph.setText("Second level");
secondParagraph.getParagraphFormat().getBullet().setType(BulletType.Symbol);
secondParagraph.getParagraphFormat().getBullet().setChar('-');
secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
secondParagraph.getParagraphFormat().setDepth((short) 1);
IParagraph thirdParagraph = new Paragraph();
thirdParagraph.setText("Third level");
thirdParagraph.getParagraphFormat().getBullet().setType(BulletType.Symbol);
thirdParagraph.getParagraphFormat().getBullet().setChar((char) 0x2022);
thirdParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
thirdParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
thirdParagraph.getParagraphFormat().setDepth((short) 2);
IParagraph fourthParagraph = new Paragraph();
fourthParagraph.setText("Fourth level");
fourthParagraph.getParagraphFormat().getBullet().setType(BulletType.Symbol);
fourthParagraph.getParagraphFormat().getBullet().setChar('-');
fourthParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
fourthParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
fourthParagraph.getParagraphFormat().setDepth((short) 3);
textFrame.getParagraphs().add(firstParagraph);
textFrame.getParagraphs().add(secondParagraph);
textFrame.getParagraphs().add(thirdParagraph);
textFrame.getParagraphs().add(fourthParagraph);
presentation.save("multilevel_list.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Iniziare gli Elementi Numerati con Valori Personalizzati
Usare IBulletFormat.setNumberedBulletStartWith per impostare il numero iniziale visualizzato per un paragrafo numerato.
- Creare una Presentation e aggiungere una IAutoShape a una diapositiva.
- Cancellare il paragrafo predefinito dal fotogramma di testo della forma.
- Creare tre paragrafi numerati.
- Impostare IBulletFormat.setNumberedBulletStartWith su
2,3e7per i rispettivi paragrafi. - Aggiungere i paragrafi al fotogramma di testo e salvare la presentazione.
Questo esempio Java assegna un numero di partenza personalizzato a ciascun paragrafo:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 200, 200, 400, 200);
ITextFrame textFrame = shape.getTextFrame();
textFrame.getParagraphs().clear();
Paragraph firstParagraph = new Paragraph();
firstParagraph.setText("Start at 2");
firstParagraph.getParagraphFormat().getBullet().setType(BulletType.Numbered);
firstParagraph.getParagraphFormat().getBullet().setNumberedBulletStartWith((short) 2);
textFrame.getParagraphs().add(firstParagraph);
Paragraph secondParagraph = new Paragraph();
secondParagraph.setText("Start at 3");
secondParagraph.getParagraphFormat().getBullet().setType(BulletType.Numbered);
secondParagraph.getParagraphFormat().getBullet().setNumberedBulletStartWith((short) 3);
textFrame.getParagraphs().add(secondParagraph);
Paragraph thirdParagraph = new Paragraph();
thirdParagraph.setText("Start at 7");
thirdParagraph.getParagraphFormat().getBullet().setType(BulletType.Numbered);
thirdParagraph.getParagraphFormat().getBullet().setNumberedBulletStartWith((short) 7);
textFrame.getParagraphs().add(thirdParagraph);
presentation.save("custom_numbered_list.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Controllare il Layout del Paragrafo e le Proprietà di Fine
Impostare un’Indentazione della Prima Riga
Usare IParagraphFormat.setIndent per controllare l’indentazione della prima riga di un paragrafo. Questo metodo sposta solo la prima riga rispetto al margine sinistro del paragrafo. Un valore positivo sposta la prima riga a destra, mentre le righe successive rimangono allineate al corpo del paragrafo.
Usare IParagraphFormat.setMarginLeft quando è necessario spostare l’intero paragrafo. Usare IParagraphFormat.setIndent quando è necessario spostare solo la prima riga.
L’esempio seguente crea diversi paragrafi e applica valori diversi di IParagraphFormat.setIndent per dimostrare come l’indentazione della prima riga influisce sul layout del paragrafo.
- Creare un’istanza della classe Presentation.
- Accedere alla diapositiva di destinazione.
- Aggiungere una IAutoShape rettangolare alla diapositiva.
- Accedere al ITextFrame della forma e rimuovere il paragrafo predefinito.
- Creare diversi paragrafi e impostare valori diversi di IParagraphFormat.setIndent per ciascuno.
- Aggiungere i paragrafi al fotogramma di testo.
- Salvare la presentazione modificata.
Questo codice mostra come impostare un’indentazione del paragrafo:
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 420, 220);
shape.getFillFormat().setFillType(FillType.NoFill);
shape.getLineFormat().getFillFormat().setFillType(FillType.Solid);
shape.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.GRAY);
ITextFrame textFrame = shape.getTextFrame();
textFrame.getTextFrameFormat().setAutofitType(TextAutofitType.Shape);
textFrame.getParagraphs().clear();
Paragraph firstParagraph = new Paragraph();
firstParagraph.setText("No first-line indent. Wrapped lines start at the same position as the first line.");
firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
firstParagraph.getParagraphFormat().setMarginLeft(20f);
firstParagraph.getParagraphFormat().setIndent(0f);
Paragraph secondParagraph = new Paragraph();
secondParagraph.setText("First-line indent of 20 points. The first line moves to the right, while wrapped lines remain aligned to the paragraph body.");
secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
secondParagraph.getParagraphFormat().setMarginLeft(20f);
secondParagraph.getParagraphFormat().setIndent(20f);
Paragraph thirdParagraph = new Paragraph();
thirdParagraph.setText("First-line indent of 40 points. This paragraph shows a larger first-line offset to make the effect easier to see.");
thirdParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
thirdParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
thirdParagraph.getParagraphFormat().setMarginLeft(20f);
thirdParagraph.getParagraphFormat().setIndent(40f);
textFrame.getParagraphs().add(firstParagraph);
textFrame.getParagraphs().add(secondParagraph);
textFrame.getParagraphs().add(thirdParagraph);
presentation.save("paragraph_indent.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Il risultato:

Impostare un’Indentazione Sospesa
Un’indentazione sospesa è un layout di paragrafo in cui la prima riga inizia a sinistra delle righe successive. In Aspose.Slides, si crea questo effetto con IParagraphFormat.setIndent. Passare un valore negativo per spostare la prima riga a sinistra rispetto al corpo del paragrafo.
In pratica, IParagraphFormat.setMarginLeft definisce la posizione sinistra del corpo del paragrafo, e IParagraphFormat.setIndent definisce la posizione della prima riga rispetto a quel margine. Per creare un’indentazione sospesa, impostare un valore positivo su setMarginLeft e un valore negativo su setIndent.
Questa formattazione è utile per bibliografie, riferimenti, voci di glossario e altri paragrafi in cui le linee a capo devono allinearsi sotto il corpo del paragrafo anziché sotto il primo carattere della prima riga.
- Creare un’istanza della classe Presentation.
- Accedere alla diapositiva di destinazione.
- Aggiungere una IAutoShape rettangolare alla diapositiva.
- Accedere al ITextFrame della forma e rimuovere il paragrafo predefinito.
- Creare paragrafi e passare un valore positivo a IParagraphFormat.setMarginLeft per ciascun paragrafo.
- Passare un valore negativo a IParagraphFormat.setIndent per creare l’effetto di indentazione sospesa.
- Aggiungere i paragrafi al fotogramma di testo.
- Salvare la presentazione modificata.
Questo codice mostra come impostare un’indentazione sospesa per un paragrafo:
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 420, 220);
shape.getFillFormat().setFillType(FillType.NoFill);
shape.getLineFormat().getFillFormat().setFillType(FillType.Solid);
shape.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.GRAY);
ITextFrame textFrame = shape.getTextFrame();
textFrame.getTextFrameFormat().setAutofitType(TextAutofitType.Shape);
textFrame.getParagraphs().clear();
Paragraph firstParagraph = new Paragraph();
firstParagraph.setText("A hanging indent is created by combining a positive left margin with a negative indent. The first line starts to the left, while wrapped lines align with the paragraph body.");
firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
firstParagraph.getParagraphFormat().setMarginLeft(40f);
firstParagraph.getParagraphFormat().setIndent(-20f);
Paragraph secondParagraph = new Paragraph();
secondParagraph.setText("This second example uses a deeper hanging indent so the difference between the first line and the wrapped lines is easier to compare.");
secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(FillType.Solid);
secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
secondParagraph.getParagraphFormat().setMarginLeft(60f);
secondParagraph.getParagraphFormat().setIndent(-30f);
textFrame.getParagraphs().add(firstParagraph);
textFrame.getParagraphs().add(secondParagraph);
presentation.save("hanging_indent.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Il risultato:

Impostare le Proprietà di Fine del Paragrafo
IParagraph.setEndParagraphPortionFormat controlla la formattazione del segno di fine paragrafo. L’esempio seguente assegna una dimensione del carattere e un font latino al segno di fine del secondo paragrafo:
- Caricare una Presentation e accedere a una diapositiva.
- Aggiungere una IAutoShape e cancellare il suo paragrafo predefinito.
- Creare due paragrafi e aggiungere porzioni di testo a entrambi.
- Creare un PortionFormat per il segno di fine del secondo paragrafo.
- Impostare IBasePortionFormat.setFontHeight e IBasePortionFormat.setLatinFont.
- Assegnare il formato con IParagraph.setEndParagraphPortionFormat e salvare la presentazione.
import com.aspose.slides.*;
Presentation presentation = new Presentation("Test.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, 200, 250);
ITextFrame textFrame = shape.getTextFrame();
textFrame.getParagraphs().clear();
Paragraph firstParagraph = new Paragraph();
firstParagraph.getPortions().add(new Portion("Sample text"));
Paragraph secondParagraph = new Paragraph();
secondParagraph.getPortions().add(new Portion("Sample text 2"));
PortionFormat endParagraphFormat = new PortionFormat();
endParagraphFormat.setFontHeight(48);
endParagraphFormat.setLatinFont(new FontData("Times New Roman"));
secondParagraph.setEndParagraphPortionFormat(endParagraphFormat);
textFrame.getParagraphs().add(firstParagraph);
textFrame.getParagraphs().add(secondParagraph);
presentation.save("end_paragraph_format.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Conteggiare le Linee Renderizzate
Per le regole dei paragrafi che influenzano l’andamento automatico delle linee e la punteggiatura alla fine delle linee, vedere Control Line Breaking e Control Hanging Punctuation.
Usare IParagraph.getLinesCount per contare le linee occupate da un paragrafo dopo il layout del testo, includendo l’andamento automatico. Questo è utile quando si verifica la lunghezza del testo e il layout nei modelli di presentazione.
Un paragrafo è un elemento in ITextFrame.getParagraphs, e può occupare diverse linee renderizzate. Un’interruzione di linea esplicita all’interno di un paragrafo forza una nuova linea senza creare un nuovo paragrafo. L’andamento automatico crea linee in base alla larghezza disponibile senza inserire interruzioni di linea esplicite nel testo. Pertanto, contare i paragrafi o i caratteri di interruzione di linea non fornisce il conteggio delle linee renderizzate.
L’esempio seguente crea una forma di testo, conta le sue linee, restringe la forma e poi sostituisce il testo con una stringa più breve. L’andamento è abilitato e l’adattamento automatico è disabilitato in modo che la larghezza della forma controlli l’andamento senza ridurre automaticamente il testo o ridimensionare la forma. Le dimensioni della forma sono in punti. Infine, l’esempio aggiunge un altro paragrafo e somma i conteggi delle linee all’interno del fotogramma di testo.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 50, 50, 400, 200);
ITextFrame textFrame = shape.getTextFrame();
textFrame.getTextFrameFormat().setWrapText(NullableBool.True);
textFrame.getTextFrameFormat().setAutofitType(TextAutofitType.None);
IParagraph paragraph = textFrame.getParagraphs().get_Item(0);
paragraph.getParagraphFormat().getDefaultPortionFormat().setFontHeight(20);
paragraph.setText("This text demonstrates how automatic wrapping changes the number of rendered lines.");
System.out.println("Original width: " + paragraph.getLinesCount());
shape.setWidth(150);
System.out.println("Narrower shape: " + paragraph.getLinesCount());
paragraph.setText("Short text.");
System.out.println("Shorter text: " + paragraph.getLinesCount());
Paragraph secondParagraph = new Paragraph();
secondParagraph.setText("Another paragraph.");
secondParagraph.getParagraphFormat().getDefaultPortionFormat().setFontHeight(20);
textFrame.getParagraphs().add(secondParagraph);
int totalLineCount = 0;
for (IParagraph currentParagraph : textFrame.getParagraphs()) {
totalLineCount += currentParagraph.getLinesCount();
}
System.out.println("Total lines in the text frame: " + totalLineCount);
} finally {
presentation.dispose();
}
Con questo testo e queste dimensioni, restringere la forma aumenta il conteggio delle linee, mentre sostituire il testo con la stringa corta lo riduce. I conteggi esatti possono variare in base alla disponibilità dei font e alle sostituzioni, alla dimensione del carattere, ai margini, all’indentazione, all’andamento e alle impostazioni di adattamento automatico. Utilizzare i font e le impostazioni di layout previste per l’ambiente di destinazione quando si verifica un modello.
Il solo conteggio delle linee non determina se il testo supera il contenitore. Altezze disponibili, altezze delle linee, spaziature di paragrafo e di linea e il comportamento di adattamento automatico influenzano inoltre; anche una singola linea può superare la larghezza disponibile quando l’andamento è disabilitato.
Importare ed Esportare il Contenuto dei Paragrafi
Importare Testo HTML nei Paragrafi
Usare ParagraphCollection.addFromHtml per convertire markup HTML in paragrafi e porzioni in un fotogramma di testo.
- Creare un’istanza della classe Presentation.
- Accedere a una diapositiva e aggiungere una IAutoShape.
- Accedere al ITextFrame della forma e cancellarne il paragrafo predefinito.
- Leggere il file HTML di origine.
- Passare la stringa HTML a ParagraphCollection.addFromHtml.
- Salvare la presentazione modificata.
Questo esempio Java importa HTML in un fotogramma di testo:
import com.aspose.slides.*;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
float shapeWidth = (float) presentation.getSlideSize().getSize().getWidth() - 20;
float shapeHeight = (float) presentation.getSlideSize().getSize().getHeight() - 20;
IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 10, 10, shapeWidth, shapeHeight);
shape.getFillFormat().setFillType(FillType.NoFill);
shape.getTextFrame().getParagraphs().clear();
try {
byte[] htmlBytes = Files.readAllBytes(Paths.get("file.html"));
String html = new String(htmlBytes, StandardCharsets.UTF_8);
shape.getTextFrame().getParagraphs().addFromHtml(html);
presentation.save("html_text.pptx", SaveFormat.Pptx);
} catch (IOException exception) {
System.out.println("The HTML file could not be read: " + exception.getMessage());
}
} finally {
presentation.dispose();
}
Esportare il Testo del Paragrafo in HTML
Usare ParagraphCollection.exportToHtml per esportare un intervallo selezionato di paragrafi come HTML.
- Creare un’istanza della classe Presentation e caricare la presentazione desiderata.
- Accedere alla diapositiva e trovare la IAutoShape che contiene il testo.
- Accedere al ITextFrame della forma.
- Chiamare ParagraphCollection.exportToHtml con l’indice del paragrafo iniziale e il numero di paragrafi da esportare.
- Scrivere la stringa HTML restituita in un file.
Questo esempio Java esporta tutti i paragrafi dalla prima forma di testo:
import com.aspose.slides.*;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
Presentation presentation = new Presentation("ExportingHTMLText.pptx");
try {
IShape shape = presentation.getSlides().get_Item(0).getShapes().get_Item(0);
if (shape instanceof IAutoShape) {
IAutoShape textShape = (IAutoShape) shape;
ITextFrame textFrame = textShape.getTextFrame();
if (textFrame != null) {
IParagraphCollection paragraphs = textFrame.getParagraphs();
String html = paragraphs.exportToHtml(0, paragraphs.getCount(), null);
try {
Files.write(Paths.get("paragraphs.html"), html.getBytes(StandardCharsets.UTF_8));
} catch (IOException exception) {
System.out.println("The HTML file could not be written: " + exception.getMessage());
}
} else {
System.out.println("The first shape does not contain a text frame.");
}
} else {
System.out.println("The first shape is not a text shape.");
}
} finally {
presentation.dispose();
}
Renderizzare un Paragrafo come Immagine
IParagraph.getImage renderizza direttamente un singolo paragrafo e restituisce un IImage. Salvare il risultato su file o stream con IImage.save. Non è necessario renderizzare la forma contenente o ritagliare manualmente un bitmap.
IParagraph.getImage può restituire null se il paragrafo non viene trovato nella collezione genitore, non ha limiti di rendering validi o non può essere renderizzato. Verificare il risultato prima di salvarlo e rilasciare l’immagine restituita dopo l’uso.
Renderizzare un Paragrafo alla Scala Predefinita
Supponiamo di avere un file di presentazione chiamato sample.pptx con una diapositiva, dove la prima forma è una casella di testo contenente tre paragrafi.

L’esempio seguente renderizza il secondo paragrafo in una forma di testo regolare alla scala predefinita e salva l’immagine restituita in formato PNG. Il blocco finally garantisce che l’immagine venga rilasciata correttamente.
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
IShape shape = presentation.getSlides().get_Item(0).getShapes().get_Item(0);
if (shape instanceof IAutoShape) {
IAutoShape textShape = (IAutoShape) shape;
ITextFrame textFrame = textShape.getTextFrame();
if (textFrame != null && textFrame.getParagraphs().getCount() > 1) {
IParagraph paragraph = textFrame.getParagraphs().get_Item(1);
IImage paragraphImage = paragraph.getImage();
if (paragraphImage != null) {
try {
paragraphImage.save("paragraph.png", ImageFormat.Png);
} finally {
paragraphImage.dispose();
}
} else {
System.out.println("The paragraph could not be rendered.");
}
} else {
System.out.println("The expected paragraph was not found.");
}
} else {
System.out.println("The first shape is not a text shape.");
}
} finally {
presentation.dispose();
}
Il risultato:

Renderizzare un Paragrafo in Una Cella di Tabella con Scaling
Usare la sovraccarico di IParagraph.getImage che accetta i parametri float scaleX e float scaleY per impostare i fattori di scala orizzontale e verticale. L’esempio seguente crea una tabella, renderizza il paragrafo nella sua prima cella al doppio della larghezza e altezza predefinite, e salva il risultato come immagine PNG.
import com.aspose.slides.*;
float scaleX = 2f;
float scaleY = 2f;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
ITable table = slide.getShapes().addTable(50, 50, new double[] { 300 }, new double[] { 80 });
IParagraph paragraph = table.get_Item(0, 0).getTextFrame().getParagraphs().get_Item(0);
paragraph.setText("Text in a table cell");
IImage paragraphImage = paragraph.getImage(scaleX, scaleY);
if (paragraphImage != null) {
try {
paragraphImage.save("table_paragraph.png", ImageFormat.Png);
} finally {
paragraphImage.dispose();
}
} else {
System.out.println("The paragraph could not be rendered.");
}
} finally {
presentation.dispose();
}
Un fattore di scala di 1 mantiene quell’asse alla dimensione di pixel predefinita. Per esempio, 2 per entrambi i fattori produce un’immagine la cui larghezza e altezza sono circa il doppio delle dimensioni predefinite, risultando in quattro volte più pixel. Fattori più grandi generalmente producono testo più nitido per lo zoom o per uscite ad alta risoluzione, ma aumentano anche l’uso di memoria e la dimensione del file. Fattori inferiori a 1 producono immagini più piccole con meno dettaglio. Usare fattori uguali per preservare il rapporto d’aspetto del paragrafo; fattori diversi per gli assi orizzontale e verticale allungano l’output indipendentemente.
Renderizzare un’intera forma con IShape.getImage rimane utile quando l’output deve includere il riempimento, il bordo o altro contesto visivo della forma. Per un’immagine contenente solo il paragrafo, utilizzare IParagraph.getImage.
FAQ
Posso disabilitare completamente l’andamento delle righe all’interno di un fotogramma di testo?
Sì. Impostare ITextFrameFormat.setWrapText per disabilitare l’andamento in modo che le righe non vengano interrotte ai bordi del fotogramma di testo.
Come posso ottenere i limiti esatti sulla diapositiva di un paragrafo specifico?
Usare IParagraph.getRect per recuperare il rettangolo di delimitazione del paragrafo. IPortion.getRect fornisce i limiti di una singola porzione.
Dove è controllato l’allineamento dei paragrafi (sinistra, destra, centro o giustificato)?
IParagraphFormat.setAlignment è un’impostazione a livello di paragrafo e si applica all’intero paragrafo indipendentemente dalla formattazione delle singole porzioni.
Per allineare verticalmente le porzioni di diverse dimensioni di carattere all’interno di ogni riga, vedere Align Fonts Within a Line.
Posso impostare la lingua di correzione per una parte di un paragrafo?
Sì. Impostare IBasePortionFormat.setLanguageId per le singole porzioni, così un paragrafo può contenere testo in più lingue.