#!/usr/bin/env python3 """ Simple Table Text Wrapping Example A minimal example showing text wrapping in table cells. Perfect for quick testing and demonstration. """ import sys from pathlib import Path # Add pyWebLayout to path sys.path.insert(0, str(Path(__file__).parent.parent)) from pyWebLayout.io.readers.html_extraction import parse_html_string from pyWebLayout.layout.document_layouter import DocumentLayouter from pyWebLayout.style.page_style import PageStyle from pyWebLayout.style import Font from pyWebLayout.concrete.table import TableStyle from pyWebLayout.concrete.page import Page from pyWebLayout.abstract.block import Table def main(): """Create a simple table with text wrapping.""" print("\nSimple Table Text Wrapping Example") print("=" * 50) # HTML with a table containing long text html = """
Text Wrapping Demonstration
Column 1 Column 2 Column 3
This is a cell with quite a lot of text that will need to wrap across multiple lines. Short text Another cell with enough content to demonstrate the automatic line wrapping functionality.
Cell A This middle cell contains a paragraph with several words that should wrap nicely within the available space. Cell C
Words like supercalifragilisticexpialidocious might need hyphenation. Normal text The wrapping algorithm handles both regular word wrapping and hyphenation seamlessly.
""" print("\n Parsing HTML and creating table...") # Parse HTML base_font = Font(font_size=12) blocks = parse_html_string(html, base_font=base_font) # Find table table = None for block in blocks: if isinstance(block, Table): table = block break if not table: print(" ✗ No table found!") return print(" ✓ Table parsed successfully") # Create page page_style = PageStyle( padding=(30, 30, 30, 30), background_color=(255, 255, 255) ) page = Page(size=(800, 600), style=page_style) # Create table style table_style = TableStyle( border_width=2, border_color=(70, 130, 180), cell_padding=(10, 10, 10, 10), header_bg_color=(176, 196, 222), cell_bg_color=(245, 250, 255) ) print(" Rendering table with text wrapping...") # Layout and render layouter = DocumentLayouter(page) layouter.layout_table(table, style=table_style) # Get rendered image _ = page.draw img = page._canvas # Save output output_path = Path(__file__).parent.parent / 'docs' / 'images' / 'example_11b_simple_wrapping.png' output_path.parent.mkdir(parents=True, exist_ok=True) img.save(str(output_path)) print(f"\n✓ Example completed!") print(f" Output saved to: {output_path}") print(f" Image size: {img.width}x{img.height} pixels") print(f"\n The table demonstrates:") print(f" • Automatic line wrapping in cells") print(f" • Proper word spacing and alignment") print(f" • Hyphenation for very long words") print(f" • Multi-line text within cell boundaries") if __name__ == '__main__': main()