Dashed and dotted lines

An accountant's statement is easier to read when the rules between its rows are quiet: a hairline of dots rather than a solid line, and a dashed rule above the total. The usual way to get that is to draw a great many short strokes and hope the spacing survives a change of column width — which it does not, and the day the table gains a row somebody is counting dots by hand.

Nothing here is drawn twice over. Each rule is one single line told what to look like: the length of its dashes and of the gaps between them, the shape of its two ends, the shape of the corner where it turns. Widen the column and the dashes keep their spacing; add a row and nobody counts anything. A table is told the same thing once, and every rule in it, down to the border of one cell, comes out that way.

What this example shows

  • Dashes, dots and gaps, in any pattern, on any line.
  • Ends squared off, rounded, or run past the end of the line.
  • A table ruled with dots, and a total held off by a dashed line.

The source code, complete

Nothing is left out and nothing is simplified: this is the program exactly as it runs, for the developer who uses this library. The third is the description itself: a plain list of what the page has to say, which is what the service is sent.

Read the Rust source Read the Python source Read the JSON source

The document itself

Open the document in English Open the document in French

Examples near this one

A minimal PDF

Two identical pages carrying the bones of an invoice in plain shapes, and not a word of text: a file of a dozen kilobytes, with no font embedded.

Making the file smaller

The same document written twice, plainly and packed, with what each one weighs and what the packing saved.

Fonts embedded in the file

Text set in a font embedded in the file, cut down to the letters actually used, and still searchable, copyable and readable aloud.

Every example, by subject