• ANNOUNCE: tclpdf 1.5 released

    From =?UTF-8?Q?Alexander_Sch=C3=B6pe?=@ete-sep@mxbo.de to comp.lang.tcl on Mon Sep 28 17:04:32 2026
    From Newsgroup: comp.lang.tcl

    ANNOUNCE: tclpdf 1.5 released - runs, headings and lists inside a paragraph =========================================================================

    tclpdf is a pure Tcl extension for creating PDF documents: pages and
    graphics, embedded fonts in four formats - TrueType subset to the glyphs actually used, OpenType with CFF outlines, a bare CFF table and Type 1 -
    plus Type 3 fonts drawn by the caller, JPEG, PNG and TIFF images, SVG
    drawn as vectors, flowing text with bold, italic, underlined and struck
    runs, links, headings and lists inside a paragraph - written with tags
    or in Markdown -, tables, layers, interactive form fields, tagged and accessible documents up to PDF/UA-2, encryption, digital signatures, and electronic invoices as ZUGFeRD / Factur-X in PDF/A-3B. It also reads: a
    page of an existing PDF is taken over as a form, a finished file is
    continued by an incremental update, and what a foreign file says about
    itself is answered as a dictionary. Developed by Alexander Schoepe, it requires Tcl 8.6.11+ and runs under Tcl 9 as well; zlib is a built-in
    command rather than a package, tdom is needed only for the XMP metadata
    of a PDF/A, PDF/UA or ZUGFeRD document, and Tk is not used.

    Built on and measured against ISO 32000-1 and -2, ISO 19005-2 and -3
    (PDF/A), ISO 14289-1 and -2 (PDF/UA), EN 16931 with ZUGFeRD 2.3 /
    Factur-X 1.09.2 and Order-X, ETSI EN 319 142-1 and RFC 5652 for
    signatures, RFC 3161 for timestamps, ISO/IEC 14496-22 for fonts. What
    claims a profile is checked against it on every run: veraPDF,
    Mustangproject, qpdf and pdfsig over every document. 4616 tests in 89
    files, green under Tcl 8.6.18 and Tcl 9.0.4 alike; 87 examples writing
    96 documents, every one run, validated and looked at.

    1.5 is about one road: a paragraph may now carry bold, italic,
    underlined and struck words, links, headings and lists, and the line
    breaker measures every piece in its own face. The primitive is a list of
    {text options} pairs; tags and Markdown are two notations that become
    that list, both read strictly and both proven to set the same bytes.
    1.4, four weeks earlier, added the document timestamp. The API grew and nothing was withdrawn.

    Tech notes:
    What 1.5 does, and what it deliberately does not: https://fossil.sowaswie.de/tclpdf/technote/01fad837fc
    One day, one release - 2026-08-31 from 1.3 to 1.4, measured: https://fossil.sowaswie.de/tclpdf/technote/16070dfc64

    Download / Repository: https://fossil.sowaswie.de/tclpdf
    Author: Alexander Schoepe <alx.tcl@sowaswie.de>


    English
    -------

    New since 1.3:

    * "text -runs 1" sets a list of {text options} pairs as runs in flowing
    text: style bold, italic or both, underline, strike, url; a run keeps
    the paragraph's size and colour. "heading 1|2|3" makes a run a paragraph
    of its own, larger and bold, never the last line of a page; "item bullet|number" makes it a list item with a bullet or a counted number.
    In a tagged document that is H1 to H3, and L with LI, Lbl and LBody,
    green under veraPDF for PDF/UA-1 and UA-2. "textLines" and the rest of a height-limited block answer in the same shape.
    * "text -markup tags" reads b, i, u, s, em, strong, a href, h1 to h3, p,
    ul, ol and li - nothing else between angle brackets is a tag, &lt;
    writes a literal one - with strict nesting and every fault refused by
    name and position.
    * "text -markup markdown" reads **strong**, *em*, ~~struck~~,
    [text](url), "# " to "### " and "- " or "1. " at the start of a line; no underline, "_" is text, the rest of Markdown is text rather than
    refused, and a run left open is refused with its position - deliberately against CommonMark.
    * "font family name -regular -bold -italic -boldItalic" ties the faces
    of an embedded family under one name, so that -style bold and every bold
    run reach it; a face the family lacks is refused by name, not set
    regular in silence.
    * Underline and strikeout take their place and weight from the face -
    post and OS/2 of an embedded one, the AFM of the standard fourteen.
    * Since 1.4: "sign timestamp" appends an RFC 3161 token over every byte
    of a finished file, signed or not, verified before a byte is written; a stamped PDF/A file stays PDF/A.

    Changed since 1.3:

    * A two-line heading set as one run gives its second paragraph the
    heading's leading as well; before, it had the heading's size with the
    leading of the running text.

    Notes:

    * Installing: the release archives tclpdf1.5.zip and tclpdf1.5.tar.gz
    hold one directory tclpdf1.5 with the modules, pkgIndex.tcl and the ICC profiles - nothing to build; extract it into a directory on your
    auto_path and "package require tclpdf" finds it. The source archive
    builds the TEA way in the source directory: ./configure, make test, make install. A separate build directory configures cleanly but cannot run
    the tests, because the generated pkgIndex.tcl locates the modules
    through $dir while the sources stay where they are.
    * tdom is required for the XMP metadata packet, so every document that declares PDF/A, PDF/UA or ZUGFeRD needs it; a document with no such
    claim runs without it. The SVG module uses it as well when present: it
    parses 27 to 48 times faster than the parser tclpdf brings along and
    refuses an entity expansion bomb, and without it SVG still works through
    the built-in element tree parser. tzint is optional and only for
    barcodes. Nothing else is used - the encryption and the signatures are
    pure Tcl.
    * No font is part of the package. The faces under examples/assets/fonts
    exist so that the tests and examples have something to embed and travel
    in the source archive alone; "make install" installs none. Whether you
    may embed a font into a PDF that tclpdf writes is a question for that
    font's licence, not for this one.
    * Not coming, each for a measured reason: nested lists, runs that change
    the size or the colour, mixed writing directions in one call, PDF/X, RC4
    and the older encryption revisions, EPS, GIF and BMP.
    --- Synchronet 3.22a-Linux NewsLink 1.2