NativeElixirPdfUtilities.HtmlToPdf.Font (native_elixir_pdf_utilities v0.3.0)

View Source

Font loading, fallback resolution, text measurement, and PDF text encoding.

The renderer loads explicitly configured fonts and also discovers a small set of common system sans-serif fonts when they are available.

Summary

Functions

Encodes text for an embedded Type0 font content stream.

Loads explicit TTF font options into a registry.

Returns the PDF resource key for a selected font face.

Resolves a CSS font-family value or fallback list to a supported font face.

Measures text in PDF points for the selected font and size.

Builds CID-to-Unicode mappings for all text shown with an embedded font.

Types

built_in_font()

@type built_in_font() :: %{type: :built_in, family: String.t(), pdf_name: String.t()}

embedded_font()

@type embedded_font() :: %{
  type: :embedded,
  family: String.t(),
  weight: number(),
  style: font_style(),
  id: String.t(),
  pdf_name: String.t(),
  data: binary(),
  units_per_em: pos_integer(),
  widths: [non_neg_integer()],
  default_width: non_neg_integer(),
  cmap: %{optional(non_neg_integer()) => non_neg_integer()},
  ascent: integer(),
  descent: integer(),
  bbox: {integer(), integer(), integer(), integer()}
}

font_face()

@type font_face() :: built_in_font() | embedded_font()

font_style()

@type font_style() :: :normal | :italic

registry()

@type registry() :: %{embedded: [embedded_font()]}

Functions

encode_embedded_text(text, font)

@spec encode_embedded_text(String.t(), embedded_font()) :: String.t()

Encodes text for an embedded Type0 font content stream.

load_registry(opts)

@spec load_registry(keyword()) :: {:ok, registry()} | :error

Loads explicit TTF font options into a registry.

Accepted font entries are maps, keyword lists, or {family, path} tuples. Map and keyword entries must include :family and :path; :weight and :style are optional.

pdf_name(font)

@spec pdf_name(font_face()) :: String.t()

Returns the PDF resource key for a selected font face.

resolve(family_value, weight, style, registry)

@spec resolve(String.t() | [String.t()], number(), font_style(), registry()) ::
  {:ok, [String.t()], font_face()} | :error

Resolves a CSS font-family value or fallback list to a supported font face.

text_width(text, font, font_size)

@spec text_width(String.t(), map(), number()) :: number()

Measures text in PDF points for the selected font and size.

unicode_mappings(texts, font)

@spec unicode_mappings([String.t()], embedded_font()) :: %{
  optional(non_neg_integer()) => non_neg_integer()
}

Builds CID-to-Unicode mappings for all text shown with an embedded font.