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

@@ -18,9 +18,11 @@ module Notare
right: "right"
}.freeze
def initialize(styles, table_styles = {})
def initialize(styles, table_styles = {}, default_font: nil, default_size: nil)
@styles = styles
@table_styles = table_styles
@default_font = default_font
@default_size = default_size
end
def to_xml
@@ -28,6 +30,8 @@ module Notare
xml.styles("xmlns:w" => NAMESPACE) do
xml.parent.namespace = xml.parent.namespace_definitions.find { |ns| ns.prefix == "w" }
render_doc_defaults(xml) if @default_font || @default_size
@styles.each_value do |style|
render_style(xml, style)
end
@@ -44,6 +48,28 @@ module Notare
private
def render_doc_defaults(xml)
xml["w"].docDefaults do
xml["w"].rPrDefault do
xml["w"].rPr do
if @default_font
xml["w"].rFonts(
"w:ascii" => @default_font,
"w:hAnsi" => @default_font,
"w:eastAsia" => @default_font,
"w:cs" => @default_font
)
end
if @default_size
half_points = (@default_size * 2).to_i
xml["w"].sz("w:val" => half_points.to_s)
xml["w"].szCs("w:val" => half_points.to_s)
end
end
end
end
end
def render_style(xml, style)
style_type = style.paragraph_properties? ? "paragraph" : "character"