Gestisci i paragrafi di testo PowerPoint in Python

Panoramica

Aspose.Slides for Python via .NET rappresenta il testo come una gerarchia di riquadri di testo, paragrafi e porzioni:

  • TextFrame rappresenta il contenitore di testo in una forma e fornisce l’accesso alla sua collezione di paragrafi.
  • Paragraph rappresenta un paragrafo in un riquadro di testo e fornisce l’accesso alle sue porzioni e alla formattazione a livello di paragrafo.
  • Portion rappresenta un intervallo di testo all’interno di un paragrafo. Ogni porzione può avere il proprio testo e formattazione a livello di carattere.

Un paragrafo può quindi contenere testo con caratteri, colori, dimensioni e altre formattazioni diverse utilizzando più porzioni.

Crea e formatta i paragrafi

Crea paragrafi con più porzioni

I passaggi seguenti creano un riquadro di testo con tre paragrafi, ognuno contenente tre porzioni:

  1. Crea un’istanza della classe Presentation.
  2. Accedi alla diapositiva pertinente tramite il suo indice.
  3. Aggiungi una AutoShape rettangolare alla diapositiva.
  4. Accedi al TextFrame della forma.
  5. Usa il paragrafo predefinito e aggiungi altri due oggetti Paragraph al riquadro di testo.
  6. Aggiungi un numero sufficiente di oggetti Portion affinché ogni paragrafo contenga tre porzioni. Il paragrafo predefinito contiene già una porzione vuota.
  7. Imposta il testo di ogni porzione.
  8. Applica la formattazione a livello di carattere tramite Portion.portion_format.
  9. Salva la presentazione modificata.

Questo esempio Python implementa i passaggi:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 150, 300, 150)
    text_frame = shape.text_frame

    first_paragraph = text_frame.paragraphs[0]
    first_paragraph.portions.add(slides.Portion())
    first_paragraph.portions.add(slides.Portion())

    second_paragraph = slides.Paragraph()
    second_paragraph.portions.add(slides.Portion())
    second_paragraph.portions.add(slides.Portion())
    second_paragraph.portions.add(slides.Portion())
    text_frame.paragraphs.add(second_paragraph)

    third_paragraph = slides.Paragraph()
    third_paragraph.portions.add(slides.Portion())
    third_paragraph.portions.add(slides.Portion())
    third_paragraph.portions.add(slides.Portion())
    text_frame.paragraphs.add(third_paragraph)

    for paragraph_index in range(text_frame.paragraphs.count):
        paragraph = text_frame.paragraphs[paragraph_index]
        for portion_index in range(paragraph.portions.count):
            portion = paragraph.portions[portion_index]
            portion.text = f"Portion {paragraph_index + 1}.{portion_index + 1}"

            if portion_index == 0:
                portion.portion_format.fill_format.fill_type = slides.FillType.SOLID
                portion.portion_format.fill_format.solid_fill_color.color = draw.Color.red
                portion.portion_format.font_bold = slides.NullableBool.TRUE
                portion.portion_format.font_height = 15
            elif portion_index == 1:
                portion.portion_format.fill_format.fill_type = slides.FillType.SOLID
                portion.portion_format.fill_format.solid_fill_color.color = draw.Color.blue
                portion.portion_format.font_italic = slides.NullableBool.TRUE
                portion.portion_format.font_height = 18

    presentation.save("paragraphs_with_portions.pptx", slides.export.SaveFormat.PPTX)

Crea elenchi puntati e numerati

Crea un elenco puntato o numerato

I punti elenco e la numerazione rendono più facile la scansione degli elementi correlati. In Aspose.Slides, le impostazioni dell’elenco sono definite tramite BulletFormat.

  1. Crea un’istanza della classe Presentation.
  2. Accedi alla diapositiva pertinente tramite il suo indice.
  3. Aggiungi una AutoShape alla diapositiva selezionata.
  4. Accedi al TextFrame della forma.
  5. Rimuovi il paragrafo predefinito dal riquadro di testo.
  6. Crea un Paragraph per un punto simbolo.
  7. Imposta BulletFormat.type su BulletType.SYMBOL e specifica il carattere del punto.
  8. Imposta il testo del paragrafo, l’indentazione, il colore del punto e l’altezza del punto.
  9. Aggiungi il paragrafo al riquadro di testo.
  10. Crea un secondo paragrafo e imposta BulletFormat.type su BulletType.NUMBERED.
  11. Configura lo stile del punto numerato e aggiungi il paragrafo al riquadro di testo.
  12. Salva la presentazione.

Questo esempio Python crea un punto simbolo e un punto numerato:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 200, 200, 400, 200)
    text_frame = shape.text_frame
    text_frame.paragraphs.clear()

    symbol_paragraph = slides.Paragraph()
    symbol_paragraph.text = "Welcome to Aspose.Slides"
    symbol_paragraph.paragraph_format.bullet.type = slides.BulletType.SYMBOL
    symbol_paragraph.paragraph_format.bullet.char = chr(0x2022)
    symbol_paragraph.paragraph_format.indent = 25
    symbol_paragraph.paragraph_format.bullet.color.color_type = slides.ColorType.RGB
    symbol_paragraph.paragraph_format.bullet.color.color = draw.Color.black
    symbol_paragraph.paragraph_format.bullet.is_bullet_hard_color = slides.NullableBool.TRUE
    symbol_paragraph.paragraph_format.bullet.height = 100
    text_frame.paragraphs.add(symbol_paragraph)

    numbered_paragraph = slides.Paragraph()
    numbered_paragraph.text = "This is a numbered item"
    numbered_paragraph.paragraph_format.bullet.type = slides.BulletType.NUMBERED
    numbered_paragraph.paragraph_format.bullet.numbered_bullet_style = slides.NumberedBulletStyle.BULLET_CIRCLE_NUM_WD_BLACK_PLAIN
    numbered_paragraph.paragraph_format.indent = 25
    numbered_paragraph.paragraph_format.bullet.color.color_type = slides.ColorType.RGB
    numbered_paragraph.paragraph_format.bullet.color.color = draw.Color.black
    numbered_paragraph.paragraph_format.bullet.is_bullet_hard_color = slides.NullableBool.TRUE
    numbered_paragraph.paragraph_format.bullet.height = 100
    text_frame.paragraphs.add(numbered_paragraph)

    presentation.save("bulleted_and_numbered_list.pptx", slides.export.SaveFormat.PPTX)

Usa punti immagine

I punti immagine consentono di utilizzare un’immagine personalizzata al posto di un simbolo o di un numero.

  1. Crea un’istanza della classe Presentation.
  2. Accedi alla diapositiva pertinente tramite il suo indice.
  3. Aggiungi una AutoShape e accedi al suo TextFrame.
  4. Rimuovi il paragrafo predefinito dal riquadro di testo.
  5. Carica l’immagine del punto e aggiungila alla collezione di immagini della presentazione come PPImage.
  6. Crea un Paragraph e imposta il suo testo.
  7. Imposta BulletFormat.type su BulletType.PICTURE.
  8. Assegna l’immagine tramite BulletFormat.picture e imposta l’altezza del punto.
  9. Aggiungi il paragrafo al riquadro di testo.
  10. Salva la presentazione modificata.

Questo esempio Python crea un punto immagine:

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    with slides.Images.from_file("bullets.png") as bullet_image:
        presentation_image = presentation.images.add_image(bullet_image)

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 200, 200, 400, 200)
    text_frame = shape.text_frame
    text_frame.paragraphs.clear()

    paragraph = slides.Paragraph()
    paragraph.text = "Welcome to Aspose.Slides"
    paragraph.paragraph_format.bullet.type = slides.BulletType.PICTURE
    paragraph.paragraph_format.bullet.picture.image = presentation_image
    paragraph.paragraph_format.bullet.height = 100
    text_frame.paragraphs.add(paragraph)

    presentation.save("picture_bullet.pptx", slides.export.SaveFormat.PPTX)
    presentation.save("picture_bullet.ppt", slides.export.SaveFormat.PPT)

Crea un elenco a più livelli

Imposta ParagraphFormat.depth per posizionare i paragrafi a livelli diversi di un elenco. Il livello superiore ha una profondità di 0.

  1. Crea una Presentation e accedi a una diapositiva.
  2. Aggiungi una AutoShape e cancella il paragrafo predefinito dal suo riquadro di testo.
  3. Crea quattro paragrafi e configura i loro simboli puntati.
  4. Imposta i valori di ParagraphFormat.depth a 0, 1, 2 e 3.
  5. Aggiungi i paragrafi al riquadro di testo e salva la presentazione.

Questo esempio Python crea un elenco puntato a quattro livelli:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 200, 200, 400, 200)
    text_frame = shape.text_frame
    text_frame.paragraphs.clear()

    first_paragraph = slides.Paragraph()
    first_paragraph.text = "Content"
    first_paragraph.paragraph_format.bullet.type = slides.BulletType.SYMBOL
    first_paragraph.paragraph_format.bullet.char = chr(0x2022)
    first_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    first_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    first_paragraph.paragraph_format.depth = 0

    second_paragraph = slides.Paragraph()
    second_paragraph.text = "Second level"
    second_paragraph.paragraph_format.bullet.type = slides.BulletType.SYMBOL
    second_paragraph.paragraph_format.bullet.char = "-"
    second_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    second_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    second_paragraph.paragraph_format.depth = 1

    third_paragraph = slides.Paragraph()
    third_paragraph.text = "Third level"
    third_paragraph.paragraph_format.bullet.type = slides.BulletType.SYMBOL
    third_paragraph.paragraph_format.bullet.char = chr(0x2022)
    third_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    third_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    third_paragraph.paragraph_format.depth = 2

    fourth_paragraph = slides.Paragraph()
    fourth_paragraph.text = "Fourth level"
    fourth_paragraph.paragraph_format.bullet.type = slides.BulletType.SYMBOL
    fourth_paragraph.paragraph_format.bullet.char = "-"
    fourth_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    fourth_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    fourth_paragraph.paragraph_format.depth = 3

    text_frame.paragraphs.add(first_paragraph)
    text_frame.paragraphs.add(second_paragraph)
    text_frame.paragraphs.add(third_paragraph)
    text_frame.paragraphs.add(fourth_paragraph)

    presentation.save("multilevel_list.pptx", slides.export.SaveFormat.PPTX)

Inizia gli elementi dell’elenco numerato con valori personalizzati

Usa BulletFormat.numbered_bullet_start_with per impostare il numero iniziale visualizzato per un paragrafo numerato.

  1. Crea una Presentation e aggiungi una AutoShape a una diapositiva.
  2. Cancella il paragrafo predefinito dal riquadro di testo della forma.
  3. Crea tre paragrafi numerati.
  4. Imposta BulletFormat.numbered_bullet_start_with su 2, 3 e 7 per i rispettivi paragrafi.
  5. Aggiungi i paragrafi al riquadro di testo e salva la presentazione.

Questo esempio Python assegna un numero iniziale personalizzato a ciascun paragrafo:

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 200, 200, 400, 200)
    text_frame = shape.text_frame
    text_frame.paragraphs.clear()

    first_paragraph = slides.Paragraph()
    first_paragraph.text = "Start at 2"
    first_paragraph.paragraph_format.bullet.type = slides.BulletType.NUMBERED
    first_paragraph.paragraph_format.bullet.numbered_bullet_start_with = 2
    text_frame.paragraphs.add(first_paragraph)

    second_paragraph = slides.Paragraph()
    second_paragraph.text = "Start at 3"
    second_paragraph.paragraph_format.bullet.type = slides.BulletType.NUMBERED
    second_paragraph.paragraph_format.bullet.numbered_bullet_start_with = 3
    text_frame.paragraphs.add(second_paragraph)

    third_paragraph = slides.Paragraph()
    third_paragraph.text = "Start at 7"
    third_paragraph.paragraph_format.bullet.type = slides.BulletType.NUMBERED
    third_paragraph.paragraph_format.bullet.numbered_bullet_start_with = 7
    text_frame.paragraphs.add(third_paragraph)

    presentation.save("custom_numbered_list.pptx", slides.export.SaveFormat.PPTX)

Controlla layout del paragrafo e proprietà di fine

Imposta un rientro della prima riga

Usa la proprietà ParagraphFormat.indent per controllare il rientro della prima riga di un paragrafo. Questa proprietà sposta solo la prima riga rispetto al margine sinistro del paragrafo. Un valore positivo sposta la prima riga verso destra, mentre le righe rimanenti rimangono allineate al corpo del paragrafo.

Usa ParagraphFormat.margin_left quando devi spostare l’intero paragrafo. Usa ParagraphFormat.indent quando devi spostare solo la prima riga.

L’esempio sottostante crea diversi paragrafi e applica valori diversi di ParagraphFormat.indent per dimostrare come il rientro della prima riga influisce sul layout del paragrafo.

  1. Crea un’istanza della classe Presentation.
  2. Accedi alla diapositiva di destinazione.
  3. Aggiungi una AutoShape rettangolare alla diapositiva.
  4. Accedi al TextFrame della forma e rimuovi il paragrafo predefinito.
  5. Crea diversi paragrafi e imposta valori diversi di ParagraphFormat.indent per ciascuno.
  6. Aggiungi i paragrafi al riquadro di testo.
  7. Salva la presentazione modificata.

Questo codice mostra come impostare un rientro del paragrafo:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 420, 220)
    shape.fill_format.fill_type = slides.FillType.NO_FILL
    shape.line_format.fill_format.fill_type = slides.FillType.SOLID
    shape.line_format.fill_format.solid_fill_color.color = draw.Color.gray

    text_frame = shape.text_frame
    text_frame.text_frame_format.autofit_type = slides.TextAutofitType.SHAPE
    text_frame.paragraphs.clear()

    first_paragraph = slides.Paragraph()
    first_paragraph.text = "No first-line indent. Wrapped lines start at the same position as the first line."
    first_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    first_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    first_paragraph.paragraph_format.margin_left = 20
    first_paragraph.paragraph_format.indent = 0

    second_paragraph = slides.Paragraph()
    second_paragraph.text = "First-line indent of 20 points. The first line moves to the right, while wrapped lines remain aligned to the paragraph body."
    second_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    second_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    second_paragraph.paragraph_format.margin_left = 20
    second_paragraph.paragraph_format.indent = 20

    third_paragraph = slides.Paragraph()
    third_paragraph.text = "First-line indent of 40 points. This paragraph shows a larger first-line offset to make the effect easier to see."
    third_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    third_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    third_paragraph.paragraph_format.margin_left = 20
    third_paragraph.paragraph_format.indent = 40

    text_frame.paragraphs.add(first_paragraph)
    text_frame.paragraphs.add(second_paragraph)
    text_frame.paragraphs.add(third_paragraph)

    presentation.save("paragraph_indent.pptx", slides.export.SaveFormat.PPTX)

Il risultato:

Il rientro della prima riga dei paragrafi

Imposta un rientro pendente

Un rientro pendente è un layout di paragrafo in cui la prima riga inizia a sinistra delle righe rimanenti. In Aspose.Slides, crei questo effetto con la proprietà ParagraphFormat.indent. Imposta indent a un valore negativo per spostare la prima riga a sinistra rispetto al corpo del paragrafo.

In pratica, ParagraphFormat.margin_left definisce la posizione sinistra del corpo del paragrafo, e ParagraphFormat.indent definisce la posizione della prima riga rispetto a quel margine. Per creare un rientro pendente, imposta un valore positivo per margin_left e un valore negativo per indent.

Questa formattazione è utile per bibliografie, riferimenti, voci di glossario e altri paragrafi in cui le righe a capo devono allinearsi sotto il corpo del paragrafo anziché sotto il primo carattere della prima riga.

  1. Crea un’istanza della classe Presentation.
  2. Accedi alla diapositiva di destinazione.
  3. Aggiungi una AutoShape rettangolare alla diapositiva.
  4. Accedi al TextFrame della forma e rimuovi il paragrafo predefinito.
  5. Crea paragrafi e imposta per ciascuno un valore positivo di ParagraphFormat.margin_left.
  6. Imposta un valore negativo di ParagraphFormat.indent per creare l’effetto di rientro pendente.
  7. Aggiungi i paragrafi al riquadro di testo.
  8. Salva la presentazione modificata.

Questo codice mostra come impostare un rientro pendente per un paragrafo:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 420, 220)
    shape.fill_format.fill_type = slides.FillType.NO_FILL
    shape.line_format.fill_format.fill_type = slides.FillType.SOLID
    shape.line_format.fill_format.solid_fill_color.color = draw.Color.gray

    text_frame = shape.text_frame
    text_frame.text_frame_format.autofit_type = slides.TextAutofitType.SHAPE
    text_frame.paragraphs.clear()

    first_paragraph = slides.Paragraph()
    first_paragraph.text = "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."
    first_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    first_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    first_paragraph.paragraph_format.margin_left = 40
    first_paragraph.paragraph_format.indent = -20

    second_paragraph = slides.Paragraph()
    second_paragraph.text = "This second example uses a deeper hanging indent so the difference between the first line and the wrapped lines is easier to compare."
    second_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    second_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    second_paragraph.paragraph_format.margin_left = 60
    second_paragraph.paragraph_format.indent = -30

    text_frame.paragraphs.add(first_paragraph)
    text_frame.paragraphs.add(second_paragraph)

    presentation.save("hanging_indent.pptx", slides.export.SaveFormat.PPTX)

Il risultato:

Il rientro pendente dei paragrafi

Imposta le proprietà di fine del paragrafo

La proprietà Paragraph.end_paragraph_portion_format controlla la formattazione del segno di fine paragrafo. L’esempio seguente assegna una dimensione del carattere e un carattere latino al segno di fine del secondo paragrafo:

  1. Carica una Presentation e accedi a una diapositiva.
  2. Aggiungi una AutoShape e cancella il suo paragrafo predefinito.
  3. Crea due paragrafi e aggiungi porzioni di testo a ciascuno.
  4. Crea un PortionFormat per il segno di fine del secondo paragrafo.
  5. Imposta PortionFormat.font_height e PortionFormat.latin_font.
  6. Assegna il formato a Paragraph.end_paragraph_portion_format e salva la presentazione.
import aspose.slides as slides

with slides.Presentation("Test.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 200, 250)
    text_frame = shape.text_frame
    text_frame.paragraphs.clear()

    first_paragraph = slides.Paragraph()
    first_paragraph.portions.add(slides.Portion("Sample text"))

    second_paragraph = slides.Paragraph()
    second_paragraph.portions.add(slides.Portion("Sample text 2"))

    end_paragraph_format = slides.PortionFormat()
    end_paragraph_format.font_height = 48
    end_paragraph_format.latin_font = slides.FontData("Times New Roman")
    second_paragraph.end_paragraph_portion_format = end_paragraph_format

    text_frame.paragraphs.add(first_paragraph)
    text_frame.paragraphs.add(second_paragraph)

    presentation.save("end_paragraph_format.pptx", slides.export.SaveFormat.PPTX)

Conta le linee renderizzate

Per le regole dei paragrafi che influenzano l’andamento automatico e la punteggiatura alla fine delle linee, vedere Control Line Breaking e Control Hanging Punctuation.

Usa Paragraph.get_lines_count per contare le linee occupate da un paragrafo dopo il layout del testo, inclusa l’andamento automatico. È utile quando si verifica la lunghezza del testo e il layout nei modelli di presentazione.

Un paragrafo è un elemento di TextFrame.paragraphs, e può occupare più linee renderizzate. Un’interruzione di linea esplicita all’interno di un paragrafo forza una nuova linea senza creare un altro paragrafo. L’andamento automatico crea linee in base alla larghezza disponibile senza inserire interruzioni 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, ne conta le linee, restringe la forma e poi sostituisce il testo con una stringa più corta. L’andamento è abilitato e l’autoadattamento è 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 espresse in punti. Infine, l’esempio aggiunge un altro paragrafo e somma i conteggi delle linee nell’intero riquadro di testo.

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 400, 200)
    text_frame = shape.text_frame
    text_frame.text_frame_format.wrap_text = slides.NullableBool.TRUE
    text_frame.text_frame_format.autofit_type = slides.TextAutofitType.NONE

    paragraph = text_frame.paragraphs[0]
    paragraph.paragraph_format.default_portion_format.font_height = 20
    paragraph.text = "This text demonstrates how automatic wrapping changes the number of rendered lines."
    print(f"Original width: {paragraph.get_lines_count()}")

    shape.width = 150
    print(f"Narrower shape: {paragraph.get_lines_count()}")

    paragraph.text = "Short text."
    print(f"Shorter text: {paragraph.get_lines_count()}")

    second_paragraph = slides.Paragraph()
    second_paragraph.text = "Another paragraph."
    second_paragraph.paragraph_format.default_portion_format.font_height = 20
    text_frame.paragraphs.add(second_paragraph)

    total_line_count = 0
    for current_paragraph in text_frame.paragraphs:
        total_line_count += current_paragraph.get_lines_count()
    print(f"Total lines in the text frame: {total_line_count}")

Con questo testo e queste dimensioni, restringere la forma aumenta il conteggio delle linee, mentre sostituire il testo con la stringa breve lo riduce. I conteggi esatti possono variare in base alla disponibilità dei caratteri e alle sostituzioni, alla dimensione del carattere, ai margini, all’indentazione, all’andamento e alle impostazioni di autoadattamento. Usa i caratteri e le impostazioni di layout destinati all’ambiente target quando verifichi un modello.

Il conteggio delle linee da solo non determina se il testo supera il contenitore. Anche l’altezza disponibile, le altezze delle linee, la spaziatura dei paragrafi e delle linee e il comportamento dell’autoadattamento sono importanti; anche una singola linea può superare la larghezza disponibile quando l’andamento è disabilitato.

Importa ed esporta il contenuto dei paragrafi

Importa testo HTML nei paragrafi

Usa ParagraphCollection.add_from_html per convertire il markup HTML in paragrafi e porzioni in un riquadro di testo.

  1. Crea un’istanza della classe Presentation.
  2. Accedi a una diapositiva e aggiungi una AutoShape.
  3. Accedi al TextFrame della forma e cancella il paragrafo predefinito.
  4. Leggi il file HTML di origine.
  5. Trasmetti la stringa HTML a ParagraphCollection.add_from_html.
  6. Salva la presentazione modificata.

Questo esempio Python importa HTML in un riquadro di testo:

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    shape_width = presentation.slide_size.size.width - 20
    shape_height = presentation.slide_size.size.height - 20
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, shape_width, shape_height)
    shape.fill_format.fill_type = slides.FillType.NO_FILL
    shape.text_frame.paragraphs.clear()

    with open("file.html", "r", encoding="utf-8") as html_stream:
        html = html_stream.read()

    shape.text_frame.paragraphs.add_from_html(html)
    presentation.save("html_text.pptx", slides.export.SaveFormat.PPTX)

Esporta il testo del paragrafo in HTML

Usa ParagraphCollection.export_to_html per esportare un intervallo selezionato di paragrafi come HTML.

  1. Crea un’istanza della classe Presentation e carica la presentazione desiderata.
  2. Accedi alla diapositiva e individua la AutoShape che contiene il testo.
  3. Accedi al TextFrame della forma.
  4. Chiama ParagraphCollection.export_to_html indicando l’indice del paragrafo iniziale e il numero di paragrafi da esportare.
  5. Scrivi la stringa HTML restituita in un file.

Questo esempio Python esporta tutti i paragrafi dalla prima forma di testo:

import aspose.slides as slides

with slides.Presentation("ExportingHTMLText.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]

    if isinstance(shape, slides.AutoShape) and shape.text_frame is not None:
        paragraphs = shape.text_frame.paragraphs
        html = paragraphs.export_to_html(0, paragraphs.count, None)
        with open("paragraphs.html", "w", encoding="utf-8") as html_stream:
            html_stream.write(html)
    else:
        print("The first shape is not a text shape.")

Renderizza un paragrafo come immagine

Paragraph fornisce il metodo get_image per renderizzare direttamente un singolo paragrafo. Il metodo restituisce un IImage che puoi salvare su file o stream con IImage.save. Non è necessario renderizzare la forma contenente o ritagliare manualmente un bitmap.

Il metodo get_image può restituire None se il paragrafo non viene trovato nella collezione madre, non ha limiti di rendering validi o non può essere renderizzato. Verifica il risultato prima di salvarlo e usa l’immagine restituita come gestore di contesto per rilasciare le risorse.

Renderizza 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.

La casella di testo con tre paragrafi

L’esempio seguente renderizza il secondo paragrafo in una forma di testo normale alla scala predefinita e salva l’immagine restituita in formato PNG:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]

    if isinstance(shape, slides.AutoShape) and shape.text_frame is not None and shape.text_frame.paragraphs.count > 1:
        paragraph = shape.text_frame.paragraphs[1]
        paragraph_image = paragraph.get_image()

        if paragraph_image is not None:
            with paragraph_image:
                paragraph_image.save("paragraph.png", slides.ImageFormat.PNG)
        else:
            print("The paragraph could not be rendered.")
    else:
        print("The expected text shape or paragraph was not found.")

Il risultato:

L’immagine del paragrafo

Renderizza un paragrafo in una cella di tabella con scala

Passa i fattori di scala orizzontale e verticale a get_image per controllare le dimensioni del paragrafo renderizzato. L’esempio seguente crea una tabella, renderizza il paragrafo nella sua prima cella con il doppio della larghezza e altezza predefinite e salva il risultato come immagine PNG:

import aspose.slides as slides

scale_x = 2
scale_y = 2

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    table = slide.shapes.add_table(50, 50, [300], [80])
    paragraph = table.rows[0][0].text_frame.paragraphs[0]
    paragraph.text = "Text in a table cell"

    paragraph_image = paragraph.get_image(scale_x, scale_y)
    if paragraph_image is not None:
        with paragraph_image:
            paragraph_image.save("table_paragraph.png", slides.ImageFormat.PNG)
    else:
        print("The paragraph could not be rendered.")

Un fattore di scala di 1 mantiene quell’asse alle sue dimensioni pixel predefinite. Ad esempio, 2 per entrambi i fattori produce un’immagine la cui larghezza e altezza sono approssimativamente il doppio delle dimensioni predefinite, risultando in quattro volte più pixel. Fattori più grandi producono generalmente 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 dettagli. Usa fattori uguali per preservare le proporzioni del paragrafo; fattori orizzontali e verticali diversi allungano l’output in modo indipendente.

Renderizzare un’intera forma con Shape.get_image rimane utile quando l’output deve includere il riempimento, il bordo o altri contesti visivi della forma. Per un’immagine solo del paragrafo, usa Paragraph.get_image.

FAQ

Posso disabilitare completamente l’andamento del testo all’interno di un riquadro di testo?

Sì. Imposta TextFrameFormat.wrap_text per disabilitare l’andamento così le linee non si spezzano ai bordi del riquadro di testo.

Come posso ottenere i limiti esatti del paragrafo su diapositiva?

Usa Paragraph.get_rect per recuperare il rettangolo di delimitazione del paragrafo. Portion.get_rect fornisce i limiti di una singola porzione.

Dove è controllato l’allineamento del paragrafo (sinistra, destra, centro o giustificato)?

ParagraphFormat.alignment è 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, consulta Align Fonts Within a Line.

Posso impostare la lingua di correzione per una parte di un paragrafo?

Sì. Imposta PortionFormat.language_id per le singole porzioni, così un paragrafo può contenere testo in più lingue.