adding more fonts
This commit is contained in:
@@ -0,0 +1,227 @@
|
||||
"""
|
||||
Demonstration of bundled fonts in pyWebLayout.
|
||||
|
||||
This example shows:
|
||||
1. How to use the bundled DejaVu font families
|
||||
2. Different font variants (regular, bold, italic, bold-italic)
|
||||
3. The three font families (Sans, Serif, Monospace)
|
||||
4. Convenient Font.from_family() method for easy font selection
|
||||
|
||||
The demo creates a page showcasing all bundled fonts with different styles.
|
||||
"""
|
||||
|
||||
from pyWebLayout.concrete import Page
|
||||
from pyWebLayout.abstract import Paragraph, Word
|
||||
from pyWebLayout.style import Font, FontWeight, FontStyle, BundledFont
|
||||
from pyWebLayout.style.page_style import PageStyle
|
||||
from pyWebLayout.layout.document_layouter import DocumentLayouter
|
||||
|
||||
|
||||
def create_font_showcase_page():
|
||||
"""
|
||||
Create a page demonstrating all bundled fonts and variants.
|
||||
"""
|
||||
# Create page with some padding
|
||||
page = Page(size=(800, 1000), style=PageStyle(border_width=20))
|
||||
layouter = DocumentLayouter(page)
|
||||
|
||||
# Title
|
||||
title_font = Font.from_family(
|
||||
BundledFont.SANS,
|
||||
font_size=32,
|
||||
colour=(0, 0, 100),
|
||||
weight=FontWeight.BOLD
|
||||
)
|
||||
title = Paragraph(title_font)
|
||||
title.add_word(Word("Bundled", title_font))
|
||||
title.add_word(Word("Fonts", title_font))
|
||||
title.add_word(Word("Showcase", title_font))
|
||||
layouter.layout_paragraph(title)
|
||||
page._current_y_offset += 20
|
||||
|
||||
# Introduction
|
||||
intro_font = Font.from_family(BundledFont.SANS, font_size=14, colour=(50, 50, 50))
|
||||
intro = Paragraph(intro_font)
|
||||
intro_text = "pyWebLayout bundles the DejaVu font family with three font types and four variants each."
|
||||
for word in intro_text.split():
|
||||
intro.add_word(Word(word, intro_font))
|
||||
layouter.layout_paragraph(intro)
|
||||
page._current_y_offset += 25
|
||||
|
||||
# --- Sans Serif Section ---
|
||||
section_font = Font.from_family(
|
||||
BundledFont.SANS,
|
||||
font_size=20,
|
||||
colour=(0, 100, 0),
|
||||
weight=FontWeight.BOLD
|
||||
)
|
||||
sans_section = Paragraph(section_font)
|
||||
sans_section.add_word(Word("Sans-Serif", section_font))
|
||||
sans_section.add_word(Word("(DejaVu", section_font))
|
||||
sans_section.add_word(Word("Sans)", section_font))
|
||||
layouter.layout_paragraph(sans_section)
|
||||
page._current_y_offset += 10
|
||||
|
||||
# Sans Regular
|
||||
sans_regular = Font.from_family(BundledFont.SANS, font_size=16)
|
||||
demo_text_paragraph(layouter, page, sans_regular, "Regular:")
|
||||
|
||||
# Sans Bold
|
||||
sans_bold = Font.from_family(BundledFont.SANS, font_size=16, weight=FontWeight.BOLD)
|
||||
demo_text_paragraph(layouter, page, sans_bold, "Bold:")
|
||||
|
||||
# Sans Italic
|
||||
sans_italic = Font.from_family(BundledFont.SANS, font_size=16, style=FontStyle.ITALIC)
|
||||
demo_text_paragraph(layouter, page, sans_italic, "Italic:")
|
||||
|
||||
# Sans Bold Italic
|
||||
sans_bold_italic = Font.from_family(
|
||||
BundledFont.SANS,
|
||||
font_size=16,
|
||||
weight=FontWeight.BOLD,
|
||||
style=FontStyle.ITALIC
|
||||
)
|
||||
demo_text_paragraph(layouter, page, sans_bold_italic, "Bold Italic:")
|
||||
page._current_y_offset += 20
|
||||
|
||||
# --- Serif Section ---
|
||||
serif_section = Paragraph(section_font)
|
||||
serif_section.add_word(Word("Serif", section_font))
|
||||
serif_section.add_word(Word("(DejaVu", section_font))
|
||||
serif_section.add_word(Word("Serif)", section_font))
|
||||
layouter.layout_paragraph(serif_section)
|
||||
page._current_y_offset += 10
|
||||
|
||||
# Serif Regular
|
||||
serif_regular = Font.from_family(BundledFont.SERIF, font_size=16)
|
||||
demo_text_paragraph(layouter, page, serif_regular, "Regular:")
|
||||
|
||||
# Serif Bold
|
||||
serif_bold = Font.from_family(BundledFont.SERIF, font_size=16, weight=FontWeight.BOLD)
|
||||
demo_text_paragraph(layouter, page, serif_bold, "Bold:")
|
||||
|
||||
# Serif Italic
|
||||
serif_italic = Font.from_family(BundledFont.SERIF, font_size=16, style=FontStyle.ITALIC)
|
||||
demo_text_paragraph(layouter, page, serif_italic, "Italic:")
|
||||
|
||||
# Serif Bold Italic
|
||||
serif_bold_italic = Font.from_family(
|
||||
BundledFont.SERIF,
|
||||
font_size=16,
|
||||
weight=FontWeight.BOLD,
|
||||
style=FontStyle.ITALIC
|
||||
)
|
||||
demo_text_paragraph(layouter, page, serif_bold_italic, "Bold Italic:")
|
||||
page._current_y_offset += 20
|
||||
|
||||
# --- Monospace Section ---
|
||||
mono_section = Paragraph(section_font)
|
||||
mono_section.add_word(Word("Monospace", section_font))
|
||||
mono_section.add_word(Word("(DejaVu", section_font))
|
||||
mono_section.add_word(Word("Sans", section_font))
|
||||
mono_section.add_word(Word("Mono)", section_font))
|
||||
layouter.layout_paragraph(mono_section)
|
||||
page._current_y_offset += 10
|
||||
|
||||
# Mono Regular
|
||||
mono_regular = Font.from_family(BundledFont.MONOSPACE, font_size=14)
|
||||
demo_code_paragraph(layouter, page, mono_regular, "Regular:")
|
||||
|
||||
# Mono Bold
|
||||
mono_bold = Font.from_family(BundledFont.MONOSPACE, font_size=14, weight=FontWeight.BOLD)
|
||||
demo_code_paragraph(layouter, page, mono_bold, "Bold:")
|
||||
|
||||
# Mono Italic
|
||||
mono_italic = Font.from_family(BundledFont.MONOSPACE, font_size=14, style=FontStyle.ITALIC)
|
||||
demo_code_paragraph(layouter, page, mono_italic, "Italic:")
|
||||
|
||||
# Mono Bold Italic
|
||||
mono_bold_italic = Font.from_family(
|
||||
BundledFont.MONOSPACE,
|
||||
font_size=14,
|
||||
weight=FontWeight.BOLD,
|
||||
style=FontStyle.ITALIC
|
||||
)
|
||||
demo_code_paragraph(layouter, page, mono_bold_italic, "Bold Italic:")
|
||||
page._current_y_offset += 20
|
||||
|
||||
# Footer
|
||||
footer_font = Font.from_family(BundledFont.SANS, font_size=12, colour=(100, 100, 100))
|
||||
footer = Paragraph(footer_font)
|
||||
footer_text = "All fonts are free and open source under the Bitstream Vera License."
|
||||
for word in footer_text.split():
|
||||
footer.add_word(Word(word, footer_font))
|
||||
layouter.layout_paragraph(footer)
|
||||
|
||||
return page
|
||||
|
||||
|
||||
def demo_text_paragraph(layouter, page, font, label):
|
||||
"""Create a paragraph showing sample text with the given font."""
|
||||
# Label in smaller font
|
||||
label_font = Font.from_family(BundledFont.SANS, font_size=12, colour=(100, 100, 100))
|
||||
label_para = Paragraph(label_font)
|
||||
label_para.add_word(Word(label, label_font))
|
||||
layouter.layout_paragraph(label_para)
|
||||
page._current_y_offset += 5
|
||||
|
||||
# Sample text
|
||||
para = Paragraph(font)
|
||||
sample = "The quick brown fox jumps over the lazy dog. 0123456789"
|
||||
for word in sample.split():
|
||||
para.add_word(Word(word, font))
|
||||
layouter.layout_paragraph(para)
|
||||
page._current_y_offset += 8
|
||||
|
||||
|
||||
def demo_code_paragraph(layouter, page, font, label):
|
||||
"""Create a paragraph showing sample code with the given font."""
|
||||
# Label in smaller font
|
||||
label_font = Font.from_family(BundledFont.SANS, font_size=12, colour=(100, 100, 100))
|
||||
label_para = Paragraph(label_font)
|
||||
label_para.add_word(Word(label, label_font))
|
||||
layouter.layout_paragraph(label_para)
|
||||
page._current_y_offset += 5
|
||||
|
||||
# Sample code
|
||||
para = Paragraph(font)
|
||||
code = "def hello(): print('Hello, World!') # 0123456789"
|
||||
for word in code.split():
|
||||
para.add_word(Word(word, font))
|
||||
layouter.layout_paragraph(para)
|
||||
page._current_y_offset += 8
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("\n")
|
||||
print("=" * 70)
|
||||
print("Bundled Fonts Demonstration")
|
||||
print("=" * 70)
|
||||
print()
|
||||
|
||||
print("Creating font showcase page...")
|
||||
page = create_font_showcase_page()
|
||||
|
||||
print("Rendering page...")
|
||||
image = page.render()
|
||||
|
||||
output_file = "demo_08_bundled_fonts.png"
|
||||
image.save(output_file)
|
||||
print(f"Saved: {output_file}")
|
||||
|
||||
print()
|
||||
print("=" * 70)
|
||||
print("Demo complete!")
|
||||
print()
|
||||
print("The page showcases all bundled fonts:")
|
||||
print(" - DejaVu Sans (Sans-serif)")
|
||||
print(" - DejaVu Serif (Serif)")
|
||||
print(" - DejaVu Sans Mono (Monospace)")
|
||||
print()
|
||||
print("Each family has 4 variants:")
|
||||
print(" - Regular")
|
||||
print(" - Bold")
|
||||
print(" - Italic")
|
||||
print(" - Bold Italic")
|
||||
print("=" * 70)
|
||||
print()
|
||||
Reference in New Issue
Block a user