Skip to content

TextColumns with TextShaping as first content throws an exception #1439

@weltkante

Description

@weltkante

When text shaping is turned on, if I start the PDF with a text columns layout I'm getting an exception. If I instead have some non-colum content before the columns its works.

Error details

Traceback (most recent call last):
  File "...\test.py", line 8, in <module>
    with pdf.text_columns(ncols=2) as cols:
  File "...\fpdf\text_region.py", line 364, in __exit__
    self.render()
  File "...\fpdf\text_region.py", line 723, in render
    self._render_page_lines(text_lines, first_page_top, page_bottom)
  File "...\fpdf\text_region.py", line 707, in _render_page_lines
    last_line_height = self._render_column_lines(text_lines, top, bottom)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "...\fpdf\text_region.py", line 560, in _render_column_lines
    self.pdf._render_styled_text_line(
  File "...\fpdf\fpdf.py", line 3340, in _render_styled_text_line
    fragments = text_line.get_ordered_fragments()
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "...\fpdf\line_break.py", line 428, in get_ordered_fragments
    directional_runs[-1].append(fragment)
    ~~~~~~~~~~~~~~~~^^^^
IndexError: list index out of range

Minimal code

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_text_shaping(True)
pdf.set_font("Times", "", 14)
#pdf.write(text=" ") # adding some text in front of the columns makes it work
with pdf.text_columns(ncols=2) as cols:
    cols.write("Lorem ipsum dolor sit amet")
    cols.new_column()
    cols.write("Lorem ipsum dolor sit amet")

pdf.output("test.pdf")

Environment

  • Operating System: Windows 10
  • Python version: Python 3.12.1
  • fpdf2 version used: 2.8.3

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions