Skip to main content

Crate lightweight_pdf

Crate lightweight_pdf 

Source
Expand description

Public facade for lightweight-pdf: re-exports the lightweight-pdf-core builder API and adds Document::render() (ADR-002 — this is the crate users add to Cargo.toml, the place render() becomes public).

Structs§

Border
Color
Column
Common
Properties shared by every container/block element: padding, width, height, overflow, background, border, plus flex (taffy-vocabulary, ADR-004) and keep_with_next (ADR-007 / Grundprinzip 9). Deliberately no margin on elements (ADR/03: only padding + Row/Column gap, margin is a Document-level property).
Document
DocumentMetadata
FontKey
Opaque handle for a font. lightweight-pdf-core never sees font bytes, only this key (see plan/00a-contracts-and-artifacts.md, point 3).
FontRegistry
Footer
Header
A header band with a fixed, document-creation-time height (ADR-011): the closure may vary its content per page but never the reserved band size.
Image
A validated, embeddable JPEG or PNG. bytes are the original file bytes, kept as-is — pixel decoding (only ever needed for PNG, to split out the alpha channel as a SMask) happens later, in the facade.
LayoutWarning
Line
List
ListItem
Margin
PageContext
Passed to Header/Footer closures on every (re-)evaluation. Plain data only, so it can live in lightweight-pdf-core without pulling in layout/font knowledge (ADR-010).
PdfDate
A UTC timestamp for /CreationDate//ModDate. Always an explicit caller-supplied value, never read from the system clock: wasm32-unknown-unknown has none, and reproducible output (same Document -> byte-identical PDF) is a feature, not an accident.
Rect
Row
Spacer
Span
One independently-styled run within Text::rich(..).
Table
TableCell
TableColumn
TableOfContents
Self-populating from every Text::outline_level/.heading1()-etc. heading in the document (the same source the PDF bookmark sidebar is built from), with correct page numbers — the two-pass layout already determines those in pass 1, this element just renders them in pass 2 (see lightweight-pdf-layout::toc). Entries are always left-aligned, one per line, indented by heading depth, with a leader (.leader()) filling the gap to a right-hand page number; .style controls font/size/color for every entry uniformly.
Text
TextStyle
Theme
Named TextStyle roles. Theme::default() reproduces exactly the hardcoded values TextStyle::default()/.heading1()/.heading2()/ .heading3() already used before Theme existed (caption/ table_header/muted are new roles with no prior hardcoded equivalent, so they can’t break existing output either way).
Watermark

Enums§

Align
BorderStyle
ColumnWidth
A column’s width: fixed(w) reserves an exact width, flex(weight) shares the leftover space proportionally (taffy flex-grow analogy, ADR-004 / 03-builder-api-design.md) — the same distribution step as Row, not a generic flex implementation.
Element
One element in the document tree. Enum-based (not Box<dyn Layoutable>) — a closed, small set of primitives.
FontError
HyphenationLanguage
A language .hyphenate(lang) can insert Knuth-Liang break points for (lightweight-pdf-layout’s hyphenation feature; see that crate’s hyphenate module for the dictionaries themselves).
ImageEmbedError
ImageError
ImageFormat
LayoutWarningKind
Marker
Orientation
Overflow
Overflow policy for explicitly, fixed-size elements. See plan/05-overflow-and-robustness.md, Grundprinzip 3. Visible is intentionally not part of V1 (ADR-011).
PageFormat
Page formats supported for documents. Dimensions in PDF points (1/72 inch).
RenderError
ThemeRole

Traits§

DocumentExt
Extension trait adding render()/render_with_diagnostics() (bundled default fonts) and render_with_fonts()/render_with_fonts_and_diagnostics() (caller-supplied fonts, see fonts.rs::FontRegistry::with_fonts()) to lightweight_pdf_core::Document. Lives here (not in lightweight-pdf-core) because rendering needs layout, fonts and the PDF writer — lightweight-pdf-core must not depend on any of them (ADR-002). This is the point at which render() becomes public (ADR-002).
TableRow
Implemented by a domain type (an invoice line item, a report row, …) that knows how to render itself as one table row — lets callers write Table::new()...from_rows(&items) instead of hand-building vec![vec![Element::from(..), ...]] per row, where the column order is invisible at the call site and only checked at runtime. The plain .rows(vec![vec![..]]) form stays available for ad hoc tables.

Functions§

format_currency_de
Formats a cent amount as German currency: thousands-grouped with ., decimal comma, trailing — e.g. format_currency_de(123456) == "1.234,56 €".