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.
- Crear un nuevo
Document. - Añadir un
Pageal documento. - Cree un
FloatingBox. - Establecer el borde de la caja usando
BorderInfoyBorderSide. - Repetición de cuadro de control con el
is_need_repeatingpropiedad. - Agregar contenido de texto usando
TextFragment. - Agregar el
FloatingBoxalPage. - 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.

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.

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_widthses una cadena que define el ancho de cada columna en puntos.column_spacinges una cadena que define el ancho del espacio entre columnas.column_countes 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:
ParagraphPositioningMode.DEFAULT(predeterminado)
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.
- Crear un nuevo documento PDF.
- Agregue una página al documento.
- Agregar el primero
FloatingBoxcon alineación inferior derecha. - Agregar el segundo
FloatingBoxcon alineación centrado-derecha. - Agregar el tercero
FloatingBoxcon alineación superior derecha. - 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)