Skip to main content

Crate pdf_base14_metrics

Crate pdf_base14_metrics 

Source
Expand description

Pre-parsed Adobe Core 14 PDF font metrics.

The 14 PostScript faces every PDF 1.7-conformant viewer ships built-in: Helvetica × 4, Times × 4, Courier × 4, Symbol, ZapfDingbats: exposed as &'static FontMetrics<'static> constants that cost nothing at runtime. The AFM files are vendored from tecnickcom/tc-font-core14-afms under data/, parsed by the sibling adobe-font-metrics crate at build time (see build.rs), and baked into Rust statics in $OUT_DIR/baked.rs.

§Quick start

use pdf_base14_metrics::Base14Font;

// Look up a glyph width by PostScript name.
assert_eq!(Base14Font::Helvetica.glyph_width("A"), Some(667.0));

// Or via PDF `WinAnsiEncoding` byte (Latin faces only).
assert_eq!(Base14Font::Helvetica.winansi_width(b'A'), Some(667.0));

// Iterate every Core 14 face in stable order.
for f in Base14Font::ALL {
    let m = f.metrics();
    assert!(!m.character_metrics.is_empty());
}

§Encoding caveat: Symbol and ZapfDingbats

Base14Font::winansi_width returns None for Base14Font::Symbol and Base14Font::ZapfDingbats: those fonts use their own PostScript encodings (Greek/math operators and named dingbats respectively), not WinAnsi. Querying them through a Latin-1 byte would be a category error; the byte 0x41 is "A" in WinAnsi but "Alpha" in Symbol. Callers must reach for the per-glyph Base14Font::glyph_width API for those two fonts.

§License

The crate’s Rust source is MIT. The 14 vendored AFM files in data/afm/ ship under Adobe’s permissive Core 14 AFM license (APAFML); see LICENSE-APAFML in the crate root. The combined SPDX expression is MIT AND APAFML.

Structs§

BBox
A font or glyph bounding box, with ordinary f32 precision limits.
CharacterMetric
One character record; missing advances stay absent until resolved against the font.
Composite
A CC construction recipe; it does not synthesize outlines or character metrics.
CompositeComponent
One PCC component in a composite definition.
DirectionMetrics
Authored metrics for one writing direction. Shared blocks populate both entries.
FontMetrics
Parsed AFM metric data. Optional authored fields retain absence; accessors resolve defaults.
KerningPair
A complete pair adjustment in one writing direction.
Ligature
One L successor ligature rule. Every rule on a character is retained in order.
SourceRecord
Comment or uninterpreted extension data, ordered by appearance in the source.
TrackKern
One track-kerning curve, retained as its degree and endpoint values.
Vector
A point or displacement in AFM units (1/1000 of the font scale).

Enums§

Base14Font
One of the 14 standard PDF fonts every conformant PDF reader ships built in (PDF 1.7 §9.6.2.2).
CharacterCode
An encoded character number; hexadecimal digits are retained without angle brackets. These values are encoding-specific and are not Unicode scalar values.
Direction
AFM writing direction, independent of the sign or axis of an advance vector.
KerningOperands
Pair operands retain the distinction between glyph names and encoded hexadecimal values.
MetricsSets
MetricsSets or StartDirection selector; 2 applies to both directions.
RecordContext
Location of a comment or unrecognized record within the parsed AFM structure.

Constants§

COURIER_BOLDOBLIQUE_CHARS 🔒
COURIER_BOLDOBLIQUE_COMPOSITES 🔒
COURIER_BOLDOBLIQUE_KERNS 🔒
COURIER_BOLDOBLIQUE_NAME_WIDTHS 🔒
COURIER_BOLDOBLIQUE_RECORDS 🔒
COURIER_BOLDOBLIQUE_TRACKS 🔒
COURIER_BOLDOBLIQUE_WINANSI 🔒
COURIER_BOLD_CHARS 🔒
COURIER_BOLD_COMPOSITES 🔒
COURIER_BOLD_KERNS 🔒
COURIER_BOLD_NAME_WIDTHS 🔒
COURIER_BOLD_RECORDS 🔒
COURIER_BOLD_TRACKS 🔒
COURIER_BOLD_WINANSI 🔒
COURIER_CHARS 🔒
COURIER_COMPOSITES 🔒
COURIER_KERNS 🔒
COURIER_NAME_WIDTHS 🔒
COURIER_OBLIQUE_CHARS 🔒
COURIER_OBLIQUE_COMPOSITES 🔒
COURIER_OBLIQUE_KERNS 🔒
COURIER_OBLIQUE_NAME_WIDTHS 🔒
COURIER_OBLIQUE_RECORDS 🔒
COURIER_OBLIQUE_TRACKS 🔒
COURIER_OBLIQUE_WINANSI 🔒
COURIER_RECORDS 🔒
COURIER_TRACKS 🔒
COURIER_WINANSI 🔒
HELVETICA_BOLDOBLIQUE_CHARS 🔒
HELVETICA_BOLDOBLIQUE_COMPOSITES 🔒
HELVETICA_BOLDOBLIQUE_KERNS 🔒
HELVETICA_BOLDOBLIQUE_NAME_WIDTHS 🔒
HELVETICA_BOLDOBLIQUE_RECORDS 🔒
HELVETICA_BOLDOBLIQUE_TRACKS 🔒
HELVETICA_BOLDOBLIQUE_WINANSI 🔒
HELVETICA_BOLD_CHARS 🔒
HELVETICA_BOLD_COMPOSITES 🔒
HELVETICA_BOLD_KERNS 🔒
HELVETICA_BOLD_NAME_WIDTHS 🔒
HELVETICA_BOLD_RECORDS 🔒
HELVETICA_BOLD_TRACKS 🔒
HELVETICA_BOLD_WINANSI 🔒
HELVETICA_CHARS 🔒
HELVETICA_COMPOSITES 🔒
HELVETICA_KERNS 🔒
HELVETICA_NAME_WIDTHS 🔒
HELVETICA_OBLIQUE_CHARS 🔒
HELVETICA_OBLIQUE_COMPOSITES 🔒
HELVETICA_OBLIQUE_KERNS 🔒
HELVETICA_OBLIQUE_NAME_WIDTHS 🔒
HELVETICA_OBLIQUE_RECORDS 🔒
HELVETICA_OBLIQUE_TRACKS 🔒
HELVETICA_OBLIQUE_WINANSI 🔒
HELVETICA_RECORDS 🔒
HELVETICA_TRACKS 🔒
HELVETICA_WINANSI 🔒
SYMBOL_CHARS 🔒
SYMBOL_COMPOSITES 🔒
SYMBOL_KERNS 🔒
SYMBOL_RECORDS 🔒
SYMBOL_TRACKS 🔒
TIMES_BOLDITALIC_CHARS 🔒
TIMES_BOLDITALIC_COMPOSITES 🔒
TIMES_BOLDITALIC_KERNS 🔒
TIMES_BOLDITALIC_NAME_WIDTHS 🔒
TIMES_BOLDITALIC_RECORDS 🔒
TIMES_BOLDITALIC_TRACKS 🔒
TIMES_BOLDITALIC_WINANSI 🔒
TIMES_BOLD_CHARS 🔒
TIMES_BOLD_COMPOSITES 🔒
TIMES_BOLD_KERNS 🔒
TIMES_BOLD_NAME_WIDTHS 🔒
TIMES_BOLD_RECORDS 🔒
TIMES_BOLD_TRACKS 🔒
TIMES_BOLD_WINANSI 🔒
TIMES_ITALIC_CHARS 🔒
TIMES_ITALIC_COMPOSITES 🔒
TIMES_ITALIC_KERNS 🔒
TIMES_ITALIC_NAME_WIDTHS 🔒
TIMES_ITALIC_RECORDS 🔒
TIMES_ITALIC_TRACKS 🔒
TIMES_ITALIC_WINANSI 🔒
TIMES_ROMAN_CHARS 🔒
TIMES_ROMAN_COMPOSITES 🔒
TIMES_ROMAN_KERNS 🔒
TIMES_ROMAN_NAME_WIDTHS 🔒
TIMES_ROMAN_RECORDS 🔒
TIMES_ROMAN_TRACKS 🔒
TIMES_ROMAN_WINANSI 🔒
ZAPFDINGBATS_CHARS 🔒
ZAPFDINGBATS_COMPOSITES 🔒
ZAPFDINGBATS_KERNS 🔒
ZAPFDINGBATS_RECORDS 🔒
ZAPFDINGBATS_TRACKS 🔒

Statics§

COURIER 🔒
COURIER_BOLD 🔒
COURIER_BOLDOBLIQUE 🔒
COURIER_OBLIQUE 🔒
HELVETICA 🔒
HELVETICA_BOLD 🔒
HELVETICA_BOLDOBLIQUE 🔒
HELVETICA_OBLIQUE 🔒
SYMBOL 🔒
TIMES_BOLD 🔒
TIMES_BOLDITALIC 🔒
TIMES_ITALIC 🔒
TIMES_ROMAN 🔒
ZAPFDINGBATS 🔒

Functions§

extended_glyph_name
Returns the extended-tier PostScript glyph name for ch.
winansi_byte
Returns the PDF WinAnsiEncoding byte that encodes ch, or None if ch has no slot in WinAnsi.
winansi_glyph_name
Returns the PostScript glyph name assigned to PDF WinAnsiEncoding byte code, or None for unmapped codes.