Support configurable default font and size
Some checks failed
CI Pipeline / build (pull_request) Failing after 46s

Add default_font and default_size options to Document.create, rendered
as w:docDefaults in styles.xml. Defaults to Arial 12pt. Adjust heading
sizes for better visual hierarchy.

Styling based on uutilsynet guidance for accessible documents:
https://www.uutilsynet.no/veiledning/rettleiar-universelt-utforma-word-og-pdf-dokument/1636
This commit is contained in:
2026-03-05 13:09:40 +01:00
parent 64c8679044
commit 26e0d59cf1
4 changed files with 47 additions and 11 deletions

View File

@@ -4,16 +4,21 @@ module Notare
class Document
include Builder
attr_reader :nodes, :styles, :table_styles, :hyperlinks
DEFAULT_FONT = "Arial"
DEFAULT_SIZE = 12
def self.create(path, &block)
doc = new
attr_reader :nodes, :styles, :table_styles, :hyperlinks, :default_font, :default_size
def self.create(path, default_font: DEFAULT_FONT, default_size: DEFAULT_SIZE, &block)
doc = new(default_font: default_font, default_size: default_size)
block.call(doc)
doc.save(path)
doc
end
def initialize
def initialize(default_font: DEFAULT_FONT, default_size: DEFAULT_SIZE)
@default_font = default_font
@default_size = default_size
@nodes = []
@format_stack = []
@current_target = nil
@@ -101,12 +106,12 @@ module Notare
def register_built_in_styles
# Headings (spacing_before ensures they're rendered as paragraph styles)
define_style :heading1, size: 24, bold: true, spacing_before: 240, spacing_after: 120
define_style :heading2, size: 18, bold: true, spacing_before: 200, spacing_after: 100
define_style :heading1, size: 20, bold: true, spacing_before: 240, spacing_after: 120
define_style :heading2, size: 16, bold: true, spacing_before: 200, spacing_after: 100
define_style :heading3, size: 14, bold: true, spacing_before: 160, spacing_after: 80
define_style :heading4, size: 12, bold: true, spacing_before: 120, spacing_after: 60
define_style :heading5, size: 11, bold: true, italic: true, spacing_before: 100, spacing_after: 40
define_style :heading6, size: 10, bold: true, italic: true, spacing_before: 80, spacing_after: 40
define_style :heading5, size: 12, bold: true, italic: true, spacing_before: 100, spacing_after: 40
define_style :heading6, size: 12, italic: true, spacing_before: 80, spacing_after: 40
# Other built-in styles
define_style :title, size: 26, bold: true, align: :center