Usar FloatingBox para el diseño de PDF en Python

Uso básico de FloatingBox

El FloatingBox Una clase es un contenedor para colocar texto y otro contenido en una página PDF. Le brinda un mayor control sobre el diseño, los bordes y el estilo que los párrafos de texto habituales. Si el contenido supera el tamaño del cuadro, el comportamiento de recorte se controla mediante la configuración del cuadro.

Utilice esta página cuando necesite contenedores de texto estructurados, diseños de varias columnas y posicionamiento preciso en documentos PDF con Aspose.PDF for Python via .NET.

  1. Crear un nuevo Document.
  2. Añadir un Page al documento.
  3. Cree un FloatingBox.
  4. Establecer el borde de la caja usando BorderInfo y BorderSide.
  5. Repetición de cuadro de control con el is_need_repeating propiedad.
  6. Agregar contenido de texto usando TextFragment.
  7. Agregar el FloatingBox al Page.
  8. Guarda el documento PDF final usando Document.save().
import aspose.pdf as ap

def create_and_add_floating_box(outfile):
    # Create PDF document
    with ap.Document() as document:
        # Add page to pages collection of PDF
        page = document.pages.add()
        # Create and fill box
        box = ap.FloatingBox(400, 30)
        box.border = ap.BorderInfo(ap.BorderSide.ALL, 1.5, ap.Color.dark_green)
        box.is_need_repeating = False
        phrase = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce quam odio, sollicitudin ac mauris vel, suscipit pellentesque nisi."
        box.paragraphs.add(ap.text.TextFragment(phrase))
        # Add box
        page.paragraphs.add(box)
        document.save(outfile)

En el ejemplo anterior, el FloatingBox se crea con un ancho de 400 pt y una altura de 30 pt. El texto supera intencionalmente la altura disponible, por lo que parte de él está recortado.

Imagen 1

El is_need_repeating propiedad con un valor de False limita la renderización de texto a una sola página.

Si establece esta propiedad en True, el texto se refluye a páginas subsecuentes en la misma posición.

Imagen 2

Funciones avanzadas de FloatingBox

Compatibilidad multicolumna

Diseño de varias columnas (caso simple)

FloatingBox admite diseño de varias columnas. Para crear dicho diseño, debe definir los valores de ColumnInfo propiedades.

  • column_widths es una cadena que define el ancho de cada columna en puntos.
  • column_spacing es una cadena que define el ancho del espacio entre columnas.
  • column_count es el número de columnas.
import sys
import aspose.pdf as ap
from os import path

def multi_column_layout(outfile):
    # Create PDF document
    with ap.Document() as document:
        # Add page to pages collection of PDF
        page = document.pages.add()
        # Set margin settings
        page.page_info.margin = ap.MarginInfo(36, 18, 36, 18)
        column_count = 3
        spacing = 10
        width = (
            page.page_info.width
            - page.page_info.margin.left
            - page.page_info.margin.right
            - (column_count - 1) * spacing
        )
        column_width = width / 3
        # Create FloatingBox
        box = ap.FloatingBox()
        box.is_need_repeating = True
        box.column_info.column_widths = f"{column_width} {column_width} {column_width}"
        box.column_info.column_spacing = f"{spacing}"
        box.column_info.column_count = 3
        phrase = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce quam odio, sollicitudin ac mauris vel, suscipit pellentesque nisi."
        paragraphs = [
            phrase,
            phrase,
            phrase,
            phrase,
            phrase,
            phrase,
            phrase,
            phrase,
            phrase,
            phrase,
        ]
        for paragraph in paragraphs:
            box.paragraphs.add(ap.text.TextFragment(paragraph))
        # Add a box to a page
        page.paragraphs.add(box)
        # Save PDF document
        document.save(outfile)

El ejemplo genera párrafos de muestra y los coloca en tres columnas. El contenido continúa en páginas adicionales hasta que se rendericen todos los párrafos.

Diseño de varias columnas con inicio de columna forzado

Este ejemplo usa la misma configuración de varias columnas, pero obliga a que cada párrafo añadido comience en una nueva columna. Para hacer eso, establezca is_first_paragraph_in_column = True en cada TextFragment antes de añadirlo a FloatingBox.

import sys
import aspose.pdf as ap
from os import path

def multi_column_layout_2(outfile):
    # Create PDF document
    with ap.Document() as document:
        # Add page to pages collection of PDF
        page = document.pages.add()
        # Set margin settings
        page.page_info.margin = ap.MarginInfo(36, 18, 36, 18)
        column_count = 3
        spacing = 10
        width = (
            page.page_info.width
            - page.page_info.margin.left
            - page.page_info.margin.right
            - (column_count - 1) * spacing
        )
        column_width = width / 3
        # Create FloatingBox
        box = ap.FloatingBox()
        box.is_need_repeating = True
        box.column_info.column_widths = f"{column_width} {column_width} {column_width}"
        box.column_info.column_spacing = f"{spacing}"
        box.column_info.column_count = 3
        phrase = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce quam odio, sollicitudin ac mauris vel, suscipit pellentesque nisi."
        paragraphs = [
            phrase,
            phrase,
            phrase,
            phrase,
            phrase,
            phrase,
            phrase,
            phrase,
            phrase,
            phrase,
        ]
        for paragraph in paragraphs:
            text = ap.text.TextFragment(paragraph)
            text.is_first_paragraph_in_column = True
            box.paragraphs.add(text)
        # Add a box to a page
        page.paragraphs.add(box)
        # Save PDF document
        document.save(outfile)

Soporte de fondo

Aplicar un color de fondo a un FloatingBox en un documento PDF usando Aspose.PDF for Python via .NET. Al asignar un Color a background_color, puedes resaltar contenido para encabezados, llamados de atención o secciones con estilo.

Este fragmento de código muestra cómo crear un cuadro de texto verde claro simple con contenido de ejemplo.

import sys
import aspose.pdf as ap
from os import path

def background_support(outfile):
    # Create PDF document
    with ap.Document() as document:
        # Add page to pages collection of PDF
        page = document.pages.add()
        # Create and fill box
        box = ap.FloatingBox(400, 30)
        box.background_color = ap.Color.light_green
        box.is_need_repeating = False
        box.paragraphs.add(ap.text.TextFragment("text example"))
        # Add box
        page.paragraphs.add(box)
        # Save PDF document
        document.save(outfile)

Soporte de posicionamiento

La posición de un FloatingBox en la página está controlado por positioning_mode, left, y top. Cuando positioning_mode es:

La ubicación depende de los elementos añadidos previamente. Añadir un nuevo párrafo afecta al flujo de los elementos subsiguientes. Si left o top son diferentes de cero, también se aplican.

La ubicación está fijada por left y top; no depende de elementos anteriores y no afecta el flujo de los posteriores.

import sys
import aspose.pdf as ap
from os import path

def offset_support(outfile):
    # Create PDF document
    with ap.Document() as document:
        # Add page to pages collection of PDF
        page = document.pages.add()
        # Create and fill box
        box = ap.FloatingBox(400, 30)
        box.top = 45
        box.left = 15
        box.positioning_mode = ap.ParagraphPositioningMode.ABSOLUTE
        box.border = ap.BorderInfo(ap.BorderSide.ALL, 1.5, ap.Color.dark_green)
        box.paragraphs.add(ap.text.TextFragment("text example 1"))
        page.paragraphs.add(ap.text.TextFragment("text example 2"))
        # Add the box to the page
        page.paragraphs.add(box)
        page.paragraphs.add(ap.text.TextFragment("text example 3"))
        document.save(outfile)

Alinear cajas flotantes con alineación vertical y horizontal en PDF

Alinear FloatingBox elementos en una página PDF usando VerticalAlignment y HorizontalAlignment en Aspose.PDF for Python via .NET. Esto le ayuda a colocar contenedores flotantes en posiciones superior, central o inferior para diseños de página, bloques de encabezado/pie de página o notas laterales.

  1. Crear un nuevo documento PDF.
  2. Agregue una página al documento.
  3. Agregar el primero FloatingBox con alineación inferior derecha.
  4. Agregar el segundo FloatingBox con alineación centrado-derecha.
  5. Agregar el tercero FloatingBox con alineación superior derecha.
  6. Guarde el documento.
import sys
import aspose.pdf as ap
from os import path

def align_text_to_float(outfile):
    # Create PDF document
    with ap.Document() as document:
        # Add page to pages collection of PDF
        page = document.pages.add()

        # Create float box
        float_box = ap.FloatingBox(100, 100)
        # Set settings to float box
        float_box.vertical_alignment = ap.VerticalAlignment.BOTTOM
        float_box.horizontal_alignment = ap.HorizontalAlignment.RIGHT
        float_box.paragraphs.add(ap.text.TextFragment("FloatingBox_bottom"))
        float_box.border = ap.BorderInfo(ap.BorderSide.ALL, ap.Color.blue)
        # Add float box
        page.paragraphs.add(float_box)

        # Create float box
        float_box_2 = ap.FloatingBox(100, 100)
        # Set settings to float box
        float_box_2.vertical_alignment = ap.VerticalAlignment.CENTER
        float_box_2.horizontal_alignment = ap.HorizontalAlignment.RIGHT
        float_box_2.paragraphs.add(ap.text.TextFragment("FloatingBox_center"))
        float_box_2.border = ap.BorderInfo(ap.BorderSide.ALL, ap.Color.blue)
        # Add float box
        page.paragraphs.add(float_box_2)

        # Create float box
        float_box_3 = ap.FloatingBox(100, 100)
        # Set settings to float box
        float_box_3.vertical_alignment = ap.VerticalAlignment.TOP
        float_box_3.horizontal_alignment = ap.HorizontalAlignment.RIGHT
        float_box_3.paragraphs.add(ap.text.TextFragment("FloatingBox_top"))
        float_box_3.border = ap.BorderInfo(ap.BorderSide.ALL, ap.Color.blue)
        # Add float box
        page.paragraphs.add(float_box_3)

        # Save the document
        document.save(outfile)

Temas de texto relacionados